Bug 1961719 - Add a script for tallying allocation requests r=glandium DONTBUILD
Differential Revision: https://phabricator.services.mozilla.com/D246166
This commit is contained in:
committed by
pbone@mozilla.com
parent
61c2a7bdfc
commit
02be5aa7d9
@@ -93,3 +93,8 @@ through a different allocator. For example:
|
||||
|
||||
Will replay the log against jemalloc4 (which is, as of writing, what
|
||||
libreplace_jemalloc.so contains).
|
||||
|
||||
The log files can also be used for other analysis. The logalloc_stats.py
|
||||
script will tally the allocation requests for small, large and huge
|
||||
allocations (as configured on a system with 4KiB pages).
|
||||
|
||||
|
||||
60
memory/replace/logalloc/replay/logalloc_stats.py
Executable file
60
memory/replace/logalloc/replay/logalloc_stats.py
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/python3
|
||||
# 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 https://mozilla.org/MPL/2.0/.
|
||||
|
||||
|
||||
import sys
|
||||
|
||||
from logalloc_munge import split_log_line
|
||||
|
||||
|
||||
def get_size(line):
|
||||
try:
|
||||
pid, tid, func, args, result = split_log_line(line)
|
||||
if func == "malloc":
|
||||
return int(args[0])
|
||||
elif func == "calloc":
|
||||
return int(args[0]) * int(args[1])
|
||||
elif func == "memalign":
|
||||
return int(args[1])
|
||||
elif func == "realloc":
|
||||
return int(args[1])
|
||||
else:
|
||||
return None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
def main():
|
||||
small = 0
|
||||
large = 0
|
||||
huge = 0
|
||||
|
||||
for line in sys.stdin:
|
||||
size = get_size(line.strip())
|
||||
if not size:
|
||||
continue
|
||||
|
||||
# Assumes a 4KiB page size, which is not true on Apple Silicon and
|
||||
# some other platforms.
|
||||
if size < 4096:
|
||||
small += 1
|
||||
elif size < 1024 * 1024:
|
||||
large += 1
|
||||
else:
|
||||
huge += 1
|
||||
|
||||
total = small + large + huge
|
||||
|
||||
def print_percent(name, value):
|
||||
pct = 100 * value / total
|
||||
print(f"{name:<5}: {value:>12,} {pct:6.2f}%")
|
||||
|
||||
print_percent("Small", small)
|
||||
print_percent("Large", large)
|
||||
print_percent("Huge", huge)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user