Human-readable statistics can be obtained by calling
tcmalloc::MallocExtension::GetStats().
The output contains a lot of information. Much of it is debug telemetry for engineers working on TCMalloc internals, while the top-level summary and cache breakdowns are the most useful sections for application debugging.
The most generally useful section is the first few lines:
See https://github.com/google/tcmalloc/tree/master/docs/stats.md for an explanation of this page
------------------------------------------------
MALLOC: 10858234672 (10355.2 MiB) Bytes in use by application
MALLOC: + 827129856 ( 788.8 MiB) Bytes in page heap freelist
MALLOC: + 386098400 ( 368.2 MiB) Bytes in central cache freelist
MALLOC: + 105330688 ( 100.5 MiB) Bytes in per-CPU cache freelist
MALLOC: + 0 ( 0.0 MiB) Bytes in Sharded cache freelist
MALLOC: + 9095680 ( 8.7 MiB) Bytes in transfer cache freelist
MALLOC: + 660976 ( 0.6 MiB) Bytes in thread cache freelists
MALLOC: + 49333930 ( 47.0 MiB) Bytes in malloc metadata
MALLOC: + 629440 ( 0.6 MiB) Bytes in malloc metadata Arena unallocated
MALLOC: + 1599704 ( 1.5 MiB) Bytes in malloc metadata Arena unavailable
MALLOC: ------------
MALLOC: = 12238113346 (11671.2 MiB) Actual memory used (physical + swap)
MALLOC: + 704643072 ( 672.0 MiB) Bytes released to OS (aka unmapped)
MALLOC: ------------
MALLOC: = 12942756418 (12343.2 MiB) Virtual address space used
The summary block ends with three totals:
madvise, as described in
TCMalloc tuning. This value sums unmapped page heap bytes and
non-resident metadata arena bytes.The next lines break down internal metadata structures, per-CPU slab residency, and metadata arena allocations:
MALLOC: 236176 Spans in use
MALLOC: 238709 ( 10.9 MiB) Spans created
MALLOC: 8 Thread heaps in use
MALLOC: 46 ( 0.0 MiB) Thread heaps created
MALLOC: 13517 Stack traces in use
MALLOC: 13742 ( 7.2 MiB) Stack traces created
MALLOC: 0 Table buckets in use
MALLOC: 2808 ( 0.0 MiB) Table buckets created
MALLOC: 11665416 ( 11.1 MiB) Pagemap bytes used
MALLOC: 4067336 ( 3.9 MiB) Pagemap root resident bytes
MALLOC: 4194304 ( 4.0 MiB) Pagemap root size
MALLOC: 33554796 ( 32.0 MiB) per-CPU slab bytes used
MALLOC: 33554432 ( 32.0 MiB) per-CPU slab resident bytes
MALLOC: 83886080 ( 80.0 MiB) malloc metadata Arena non-resident bytes
MALLOC: 12238113346 (11671.2 MiB) Actual memory used at peak
MALLOC: 11626207678 (11087.6 MiB) Estimated in-use at peak
MALLOC: 5.2632 Realized fragmentation (%)
Memory overhead at peak demand is more important than off-peak, since a process must be provisioned with enough memory to survive its peak requirements without running out of memory. After a peak in demand, memory may be deallocated and held in caches in anticipation of future reuse; overhead as a fraction of the remaining live allocations rises, but no additional memory is required.
This metric is called “realized fragmentation” and is described in “Adaptive Hugepage Subrelease for Non-moving Memory Allocators in Warehouse-Scale Computers”. The summary block reports a lifetime snapshot taken when TCMalloc reached its peak backed memory, using periodic allocation sampling to estimate live application usage at that peak.
There are three relevant page sizes for systems and TCMalloc:
MALLOC: 8192 Tcmalloc page size
MALLOC: 2097152 Tcmalloc hugepage size
MALLOC: 64 CPUs Allowed in Mask
MALLOC: 11 Arena blocks
MALLOC: 0 Arena freelist blocks
MALLOC: Arena per-type allocations:
MALLOC: Span: 10.927 MiB
MALLOC: SampledAllocation: 7.210 MiB
MALLOC: ThreadCache: 0.044 MiB
MALLOC: StackTraceTable: 0.043 MiB
MALLOC: FillerTracker: 1.512 MiB
MALLOC: HugeRegion: 0.150 MiB
MALLOC: PageMap: 11.125 MiB
MALLOC: PageAllocator: 0.002 MiB
MALLOC: GuardedPageAllocator: 0.133 MiB
MALLOC: HugePageMetadata: 0.001 MiB
MALLOC: TransferCache: 1.085 MiB
MALLOC: CpuCache: 112.450 MiB
Following the page sizes, TCMalloc reports:
There is an experiment framework embedded into TCMalloc. The status of each known experiment is reported as 1 when active and 0 when inactive:
MALLOC EXPERIMENTS: TCMALLOC_DEMAND_CYCLE_120S=0 TCMALLOC_PGHO_EXPERIMENT=0
The state of TCMalloc allocation hooks and sampled heap profiles is reported next:
MALLOC HOOKS: NEW=0 DELETE=0 SAMPLED_NEW=0 SAMPLED_DELETE=0
MALLOC SAMPLED PROFILES: 202167097 bytes (current), 9996851 bytes (internal fragmentation), 404936892 bytes (peak), 1485097 count (total)
The sampled profiles line reports the current estimated live heap bytes, the estimated internal fragmentation bytes from size-class rounding, the peak sampled live heap size in bytes, and the cumulative count of sampled allocations since startup.
The output next reports process-wide memory metrics recorded by the OS from
/proc/self/statm and /proc/self/status:
Total process stats (inclusive of non-malloc sources):
TOTAL: 86880677888 (82855.9 MiB) Bytes resident (physical memory used)
TOTAL: 89124790272 (84996.0 MiB) Bytes mapped (virtual memory used)
TOTAL: 1187840 ( 1.1 MiB) Bytes via VmPTE
------------------------------------------------
Call ReleaseMemoryToSystem() to release freelist memory to the OS (via madvise()).
Bytes released to the OS take up virtual address space but no physical memory.
When the internal stats buffer is smaller than 10,000 bytes, output stops after
this banner and skips directly to
Memory Requested From The OS. Calls to
tcmalloc::MallocExtension::GetStats() continue with the detailed sections
below.
Allocation requests up to 256 KiB are rounded up to discrete size classes. For example, a 15-byte request is rounded to the 16-byte size class. Each row in the per-size-class table reports the following columns from left to right:
------------------------------------------------
Total size of freelists for per-thread and per-CPU caches,
transfer cache, and central cache, as well as number of
live pages, returned/requested spans by size class
------------------------------------------------
class 1 [ 8 bytes ] : 45645 objs; 0.3 MiB; 0.3 cum MiB; 73 live pages; spans: 19 ret / 92 req = 0.2065; 1024 objs/span;
class 2 [ 16 bytes ] : 39942 objs; 0.6 MiB; 1.0 cum MiB; 120 live pages; spans: 3 ret / 123 req = 0.0244; 512 objs/span;
class 3 [ 24 bytes ] : 84130 objs; 1.9 MiB; 2.9 cum MiB; 807 live pages; spans: 1330 ret / 2137 req = 0.6224; 341 objs/span;
class 4 [ 32 bytes ] : 107271 objs; 3.3 MiB; 6.2 cum MiB; 1048 live pages; spans: 420 ret / 1468 req = 0.2861; 256 objs/span;
class 5 [ 40 bytes ] : 82230 objs; 3.1 MiB; 9.3 cum MiB; 790 live pages; spans: 962 ret / 1752 req = 0.5491; 204 objs/span;
...
The central cache freelist manages memory in spans of one or more TCMalloc pages and reports three per-size-class histograms.
First, the span utilization histogram prints two lines per size class:
< 2 through < 65536 showing the
non-cumulative number of spans by how many allocated objects they currently
hold.------------------------------------------------
Central cache freelist: Span utilization histogram
Non-cumulative number of spans with allocated objects < N
------------------------------------------------
class 1 [ 8 bytes ] : 0 < 2, 0 < 4, 0 < 8, 0 < 16, 1 < 32, 0 < 64, 1 < 128, 1 < 256, 1 < 512, 0 < 1024, 0 < 2048, 4 < 4096, 16 < 8192, 0 < 16384, 0 < 32768, 0 < 65536
class 1 [ 8 bytes ] : 0: 0, 1: 0, 2: 0, 3: 1, 4: 1, 5: 2, 6: 4, 7: 16
class 2 [ 16 bytes ] : 0 < 2, 0 < 4, 0 < 8, 0 < 16, 0 < 32, 0 < 64, 0 < 128, 0 < 256, 0 < 512, 1 < 1024, 0 < 2048, 47 < 4096, 0 < 8192, 0 < 16384, 0 < 32768, 0 < 65536
class 2 [ 16 bytes ] : 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 1, 6: 0, 7: 47
...
Second, the spans-used histogram counts how many distinct spans the central freelist had to touch to satisfy a single batch allocation request, bucketed by powers of two from 1 through 128:
------------------------------------------------
Central cache freelist: Number of spans used histogram
Number of spans used to fill a batch of allocations, from 0 to N
------------------------------------------------
class 1 [ 8 bytes ] : 1 : 112, 2 : 14, 4 : 3, 8 : 0, 16 : 0, 32 : 0, 64 : 0, 128 : 0
class 2 [ 16 bytes ] : 1 : 120, 2 : 3, 4 : 0, 8 : 0, 16 : 0, 32 : 0, 64 : 0, 128 : 0
...
Third, the same-span returns histogram measures batch coalescing when freed objects are returned to the central freelist. Returned batches are sorted by span so objects belonging to the same span are returned in a single run. The eight columns bucket each batch by the number of extra objects coalesced into existing span runs, using power-of-two buckets for 0, 1, 2 to 3, 4 to 7, 8 to 15, 16 to 31, 32 to 63, and 64 to 127 objects:
------------------------------------------------
Central cache freelist: Same-span returns
------------------------------------------------
class 1 [ 8 bytes ] : 45 82 130 95 41 12 0 0
class 2 [ 16 bytes ] : 38 64 110 72 19 4 0 0
...
The transfer cache sits between the frontend caches and the central freelist. For each size class, TCMalloc reports:
------------------------------------------------
Used bytes, current capacity, and maximum allowed capacity
of the transfer cache freelists.
It also reports insert/remove hits/misses by size class.
------------------------------------------------
class 1 [ 8 bytes ] : 1472 objs; 0.0 MiB; 0.0 cum MiB; 2048 capacity; 2048 max_capacity; 935 insert hits; 8543 insert misses ( 273376 object misses); 889 remove hits; 6612 remove misses ( 211584 object misses); 98.12345 frontline hit rate
class 2 [ 16 bytes ] : 608 objs; 0.0 MiB; 0.0 cum MiB; 2048 capacity; 2048 max_capacity; 575 insert hits; 3739 insert misses ( 119648 object misses); 556 remove hits; 3368 remove misses ( 107776 object misses); 97.45120 frontline hit rate
class 3 [ 24 bytes ] : 864 objs; 0.0 MiB; 0.0 cum MiB; 2048 capacity; 2048 max_capacity; 1533 insert hits; 15594 insert misses ( 499008 object misses); 1506 remove hits; 11939 remove misses ( 382048 object misses); 96.81040 frontline hit rate
...
Immediately following the main transfer cache table, TCMalloc prints cumulative statistics for the sharded transfer cache. This block reports whether the sharded transfer cache is active or inactive, the number of initialized shards across L3 cache domains, and the same per-size-class columns summed across all active shards:
------------------------------------------------
Cumulative sharded transfer cache stats.
Used bytes, current capacity, and maximum allowed capacity
of the sharded transfer cache freelists.
It also reports insert/remove hits/misses by size class.
------------------------------------------------
Sharded transfer cache state: ACTIVE
Number of active sharded transfer caches: 2
------------------------------------------------
class 1 [ 8 bytes ] : 0 objs; 0.0 MiB; 0.0 cum MiB; 0 capacity; 0 max_capacity; 0 insert hits; 0 insert misses ( 0 object misses); 0 remove hits; 0 remove misses ( 0 object misses); 0.00000 frontline hit rate
...
If the per-CPU cache is enabled, TCMalloc reports the memory cached on each logical CPU.
The header line reports the maximum byte limit per CPU, configured via
tcmalloc::MallocExtension::GetMaxPerCpuCacheSize() and described in
TCMalloc tuning. Each CPU row then reports:
Each size class on a CPU has a dynamic capacity up to a static per-size-class header limit. Summing each size class’s dynamic capacity multiplied by its object size gives the total memory reserved for size-class capacities on that CPU. The unallocated column reports the spare budget left over after subtracting that reserved capacity sum from the per-CPU byte limit, whereas the first column reports the bytes of objects actually stored in those slots right now.
------------------------------------------------
Bytes in per-CPU caches (per cpu limit: 3145728 bytes)
------------------------------------------------
cpu 0: 2168200 bytes ( 2.1 MiB) with 52536 bytes unallocated active populated
cpu 1: 1734880 bytes ( 1.7 MiB) with 258944 bytes unallocated active populated
cpu 2: 1779352 bytes ( 1.7 MiB) with 8384 bytes unallocated active populated
cpu 3: 1414224 bytes ( 1.3 MiB) with 112432 bytes unallocated active populated
cpu 4: 0 bytes ( 0.0 MiB) with 3145728 bytes unallocated
...
For each size class across all populated per-CPU caches, TCMalloc summarizes the allocated freelist capacity in objects and recent miss timing:
------------------------------------------------
Size class capacity statistics in per-cpu caches
------------------------------------------------
class 1 [ 8 bytes ] : 0 (minimum), 133.1 (average), 636 (maximum), 2048 maximum allowed capacity, maximum capacity misses 0, (underflow: [0 us CPU -1, 0 us CPU -1]; overflow [0 us CPU -1, 0 us CPU -1]
class 2 [ 16 bytes ] : 0 (minimum), 51.8 (average), 378 (maximum), 2048 maximum allowed capacity, maximum capacity misses 0, (underflow: [0 us CPU -1, 0 us CPU -1]; overflow [0 us CPU -1, 0 us CPU -1]
class 3 [ 24 bytes ] : 0 (minimum), 119.3 (average), 510 (maximum), 2048 maximum allowed capacity, maximum capacity misses 0, (underflow: [0 us CPU -1, 0 us CPU -1]; overflow [0 us CPU -1, 0 us CPU -1]
class 4 [ 32 bytes ] : 0 (minimum), 100.0 (average), 542 (maximum), 2048 maximum allowed capacity, maximum capacity misses 0, (underflow: [0 us CPU -1, 0 us CPU -1]; overflow [0 us CPU -1, 0 us CPU -1]
class 5 [ 40 bytes ] : 0 (minimum), 80.6 (average), 467 (maximum), 2048 maximum allowed capacity, maximum capacity misses 0, (underflow: [0 us CPU -1, 0 us CPU -1]; overflow [0 us CPU -1, 0 us CPU -1]
...
TCMalloc also tracks per-CPU cache miss, drain, and resize counts:
------------------------------------------------
Number of per-CPU cache underflows, overflows, and drains
------------------------------------------------
Total : 242 underflows, 12 overflows, overflows / underflows: 0.05, 168 drains (reclaims), 34 resizes
cpu 0: 69 underflows, 5 overflows, overflows / underflows: 0.07, 46 drains (reclaims), 10 resizes
cpu 1: 58 underflows, 0 overflows, overflows / underflows: 0.00, 42 drains (reclaims), 8 resizes
cpu 2: 62 underflows, 7 overflows, overflows / underflows: 0.11, 42 drains (reclaims), 9 resizes
cpu 3: 40 underflows, 0 overflows, overflows / underflows: 0.00, 27 drains (reclaims), 5 resizes
cpu 4: 13 underflows, 0 overflows, overflows / underflows: 0.00, 11 drains (reclaims), 2 resizes
cpu 5: 0 underflows, 0 overflows, overflows / underflows: 0.00, 0 drains (reclaims), 0 resizes
...
TCMalloc can dynamically adjust the per-CPU slab shift at runtime, where shift
N gives 2^N bytes per CPU. This section reports the active shift and per-CPU
slab size in KiB, the cumulative number of slab growths and shrinkages recorded
at each shift level, and the number of bytes on retired slabs where
MADV_DONTNEED failed:
------------------------------------------------
Per-CPU cache slab resizing info:
------------------------------------------------
Current shift: 18 (slab size: 256 KiB)
shift 14: 0 growths, 0 shrinkages
shift 15: 0 growths, 0 shrinkages
shift 16: 0 growths, 0 shrinkages
shift 17: 0 growths, 0 shrinkages
shift 18: 0 growths, 0 shrinkages
0 bytes for which MADVISE_DONTNEED failed
The page allocator, known as Temeraire or HugePageAwareAllocator, manages
memory at TCMalloc page and hardware hugepage granularity. It supplies pages to
the middle-end caches and directly serves allocations larger than 256 KiB. See
the Temeraire design doc for architectural details.
Note: TCMalloc uses unmapped to mean that it has advised the OS via
madvise that the memory is no longer needed; actual physical reclamation is up
to the kernel.
TCMalloc prints the page allocator sections below first for the default normal
heap, and then repeats them wrapped in
>>>>>>> Begin <LABEL> page allocator <<<<<<< and
>>>>>>> End <LABEL> page allocator <<<<<<< banners for any additional active
heap partitions:
The initial table summarizes free and unmapped spans held by the page allocator by span length in TCMalloc pages:
------------------------------------------------
HugePageAware: 75 sizes; 938.8 MiB free; 1154.0 MiB unmapped
------------------------------------------------
1 pages * 86655 spans ~ 677.0 MiB; 677.0 MiB cum; unmapped: 0.0 MiB; 0.0 MiB cum
2 pages * 3632 spans ~ 56.8 MiB; 733.7 MiB cum; unmapped: 0.0 MiB; 0.0 MiB cum
3 pages * 288 spans ~ 6.8 MiB; 740.5 MiB cum; unmapped: 0.0 MiB; 0.0 MiB cum
4 pages * 250 spans ~ 7.8 MiB; 748.3 MiB cum; unmapped: 0.0 MiB; 0.0 MiB cum
...
>=128 large * 577 spans ~ 1154.0 MiB; 2092.8 MiB cum; unmapped: 1154.0 MiB; 1154.0 MiB cum
The header line reports the number of distinct non-empty small span sizes under 128 pages, the total backed free MiB, and the total unmapped MiB. Each subsequent line reports:
>=128 large for all spans of 128 or more pages.The hugepage-aware allocator divides its managed address space across four components described in the Temeraire design doc:
Huge page aware allocator components:
------------------------------------------------
HugePageAware: breakdown of used / free / unmapped space:
HugePageAware: filler 38825.2 MiB used, 938.8 MiB free, 0.0 MiB unmapped
HugePageAware: region 0.0 MiB used, 0.0 MiB free, 0.0 MiB unmapped
HugePageAware: cache 908.0 MiB used, 0.0 MiB free, 0.0 MiB unmapped
HugePageAware: alloc 0.0 MiB used, 0.0 MiB free, 1154.0 MiB unmapped
HugePageAware: filler donations 120 (384 pages from abandoned donations)
HugePageAware: filler reused broken hugepages 0
The component table reports the MiB allocated to the application or upper caches, free backed MiB available in that component, and unmapped MiB released to the OS for each component, followed by two counters:
HugePageFiller packs allocations of one or more TCMalloc pages into hugepages.
Its output is organized into three parts.
The first part summarizes hugepage counts, subrelease totals, and background hugepage collapse and subrelease activity:
HugePageFiller: densely pack small requests into hugepages
HugePageFiller: Overall, 19882 total, 8083 full, 11799 partial, 0 released (0 partially), 0 quarantined
HugePageFiller: those with sparsely-accessed spans, 14200 total, 5100 full, 9100 partial, 0 released (0 partially), 0 quarantined
HugePageFiller: those with densely-accessed spans, 5682 total, 2983 full, 2699 partial, 0 released (0 partially), 0 quarantined
HugePageFiller: 120168 pages free in 19882 hugepages, 0.0236 free
HugePageFiller: among non-fulls, 0.0398 free
HugePageFiller: 499 used pages in subreleased hugepages (0 of them in partially released)
HugePageFiller: 0 hugepages partially released, 0.0000 released
HugePageFiller: 1.0000 of used pages hugepageable
HugePageFiller: Since startup, 26159 pages subreleased, 345 hugepages broken, (0 pages, 0 hugepages due to reaching tcmalloc limit)
HugePageFiller: Out of 120 eligible hugepages, 95 were attempted, and 90 were collapsed (4 donated).
HugePageFiller: Of the failed collapse operations, number of operations that failed per error type, None: 0, Invalid: 0, NoMem: 0, Busy: 5, Again: 0,Unknown: 0
HugePageFiller: Latency of collapse operations: 14.250000 ms (total), 410.500000 us (maximum)
HugePageFiller: Backoff delay for collapse currently is 1 interval(s), number of intervals skipped due to backoff is 0
HugePageFiller: In the previous treatment interval, subreleased 0 pages.
HugePageFiller: In the previous treatment interval, subreleased 0 stale pages.
HugePageFiller: In the previous treatment interval, marked 0 unbacked pages as subreleased. Since startup, 0.
Since startup line reports total TCMalloc
pages subreleased and intact hugepages broken since startup, along with how
many occurred to satisfy a soft or hard memory limit.MADV_COLLAPSE, including eligibility, attempts, successes,
collapsed donated hugepages, per-error-type failure counts, total and
maximum collapse latency, adaptive backoff delay, and pages subreleased
during the most recent background treatment interval.The second part prints fullness histograms across seven tracker categories:
HugePageFiller: fullness histograms
HugePageFiller: # of sparsely-accessed regular hps with a<= # of free pages <b
HugePageFiller: < 0<= 5100 < 1<= 6 < 2<= 1 < 3<= 1 < 4<= 0 < 16<= 103
HugePageFiller: < 32<= 1 < 48<= 0 < 64<= 3 < 80<= 1 < 96<= 0 <112<= 0
HugePageFiller: <128<= 28 <144<= 0 <160<= 0 <176<= 1 <192<= 0 <208<= 0
HugePageFiller: <224<= 2 <240<= 0 <252<= 0 <253<= 0 <254<= 0 <255<= 0
...
HugePageFiller: # of sparsely-accessed regular hps with a<= longest free range <b
...
HugePageFiller: # of sparsely-accessed regular hps with a<= # of allocations <b
...
HugePageFiller: # of sparsely-accessed regular hps with live lifetime a <= # hps < b
...
Each bucket < a<= count reports how many hugepages in that category have a
value at least a and less than the next bucket’s lower bound:
/proc/self/pageflags when available to report histograms
and totals of unbacked, swapped, and stale native pages, the number of
hugepages backed by kernel transparent hugepages, free and used TCMalloc
pages on non-hugepage-backed versus hugepage-backed trackers, treatment and
collapse skip counts, and sampled tracker snapshots.After the seven per-category blocks, the filler prints:
The third part summarizes the filler’s demand and skip-subrelease time series over a 5-minute window and subrelease totals over the last 10 minutes:
HugePageFiller: time series over 5 min interval
HugePageFiller: realized fragmentation: 0.0 MiB
HugePageFiller: minimum free pages: 0 (0 backed)
HugePageFiller: at peak demand: 1774 pages (and 261 free, 13 unmapped)
HugePageFiller: Since the start of the execution, 0 subreleases (0 pages) were skipped due to either recent (0s) peaks, or the sum of short-term (60s) fluctuations and long-term (300s) trends.
HugePageFiller: 100.0000% of decisions confirmed correct, 0 pending (100.0000% of pages, 0 pending), as per anticipated 300s realized fragmentation.
HugePageFiller: Subrelease stats last 10 min: total 0 pages subreleased.
HugeRegionSet manages 1 GiB regions used to best-fit medium-sized allocations
of 1 MiB and larger that cross hugepage boundaries without rounding up to whole
hugepages:
HugeRegionSet: 1 MiB+ allocations best-fit into 1024 MiB slabs
HugeRegionSet: 1 total regions
HugeRegion: 12288 KiB used, 5120 KiB free, 4096 KiB contiguous space, 1007 MiB unbacked, 1420 MiB unbacked lifetime
HugeRegionSet: 17 hugepages backed, 0 backed and free, 0 low water mark free backed, out of 512 total
HugeRegionSet: 640 pages free in backed region, 0.1471 free
HugeRegionSet: recent usage range: 0 min - 0 curr - 0 max MiB
HugeRegionSet: recent free backed range: 0 min - 0 curr - 0 max MiB
HugeCache holds recently freed, backed single hugepages for fast reuse and
dynamically adjusts its cache limit based on demand fluctuations over its cache
window:
HugeCache: contains unused, backed hugepage(s) (cache_time = 1000ms)
HugeCache: 0 / 10 hugepages cached / cache limit (0.053 hit rate, 0.436 overflow rate)
HugeCache: 88880 MiB fast unbacked, 6814 MiB periodic
HugeCache: recent usage range: 40672 min - 40672 curr - 40672 max MiB
HugeCache: recent offpeak range: 0 min - 0 curr - 0 max MiB
HugeCache: recent cache range: 0 min - 0 curr - 0 max MiB
HugeCache: epoch length 1000ms, number of records 600
HugeCache: Usage timeseries 0:1000:0:0,24:1000:40672:40672
<epoch_offset>:<duration_ms>:<min_free_backed_mib>:<max_free_backed_mib>.HugeAllocator manages unbacked virtual address space in hugepage multiples,
using a treap to coalesce and split contiguous unbacked ranges:
HugeAllocator: contiguous, unbacked hugepage(s)
HugeAddressMap: treap 5 / 10 nodes used / created
HugeAddressMap: 256 contiguous hugepages available
HugeAllocator: 20913 requested - 20336 in use = 577 hugepages free
At the end of each page allocator section, TCMalloc reports summary statistics on page-level allocations:
HugePageAware: stats on allocation sizes
HugePageAware: 4969003 pages live small allocation
HugePageAware: 659 pages of slack on large allocations
HugePageAware: largest seen allocation 45839 pages
Next, the per-size breakdown reports span allocations by page count, using exact page counts from 1 to 128 pages and power-of-two page ranges for larger allocations, followed by per-heap page release totals and parameters:
HugePageAware: per-size information:
HugePageAware: 1 page info: 5817510 / 3863506 a/f, 1954004 (15265.7 MiB) live, 16.000 allocs/s ( 0.1 MiB/s)
HugePageAware: 2 page info: 1828473 / 1254096 a/f, 574377 ( 8974.6 MiB) live, 5.030 allocs/s ( 0.1 MiB/s)
HugePageAware: 3 page info: 1464568 / 1227253 a/f, 237315 ( 5562.1 MiB) live, 4.030 allocs/s ( 0.1 MiB/s)
...
HugePageAware: [ 129 , 256 ] page info: 1240 / 1190 a/f, 50 ( 82.5 MiB) live, 0.003 allocs/s ( 0.0 MiB/s)
HugePageAware: 26159 pages ( 204.4 MiB) released in total
HugePageAware: 0 pages ( 0.0 MiB) released from ReleaseMemoryToSystem
HugePageAware: 26159 pages ( 204.4 MiB) released from ProcessBackgroundActions
HugePageAware: 0 pages ( 0.0 MiB) released from soft malloc limit hits
HugePageAware: 0 pages ( 0.0 MiB) released from hard malloc limit hits
PARAMETER use_huge_region_more_often 1
PARAMETER hpaa_subrelease 1
For each non-zero size row:
[ min , max ] page
range for allocations above 128 pages.The GWP-ASan section displays telemetry for allocations guarded by GWP-ASan:
mprotect fallback was required
when arming or disarming guard pages.------------------------------------------------
GWP-ASan Status
------------------------------------------------
Successful Allocations: 1823
Failed Allocations: 0
Skipped Allocations (No Slots): 0
Skipped Allocations (Filtered): 0
Skipped Allocations (Too Large): 0
Currently Allocated: 33 / 64
Allocated High-Watermark: 51 / 64
Object Pages Touched: 55 / 128
Currently Quarantined: 95
Guard Region Fallbacks: 0
PARAMETER tcmalloc_guarded_sample_parameter 50
After the GWP-ASan section, TCMalloc prints configured heap limits, aggregate page release counters, and active runtime parameters:
------------------------------------------------
Configured limits and related statistics
------------------------------------------------
PARAMETER desired_usage_limit_bytes 18446744073709551615
PARAMETER hard_usage_limit_bytes 18446744073709551615
Number of times soft limit was hit: 0
Number of times hard limit was hit: 0
Number of times memory shrank below soft limit: 0
Number of times memory shrank below hard limit: 0
Total number of pages released: 26159 ( 204.4 MiB)
Number of pages released by ReleaseMemoryToSystem: 0 ( 0.0 MiB)
Number of pages released by ProcessBackgroundActions: 26159 ( 204.4 MiB)
Number of pages released after soft limit hits: 0 ( 0.0 MiB)
Number of pages released after hard limit hits: 0 ( 0.0 MiB)
Number of active partitions: 1
------------------------------------------------
Parameters
------------------------------------------------
PARAMETER tcmalloc_per_cpu_caches 1
PARAMETER tcmalloc_max_per_cpu_cache_size 1572864
PARAMETER tcmalloc_max_total_thread_cache_bytes 33554432
PARAMETER malloc_release_bytes_per_sec 5242880
PARAMETER tcmalloc_skip_subrelease_short_interval 1m
PARAMETER tcmalloc_skip_subrelease_long_interval 5m
PARAMETER tcmalloc_skip_subrelease_cold_short_interval 1m
PARAMETER tcmalloc_skip_subrelease_cold_long_interval 5m
PARAMETER tcmalloc_release_partial_alloc_pages 1
PARAMETER tcmalloc_release_pages_from_huge_region 1
PARAMETER tcmalloc_huge_region_adaptive_release 1
PARAMETER madvise_cold_regions_nohugepage 0
PARAMETER tcmalloc_release_max_filler_pages 0
PARAMETER tcmalloc_min_free_bytes_to_break_dense_hugepage 0
PARAMETER tcmalloc_min_free_bytes_to_break_sparse_hugepage 0
PARAMETER tcmalloc_track_broken_hugepages 1
PARAMETER tcmalloc_preserve_donated_on_collapse 0
PARAMETER tcmalloc_collapse_released_hugepages 0
PARAMETER tcmalloc_madvise_sampled_allocations 1
PARAMETER tcmalloc_use_wider_slabs 1
PARAMETER heap_partitioning 0
PARAMETER size_class_config POW2_BELOW_64
PARAMETER percpu_vcpu_type RSEQ_VCPU
PARAMETER madvise MADVISE_DONTNEED
PARAMETER tcmalloc_resize_size_class_max_capacity 1
PARAMETER tcmalloc_dense_trackers_sorted_on_spans_allocated 1
PARAMETER min_hot_access_hint 2
PARAMETER tcmalloc_usermode_hugepage_collapse 0
PARAMETER tcmalloc_subrelease_unbacked_hugepages 0
PARAMETER tcmalloc_back_small_allocations 0
PARAMETER tcmalloc_back_size_threshold_bytes 2097152
PARAMETER background_process_sleep_interval_ns 1000000000
PARAMETER tcmalloc_cpu_cache_touched 16
PARAMETER max_tcmalloc_cpu_cache_touched 31
PARAMETER tcmalloc_enable_unfiltered_collapse 0
PARAMETER tcmalloc_release_stale_pages 0
PARAMETER tcmalloc_release_drained_slab_metadata 0
PARAMETER tcmalloc_cfl_subbucket_prioritization 0
Finally, the low-level allocator section reports system-level memory release
errors and the total virtual address space reserved from the OS via mmap:
Low-level allocator stats:
Memory Release Failures: 0
MmapSysAllocator: 18083741696 bytes (17246.0 MiB) reserved
madvise calls
when attempting to release physical pages back to the OS.