summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2016-07-21 21:38:40 +0000
committerKostya Serebryany <kcc@google.com>2016-07-21 21:38:40 +0000
commit396ca7b4b755a985bcfaf7e0fcad3c78db15e9c7 (patch)
tree5518926ed29148e380f8feb30ebfdc32a46750fa /lib
parent829778e09d47dbe0ce9185d11e70d7a3e6d23f69 (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.h1
-rw-r--r--lib/sanitizer_common/sanitizer_allocator_primary64.h20
-rw-r--r--lib/sanitizer_common/sanitizer_win.cc5
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