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

commit 4f5ceb8851 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 коммит произвёл Greg Kroah-Hartman
Родитель d27e1834de
Коммит 3e7ee4dd1e
1 изменённых файлов: 22 добавлений и 10 удалений

Просмотреть файл

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