tools/vm/slabinfo: use alphabetic order when two values are equal

commit 4f5ceb8851f0081af54313abbf56de1615911faf upstream.

When the number of partial slabs in each cache is the same (e.g., the
value are 0), the results of the `slabinfo -X -N5` and `slabinfo -P -N5`
are different.

/ # slabinfo -X -N5
...
Slabs sorted by number of partial slabs
---------------------------------------
Name                   Objects Objsize           Space Slabs/Part/Cpu  O/S O %Fr %Ef Flg
inode_cache              15180     392         6217728        758/0/1   20 1   0  95 a
kernfs_node_cache        22494      88         2002944        488/0/1   46 0   0  98
shmem_inode_cache          663     464          319488         38/0/1   17 1   0  96
biovec-max                  50    3072          163840          4/0/1   10 3   0  93 A
dentry                   19050     136         2600960        633/0/2   30 0   0  99 a

/ # slabinfo -P -N5
Name                   Objects Objsize           Space Slabs/Part/Cpu  O/S O %Fr %Ef Flg
bdev_cache                  32     984           32.7K          1/0/1   16 2   0  96 Aa
ext4_inode_cache            42     752           32.7K          1/0/1   21 2   0  96 a
dentry                   19050     136            2.6M        633/0/2   30 0   0  99 a
TCPv6                       17    1840           32.7K          0/0/1   17 3   0  95 A
RAWv6                       18     856           16.3K          0/0/1   18 2   0  94 A

This problem is caused by the sort_slabs().  So let's use alphabetic order
when two values are equal in the sort_slabs().

By the way, the content of the `slabinfo -h` is not aligned because the

`-P|--partial Sort by number of partial slabs`

uses tabs instead of spaces.  So let's use spaces instead of tabs to fix
it.

Link: https://lkml.kernel.org/r/20220528063117.935158-1-songyuanzheng@huawei.com
Fixes: 1106b205a3 ("tools/vm/slabinfo: add partial slab listing to -X")
Signed-off-by: Yuanzheng Song <songyuanzheng@huawei.com>
Cc: "Tobin C. Harding" <tobin@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Yuanzheng Song 2022-05-28 06:31:17 +00:00 committed by Greg Kroah-Hartman
parent 12f777a957
commit a91204264e

View File

@ -125,7 +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" "-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"
@ -1045,15 +1045,27 @@ static void sort_slabs(void)
for (s2 = s1 + 1; s2 < slabinfo + slabs; s2++) { for (s2 = s1 + 1; s2 < slabinfo + slabs; s2++) {
int result; int result;
if (sort_size) if (sort_size) {
result = slab_size(s1) < slab_size(s2); if (slab_size(s1) == slab_size(s2))
else if (sort_active) result = strcasecmp(s1->name, s2->name);
result = slab_activity(s1) < slab_activity(s2); else
else if (sort_loss) result = slab_size(s1) < slab_size(s2);
result = slab_waste(s1) < slab_waste(s2); } else if (sort_active) {
else if (sort_partial) if (slab_activity(s1) == slab_activity(s2))
result = s1->partial < s2->partial; result = strcasecmp(s1->name, s2->name);
else else
result = slab_activity(s1) < slab_activity(s2);
} else if (sort_loss) {
if (slab_waste(s1) == slab_waste(s2))
result = strcasecmp(s1->name, s2->name);
else
result = slab_waste(s1) < slab_waste(s2);
} else if (sort_partial) {
if (s1->partial == s2->partial)
result = strcasecmp(s1->name, s2->name);
else
result = s1->partial < s2->partial;
} else
result = strcasecmp(s1->name, s2->name); result = strcasecmp(s1->name, s2->name);
if (show_inverted) if (show_inverted)