Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(241)

Unified Diff: third_party/tcmalloc/tcmalloc.cc

Issue 251065: Tracks the amount of committed vs uncommitted memory in tcmalloc's page heap's freelists (Closed)
Patch Set: whitespace Created 11 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/tcmalloc/page_heap.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/tcmalloc/tcmalloc.cc
diff --git a/third_party/tcmalloc/tcmalloc.cc b/third_party/tcmalloc/tcmalloc.cc
index e3bbb819c44d556f6108845e679c1fd2ffd47f12..97cc4144b3dc5918b216aadd2cdb2eb23c0bba26 100644
--- a/third_party/tcmalloc/tcmalloc.cc
+++ b/third_party/tcmalloc/tcmalloc.cc
@@ -367,6 +367,7 @@ size_t InvalidGetAllocatedSize(void* ptr) {
// Extract interesting stats
struct TCMallocStats {
uint64_t system_bytes; // Bytes alloced from system
+ uint64_t committed_bytes; // Bytes alloced and committed from system
uint64_t thread_bytes; // Bytes in thread caches
uint64_t central_bytes; // Bytes in central cache
uint64_t transfer_bytes; // Bytes in central transfer cache
@@ -398,6 +399,7 @@ static void ExtractStats(TCMallocStats* r, uint64_t* class_count) {
{ //scope
SpinLockHolder h(Static::pageheap_lock());
r->system_bytes = Static::pageheap()->SystemBytes();
+ r->committed_bytes = Static::pageheap()->CommittedBytes();
r->metadata_bytes = tcmalloc::metadata_system_bytes();
r->pageheap_bytes = Static::pageheap()->FreeBytes();
}
@@ -411,6 +413,20 @@ static void DumpStats(TCMalloc_Printer* out, int level) {
static const double MB = 1048576.0;
+ const uint64_t bytes_in_use = stats.system_bytes
+ - stats.pageheap_bytes
+ - stats.central_bytes
+ - stats.transfer_bytes
+ - stats.thread_bytes;
+
+ out->printf("WASTE: %7.1f MB committed but not used\n"
+ "WASTE: %7.1f MB bytes committed, %7.1f MB bytes in use\n"
+ "WASTE: committed/used ratio of %f\n",
+ (stats.committed_bytes - bytes_in_use) / MB,
+ stats.committed_bytes / MB,
+ bytes_in_use / MB,
+ stats.committed_bytes / static_cast<double>(bytes_in_use));
+
if (level >= 2) {
out->printf("------------------------------------------------\n");
uint64_t cumulative = 0;
@@ -435,14 +451,9 @@ static void DumpStats(TCMalloc_Printer* out, int level) {
DumpSystemAllocatorStats(out);
}
- const uint64_t bytes_in_use = stats.system_bytes
- - stats.pageheap_bytes
- - stats.central_bytes
- - stats.transfer_bytes
- - stats.thread_bytes;
-
out->printf("------------------------------------------------\n"
"MALLOC: %12" PRIu64 " (%7.1f MB) Heap size\n"
+ "MALLOC: %12" PRIu64 " (%7.1f MB) Bytes committed\n"
"MALLOC: %12" PRIu64 " (%7.1f MB) Bytes in use by application\n"
"MALLOC: %12" PRIu64 " (%7.1f MB) Bytes free in page heap\n"
"MALLOC: %12" PRIu64 " (%7.1f MB) Bytes free in central cache\n"
@@ -453,6 +464,7 @@ static void DumpStats(TCMalloc_Printer* out, int level) {
"MALLOC: %12" PRIu64 " (%7.1f MB) Metadata allocated\n"
"------------------------------------------------\n",
stats.system_bytes, stats.system_bytes / MB,
+ stats.committed_bytes, stats.committed_bytes / MB,
bytes_in_use, bytes_in_use / MB,
stats.pageheap_bytes, stats.pageheap_bytes / MB,
stats.central_bytes, stats.central_bytes / MB,
@@ -571,6 +583,13 @@ class TCMallocImplementation : public MallocExtension {
return true;
}
+ if (strcmp(name, "generic.committed_bytes") == 0) {
+ TCMallocStats stats;
+ ExtractStats(&stats, NULL);
+ *value = Static::pageheap()->CommittedBytes();
+ return true;
+ }
+
if (strcmp(name, "tcmalloc.slack_bytes") == 0) {
// We assume that bytes in the page heap are not fragmented too
// badly, and are therefore available for allocation.
« no previous file with comments | « third_party/tcmalloc/page_heap.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698