Bug 1670188 - pt 2. Add a tool that prints the run lengths for size classes r=glandium

This new program prints the jemalloc configuration, it is only built for
--enable-project=memory

Differential Revision: https://phabricator.services.mozilla.com/D93184
This commit is contained in:
Paul Bone 2020-11-20 03:33:57 +00:00
parent 790088fdb7
commit 96d3e53990
5 changed files with 73 additions and 3 deletions

View File

@ -4330,6 +4330,7 @@ inline void MozJemalloc::jemalloc_stats_internal(
aBinStats[j].bytes_unused += bin_unused;
aBinStats[j].bytes_total +=
bin->mNumRuns * (bin->mRunSize - bin->mRunFirstRegionOffset);
aBinStats[j].bytes_per_run = bin->mRunSize;
}
}
}

View File

@ -106,7 +106,7 @@ typedef struct {
size_t num_runs; // The number of runs in this bin
size_t bytes_unused; // The unallocated bytes across all these bins
size_t bytes_total; // The total storage area for runs in this bin,
// excluding headers..
size_t bytes_per_run; // The number of bytes per run, including headers.
} jemalloc_bin_stats_t;
#define JEMALLOC_MAX_STATS_BINS 40

View File

@ -11,8 +11,12 @@ DIRS += [
"build",
]
# For now, don't build mozalloc when building with --enable-project=memory
if CONFIG["MOZ_BUILD_APP"] != "memory":
if CONFIG["MOZ_BUILD_APP"] == "memory":
DIRS += [
"mozjemalloc_info",
]
else:
# For now, don't build mozalloc when building with --enable-project=memory
DIRS += [
"mozalloc",
]

View File

@ -0,0 +1,39 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include <stdio.h>
#include <stdlib.h>
#include "mozmemory.h"
/*
* Print the configured size classes which we can then use to update
* documentation.
*/
int main() {
jemalloc_stats_t stats;
jemalloc_bin_stats_t bin_stats[JEMALLOC_MAX_STATS_BINS];
jemalloc_stats(&stats, bin_stats);
printf("Page size: %5zu\n", stats.page_size);
printf("Chunk size: %5zuKiB\n", stats.chunksize / 1024);
printf("Quantum: %5zu\n", stats.quantum);
printf("Quantum max: %5zu\n", stats.quantum_max);
printf("Sub-page max: %5zu\n", stats.page_size / 2);
printf("Large max: %5zuKiB\n", stats.large_max / 1024);
printf("\nBin stats:\n");
for (auto& bin : bin_stats) {
if (bin.size) {
printf(" Bin %5zu has runs of %3zuKiB\n", bin.size,
bin.bytes_per_run / 1024);
}
}
return EXIT_SUCCESS;
}

View File

@ -0,0 +1,26 @@
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
Program("mozjemalloc-info")
SOURCES += [
"/mfbt/Assertions.cpp",
"/mfbt/RandomNum.cpp",
"MozjemallocInfo.cpp",
]
# Link replace-malloc and the default allocator.
USE_LIBS += [
"memory",
]
# The memory library defines this, so it's needed here too.
DEFINES["IMPL_MFBT"] = True
if CONFIG["MOZ_NEEDS_LIBATOMIC"]:
OS_LIBS += ["atomic"]
DisableStlWrapping()