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

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.org


Signed-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
Loading
Loading
Loading
Loading
+7 −2
Original line number Original line Diff line number Diff line
@@ -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)
		"-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[] = {
	{ "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[])


	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[])
		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;