diff --git a/library/include/slabinfo.h b/library/include/slabinfo.h index 128bad94..f63ca79e 100644 --- a/library/include/slabinfo.h +++ b/library/include/slabinfo.h @@ -40,7 +40,7 @@ enum slabinfo_item { SLAB_ACTIVE_SLABS, // u_int " SLAB_PAGES_PER_SLAB, // u_int " SLAB_PERCENT_USED, // u_int derived from ACTIVE_OBJS / NUM_OBJS - SLAB_SIZE_TOTAL, // ul_int derived from page size * NUM_OBJS * PAGES_PER_SLAB + SLAB_SIZE_TOTAL, // ul_int derived from page size * NUMS_SLABS * PAGES_PER_SLAB SLABS_CACHES_TOTAL, // u_int derived from all caches SLABS_CACHES_ACTIVE, // u_int " diff --git a/library/slabinfo.c b/library/slabinfo.c index a4386d61..1d4453fd 100644 --- a/library/slabinfo.c +++ b/library/slabinfo.c @@ -434,6 +434,10 @@ static int parse_slabinfo20 ( if (node->obj_size > slabs->max_obj_size) slabs->max_obj_size = node->obj_size; + /* cache_size is not accurate, it's the upper limit of memory used by this slab. + * When system using slub(most common case) is under high memory pressure, there + * are slab order fallbacks, which means pages_per_slab is not constant and may decrease. + */ node->cache_size = (unsigned long)node->nr_slabs * node->pages_per_slab * page_size; if (node->nr_objs) { diff --git a/man/slabtop.1 b/man/slabtop.1 index edf4784e..089fb0e5 100644 --- a/man/slabtop.1 +++ b/man/slabtop.1 @@ -104,7 +104,13 @@ The .B slabtop statistic header is tracking how many bytes of slabs are being used and is not a measure of physical memory. The 'Slab' field in the -\fI/proc/meminfo\fR file is tracking information about used slab physical +\fI/proc/meminfo\fR file is tracking information about used slab physical memory. +.PP +The +.B CACHE SIZE +column is not accurate, it's the upper limit of memory used by specific slab. When system +using slub (most common case) is under high memory pressure, there are slab order +fallbacks, which means "pages per slab" is not constant and may decrease. .SH AUTHORS Written by Chris Rivera and Robert Love. .PP