Skip to content

Commit

Permalink
tools/vm/slabinfo: order command line options
Browse files Browse the repository at this point in the history
During recent discussion on LKML over SLAB vs SLUB it was suggested by
Jesper that it would be nice to have a tool to view the current
fragmentation of the slab allocators.  CC list for this set is taken
from that thread.

For SLUB we have all the information for this already exposed by the
kernel and also we have a userspace tool for displaying this info:

	tools/vm/slabinfo.c

Extend slabinfo to improve the fragmentation information by enabling
sorting of caches by number of partial slabs.

Also add cache list sorted in this manner to the output of `slabinfo -X`.

This patch (of 4):

get_opt() has a spurious character within the option string.  Remove it
and reorder the options in alphabetic order so that it is easier to keep
the options correct.  Use the same ordering for command help output and
long option handling code.

Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Tobin C. Harding <[email protected]>
Cc: Jesper Dangaard Brouer <[email protected]>
Cc: Pekka Enberg <[email protected]>
Cc: Vlastimil Babka <[email protected]>
Cc: Christoph Lameter <[email protected]>
Cc: David Rientjes <[email protected]>
Cc: Joonsoo Kim <[email protected]>
Cc: Tejun Heo <[email protected]>
Cc: Qian Cai <[email protected]>
Cc: Mel Gorman <[email protected]>
Cc: Alexander Duyck <[email protected]>
Cc: Michal Hocko <[email protected]>
Cc: Brendan Gregg <[email protected]>,
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Tobin C. Harding authored and torvalds committed Jul 12, 2019
1 parent 98879b3 commit d914999
Showing 1 changed file with 35 additions and 35 deletions.
70 changes: 35 additions & 35 deletions tools/vm/slabinfo.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ static void fatal(const char *x, ...)
static void usage(void)
{
printf("slabinfo 4/15/2011. (c) 2007 sgi/(c) 2011 Linux Foundation.\n\n"
"slabinfo [-aADefhilnosrStTvz1LXBU] [N=K] [-dafzput] [slab-regexp]\n"
"slabinfo [-aABDefhilLnorsStTUvXz1] [N=K] [-dafzput] [slab-regexp]\n"
"-a|--aliases Show aliases\n"
"-A|--activity Most active slabs first\n"
"-B|--Bytes Show size in bytes\n"
Expand All @@ -131,9 +131,9 @@ static void usage(void)
"-T|--Totals Show summary information\n"
"-U|--Unreclaim Show unreclaimable slabs only\n"
"-v|--validate Validate slabs\n"
"-X|--Xtotals Show extended summary information\n"
"-z|--zero Include empty slabs\n"
"-1|--1ref Single reference\n"
"-X|--Xtotals Show extended summary information\n"

"\n"
"-d | --debug Switch off all debug options\n"
Expand Down Expand Up @@ -1334,28 +1334,28 @@ static void xtotals(void)
struct option opts[] = {
{ "aliases", no_argument, NULL, 'a' },
{ "activity", no_argument, NULL, 'A' },
{ "Bytes", no_argument, NULL, 'B'},
{ "debug", optional_argument, NULL, 'd' },
{ "display-activity", no_argument, NULL, 'D' },
{ "empty", no_argument, NULL, 'e' },
{ "first-alias", no_argument, NULL, 'f' },
{ "help", no_argument, NULL, 'h' },
{ "inverted", no_argument, NULL, 'i'},
{ "slabs", no_argument, NULL, 'l' },
{ "Loss", no_argument, NULL, 'L'},
{ "numa", no_argument, NULL, 'n' },
{ "lines", required_argument, NULL, 'N'},
{ "ops", no_argument, NULL, 'o' },
{ "shrink", no_argument, NULL, 's' },
{ "report", no_argument, NULL, 'r' },
{ "shrink", no_argument, NULL, 's' },
{ "Size", no_argument, NULL, 'S'},
{ "tracking", no_argument, NULL, 't'},
{ "Totals", no_argument, NULL, 'T'},
{ "Unreclaim", no_argument, NULL, 'U'},
{ "validate", no_argument, NULL, 'v' },
{ "Xtotals", no_argument, NULL, 'X'},
{ "zero", no_argument, NULL, 'z' },
{ "1ref", no_argument, NULL, '1'},
{ "lines", required_argument, NULL, 'N'},
{ "Loss", no_argument, NULL, 'L'},
{ "Xtotals", no_argument, NULL, 'X'},
{ "Bytes", no_argument, NULL, 'B'},
{ "Unreclaim", no_argument, NULL, 'U'},
{ NULL, 0, NULL, 0 }
};

Expand All @@ -1367,18 +1367,18 @@ int main(int argc, char *argv[])

page_size = getpagesize();

while ((c = getopt_long(argc, argv, "aAd::Defhil1noprstvzTSN:LXBU",
while ((c = getopt_long(argc, argv, "aABd::DefhilLnN:orsStTUvXz1",
opts, NULL)) != -1)
switch (c) {
case '1':
show_single_ref = 1;
break;
case 'a':
show_alias = 1;
break;
case 'A':
sort_active = 1;
break;
case 'B':
show_bytes = 1;
break;
case 'd':
set_debug = 1;
if (!debug_opt_scan(optarg))
Expand All @@ -1399,9 +1399,22 @@ int main(int argc, char *argv[])
case 'i':
show_inverted = 1;
break;
case 'l':
show_slab = 1;
break;
case 'L':
sort_loss = 1;
break;
case 'n':
show_numa = 1;
break;
case 'N':
if (optarg) {
output_lines = atoi(optarg);
if (output_lines < 1)
output_lines = 1;
}
break;
case 'o':
show_ops = 1;
break;
Expand All @@ -1411,45 +1424,32 @@ int main(int argc, char *argv[])
case 's':
shrink = 1;
break;
case 'l':
show_slab = 1;
case 'S':
sort_size = 1;
break;
case 't':
show_track = 1;
break;
case 'v':
validate = 1;
break;
case 'z':
skip_zero = 0;
break;
case 'T':
show_totals = 1;
break;
case 'S':
sort_size = 1;
break;
case 'N':
if (optarg) {
output_lines = atoi(optarg);
if (output_lines < 1)
output_lines = 1;
}
case 'U':
unreclaim_only = 1;
break;
case 'L':
sort_loss = 1;
case 'v':
validate = 1;
break;
case 'X':
if (output_lines == -1)
output_lines = 1;
extended_totals = 1;
show_bytes = 1;
break;
case 'B':
show_bytes = 1;
case 'z':
skip_zero = 0;
break;
case 'U':
unreclaim_only = 1;
case '1':
show_single_ref = 1;
break;
default:
fatal("%s: Invalid option '%c'\n", argv[0], optopt);
Expand Down

0 comments on commit d914999

Please sign in to comment.