Commit 53a83f97 authored by Tobin C. Harding's avatar Tobin C. Harding Committed by Linus Torvalds

tools/vm/slabinfo: add option to sort by partial slabs

We would like to get a better view of the level of fragmentation within
the SLUB allocator.  Total number of partial slabs is an indicator of
fragmentation.

Add a command line option (-P | --partial) to sort the slab list by total
number of partial slabs.

Link: http://lkml.kernel.org/r/20190426022622.4089-4-tobin@kernel.orgSigned-off-by: default avatarTobin C. Harding <tobin@kernel.org>
Cc: Alexander Duyck <alexander.duyck@gmail.com>
Cc: Brendan Gregg <brendan.d.gregg@gmail.com>,
Cc: Christoph Lameter <cl@linux.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Jesper Dangaard Brouer <brouer@redhat.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Pekka Enberg <penberg@iki.fi>
Cc: Qian Cai <cai@lca.pw>
Cc: Tejun Heo <tj@kernel.org>
Cc: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 1106b205
...@@ -111,7 +111,7 @@ static void fatal(const char *x, ...) ...@@ -111,7 +111,7 @@ static void fatal(const char *x, ...)
static void usage(void) static void usage(void)
{ {
printf("slabinfo 4/15/2011. (c) 2007 sgi/(c) 2011 Linux Foundation.\n\n" printf("slabinfo 4/15/2011. (c) 2007 sgi/(c) 2011 Linux Foundation.\n\n"
"slabinfo [-aABDefhilLnorsStTUvXz1] [N=K] [-dafzput] [slab-regexp]\n" "slabinfo [-aABDefhilLnoPrsStTUvXz1] [N=K] [-dafzput] [slab-regexp]\n"
"-a|--aliases Show aliases\n" "-a|--aliases Show aliases\n"
"-A|--activity Most active slabs first\n" "-A|--activity Most active slabs first\n"
"-B|--Bytes Show size in bytes\n" "-B|--Bytes Show size in bytes\n"
...@@ -125,6 +125,7 @@ static void usage(void) ...@@ -125,6 +125,7 @@ static void usage(void)
"-n|--numa Show NUMA information\n" "-n|--numa Show NUMA information\n"
"-N|--lines=K Show the first K slabs\n" "-N|--lines=K Show the first K slabs\n"
"-o|--ops Show kmem_cache_ops\n" "-o|--ops Show kmem_cache_ops\n"
"-P|--partial Sort by number of partial slabs\n"
"-r|--report Detailed report on single slabs\n" "-r|--report Detailed report on single slabs\n"
"-s|--shrink Shrink slabs\n" "-s|--shrink Shrink slabs\n"
"-S|--Size Sort by size\n" "-S|--Size Sort by size\n"
...@@ -1361,6 +1362,7 @@ struct option opts[] = { ...@@ -1361,6 +1362,7 @@ struct option opts[] = {
{ "numa", no_argument, NULL, 'n' }, { "numa", no_argument, NULL, 'n' },
{ "lines", required_argument, NULL, 'N'}, { "lines", required_argument, NULL, 'N'},
{ "ops", no_argument, NULL, 'o' }, { "ops", no_argument, NULL, 'o' },
{ "partial", no_argument, NULL, 'p'},
{ "report", no_argument, NULL, 'r' }, { "report", no_argument, NULL, 'r' },
{ "shrink", no_argument, NULL, 's' }, { "shrink", no_argument, NULL, 's' },
{ "Size", no_argument, NULL, 'S'}, { "Size", no_argument, NULL, 'S'},
...@@ -1382,7 +1384,7 @@ int main(int argc, char *argv[]) ...@@ -1382,7 +1384,7 @@ int main(int argc, char *argv[])
page_size = getpagesize(); page_size = getpagesize();
while ((c = getopt_long(argc, argv, "aABd::DefhilLnN:orsStTUvXz1", while ((c = getopt_long(argc, argv, "aABd::DefhilLnN:oPrsStTUvXz1",
opts, NULL)) != -1) opts, NULL)) != -1)
switch (c) { switch (c) {
case 'a': case 'a':
...@@ -1436,6 +1438,9 @@ int main(int argc, char *argv[]) ...@@ -1436,6 +1438,9 @@ int main(int argc, char *argv[])
case 'r': case 'r':
show_report = 1; show_report = 1;
break; break;
case 'P':
sort_partial = 1;
break;
case 's': case 's':
shrink = 1; shrink = 1;
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment