diff options
author | Kostya Serebryany <kcc@google.com> | 2016-07-21 21:38:40 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2016-07-21 21:38:40 +0000 |
commit | 396ca7b4b755a985bcfaf7e0fcad3c78db15e9c7 (patch) | |
tree | 5518926ed29148e380f8feb30ebfdc32a46750fa /lib | |
parent | 829778e09d47dbe0ce9185d11e70d7a3e6d23f69 (diff) |
[sanitizer] better allocator stats (with rss)
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@276343 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sanitizer_common/sanitizer_allocator.h | 1 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_allocator_primary64.h | 20 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_win.cc | 5 |
3 files changed, 24 insertions, 2 deletions
diff --git a/lib/sanitizer_common/sanitizer_allocator.h b/lib/sanitizer_common/sanitizer_allocator.h index 61946699b..da7435051 100644 --- a/lib/sanitizer_common/sanitizer_allocator.h +++ b/lib/sanitizer_common/sanitizer_allocator.h @@ -20,6 +20,7 @@ #include "sanitizer_list.h" #include "sanitizer_mutex.h" #include "sanitizer_lfstack.h" +#include "sanitizer_procmaps.h" namespace __sanitizer { diff --git a/lib/sanitizer_common/sanitizer_allocator_primary64.h b/lib/sanitizer_common/sanitizer_allocator_primary64.h index 13f352adb..cc374109e 100644 --- a/lib/sanitizer_common/sanitizer_allocator_primary64.h +++ b/lib/sanitizer_common/sanitizer_allocator_primary64.h @@ -144,6 +144,13 @@ class SizeClassAllocator64 { UnmapWithCallback(SpaceBeg(), kSpaceSize + AdditionalSize()); } + static void FillMemoryProfile(uptr start, uptr rss, bool file, uptr *stats, + uptr stats_size) { + for (uptr class_id = 0; class_id < stats_size; class_id++) + if (stats[class_id] == start) + stats[class_id] = rss; + } + void PrintStats() { uptr total_mapped = 0; uptr n_allocated = 0; @@ -157,15 +164,24 @@ class SizeClassAllocator64 { Printf("Stats: SizeClassAllocator64: %zdM mapped in %zd allocations; " "remains %zd\n", total_mapped >> 20, n_allocated, n_allocated - n_freed); + uptr rss_stats[kNumClasses]; + for (uptr class_id = 0; class_id < kNumClasses; class_id++) + rss_stats[class_id] = SpaceBeg() + kRegionSize * class_id; + GetMemoryProfile(FillMemoryProfile, rss_stats, kNumClasses); for (uptr class_id = 1; class_id < kNumClasses; class_id++) { RegionInfo *region = GetRegionInfo(class_id); if (region->mapped_user == 0) continue; - Printf(" %02zd (%zd): total: %zd K allocs: %zd remains: %zd\n", + uptr in_use = region->n_allocated - region->n_freed; + uptr avail_chunks = region->allocated_user / SizeClassMap::Size(class_id); + Printf(" %02zd (%zd): mapped: %zdK allocs: %zd frees: %zd inuse: %zd" + " avail: %zd rss: %zdK\n", class_id, SizeClassMap::Size(class_id), region->mapped_user >> 10, region->n_allocated, - region->n_allocated - region->n_freed); + region->n_freed, + in_use, avail_chunks, + rss_stats[class_id] >> 10); } } diff --git a/lib/sanitizer_common/sanitizer_win.cc b/lib/sanitizer_common/sanitizer_win.cc index 36d9204f8..cb4d7ddaa 100644 --- a/lib/sanitizer_common/sanitizer_win.cc +++ b/lib/sanitizer_common/sanitizer_win.cc @@ -27,6 +27,7 @@ #include "sanitizer_libc.h" #include "sanitizer_mutex.h" #include "sanitizer_placement_new.h" +#include "sanitizer_procmaps.h" #include "sanitizer_stacktrace.h" #include "sanitizer_symbolizer.h" @@ -884,6 +885,10 @@ bool IsProcessRunning(pid_t pid) { int WaitForProcess(pid_t pid) { return -1; } +// FIXME implement on this platform. +void GetMemoryProfile(fill_profile_f cb, uptr *stats, uptr stats_size) { } + + } // namespace __sanitizer #endif // _WIN32 |