[PATCH] mm: add ratio in slabinfo print

From: Xishi Qiu
Date: Sun Jan 10 2016 - 22:58:48 EST


Add ratio(active_objs/num_objs) in /proc/slabinfo, it is used to show
the availability factor in each slab. Also adjustment format because
some slabs' name is too long.

before applied
...
ext4_inode_cache 1591 3008 1008 32 8 : tunables 0 0 0 : slabdata 94 94 0
ext4_free_data 640 640 64 64 1 : tunables 0 0 0 : slabdata 10 10 0
ext4_allocation_context 480 480 128 32 1 : tunables 0 0 0 : slabdata 15 15 0
ext4_io_end 616 616 72 56 1 : tunables 0 0 0 : slabdata 11 11 0
ext4_extent_status 3979 4794 40 102 1 : tunables 0 0 0 : slabdata 47 47 0
jbd2_journal_handle 1360 1360 48 85 1 : tunables 0 0 0 : slabdata 16 16 0
jbd2_journal_head 510 510 120 34 1 : tunables 0 0 0 : slabdata 15 15 0
jbd2_revoke_table_s 768 768 16 256 1 : tunables 0 0 0 : slabdata 3 3 0
jbd2_revoke_record_s 384 384 32 128 1 : tunables 0 0 0 : slabdata 3 3 0
scsi_data_buffer 0 0 24 170 1 : tunables 0 0 0 : slabdata 0 0 0
cfq_queue 560 560 232 35 2 : tunables 0 0 0 : slabdata 16 16 0
bsg_cmd 0 0 312 26 2 : tunables 0 0 0 : slabdata 0 0 0
mqueue_inode_cache 36 36 896 36 8 : tunables 0 0 0 : slabdata 1 1 0
isofs_inode_cache 0 0 600 27 4 : tunables 0 0 0 : slabdata 0 0 0
hugetlbfs_inode_cache 28 28 568 28 4 : tunables 0 0 0 : slabdata 1 1 0
dquot 448 448 256 32 2 : tunables 0 0 0 : slabdata 14 14 0

after applied
...
ext4_inode_cache 1287 2400 53% 1008 32 8 : tunables 0 0 0 : slabdata 75 75 0
ext4_free_data 640 640 100% 64 64 1 : tunables 0 0 0 : slabdata 10 10 0
ext4_allocation_context 512 512 100% 128 32 1 : tunables 0 0 0 : slabdata 16 16 0
ext4_io_end 560 560 100% 72 56 1 : tunables 0 0 0 : slabdata 10 10 0
ext4_extent_status 3775 4692 80% 40 102 1 : tunables 0 0 0 : slabdata 46 46 0
jbd2_journal_handle 1360 1360 100% 48 85 1 : tunables 0 0 0 : slabdata 16 16 0
jbd2_journal_head 544 544 100% 120 34 1 : tunables 0 0 0 : slabdata 16 16 0
jbd2_revoke_table_s 768 768 100% 16 256 1 : tunables 0 0 0 : slabdata 3 3 0
jbd2_revoke_record_s 512 512 100% 32 128 1 : tunables 0 0 0 : slabdata 4 4 0
scsi_data_buffer 0 0 0% 24 170 1 : tunables 0 0 0 : slabdata 0 0 0
cfq_queue 560 560 100% 232 35 2 : tunables 0 0 0 : slabdata 16 16 0
bsg_cmd 0 0 0% 312 26 2 : tunables 0 0 0 : slabdata 0 0 0
mqueue_inode_cache 36 36 100% 896 36 8 : tunables 0 0 0 : slabdata 1 1 0
isofs_inode_cache 0 0 0% 600 27 4 : tunables 0 0 0 : slabdata 0 0 0
hugetlbfs_inode_cache 28 28 100% 568 28 4 : tunables 0 0 0 : slabdata 1 1 0
dquot 448 448 100% 256 32 2 : tunables 0 0 0 : slabdata 14 14 0

Signed-off-by: Xishi Qiu <qiuxishi@xxxxxxxxxx>
---
mm/slab_common.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/mm/slab_common.c b/mm/slab_common.c
index 3c6a86b..6f1e130 100644
--- a/mm/slab_common.c
+++ b/mm/slab_common.c
@@ -1041,8 +1041,8 @@ static void print_slabinfo_header(struct seq_file *m)
#else
seq_puts(m, "slabinfo - version: 2.1\n");
#endif
- seq_puts(m, "# name <active_objs> <num_objs> <objsize> "
- "<objperslab> <pagesperslab>");
+ seq_puts(m, "# name <active_objs> <num_objs> <ratio> "
+ "<objsize> <objperslab> <pagesperslab>");
seq_puts(m, " : tunables <limit> <batchcount> <sharedfactor>");
seq_puts(m, " : slabdata <active_slabs> <num_slabs> <sharedavail>");
#ifdef CONFIG_DEBUG_SLAB
@@ -1093,15 +1093,18 @@ memcg_accumulate_slabinfo(struct kmem_cache *s, struct slabinfo *info)
static void cache_show(struct kmem_cache *s, struct seq_file *m)
{
struct slabinfo sinfo;
+ unsigned long ratio;

memset(&sinfo, 0, sizeof(sinfo));
get_slabinfo(s, &sinfo);

memcg_accumulate_slabinfo(s, &sinfo);
+ ratio = sinfo.num_objs ? sinfo.active_objs * 100 / sinfo.num_objs : 0;

- seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d",
- cache_name(s), sinfo.active_objs, sinfo.num_objs, s->size,
- sinfo.objects_per_slab, (1 << sinfo.cache_order));
+ seq_printf(m, "%-25s %6lu %6lu %6lu%% %6u %4u %4d",
+ cache_name(s), sinfo.active_objs, sinfo.num_objs,
+ ratio, s->size, sinfo.objects_per_slab,
+ (1 << sinfo.cache_order));

seq_printf(m, " : tunables %4u %4u %4u",
sinfo.limit, sinfo.batchcount, sinfo.shared);
--
2.0.0