linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] slab: add flags in cache_show
@ 2025-10-17  6:48 Kassey Li
  2025-10-17 10:50 ` Vlastimil Babka
  0 siblings, 1 reply; 5+ messages in thread
From: Kassey Li @ 2025-10-17  6:48 UTC (permalink / raw)
  To: vbabka, akpm, cl, rientjes, roman.gushchin, harry.yoo, linux-mm
  Cc: linux-kernel, kassey.li

Flags info is useful to check the slab type.

for example, _SLAB_RECLAIM_ACCOUNT:

    0x50100 _SLAB_PANIC _SLAB_RECLAIM_ACCOUNT _SLAB_CMPXCHG_DOUBLE

Signed-off-by: Kassey Li <kassey.li@oss.qualcomm.com>
---
 mm/slab_common.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/mm/slab_common.c b/mm/slab_common.c
index 932d13ada36c..f43239211e69 100644
--- a/mm/slab_common.c
+++ b/mm/slab_common.c
@@ -1083,7 +1083,7 @@ static void print_slabinfo_header(struct seq_file *m)
 	 * without _too_ many complaints.
 	 */
 	seq_puts(m, "slabinfo - version: 2.1\n");
-	seq_puts(m, "# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab>");
+	seq_puts(m, "# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> <flags>");
 	seq_puts(m, " : tunables <limit> <batchcount> <sharedfactor>");
 	seq_puts(m, " : slabdata <active_slabs> <num_slabs> <sharedavail>");
 	seq_putc(m, '\n');
@@ -1112,9 +1112,9 @@ static void cache_show(struct kmem_cache *s, struct seq_file *m)
 	memset(&sinfo, 0, sizeof(sinfo));
 	get_slabinfo(s, &sinfo);
 
-	seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d",
+	seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d 0x%-8x",
 		   s->name, sinfo.active_objs, sinfo.num_objs, s->size,
-		   sinfo.objects_per_slab, (1 << sinfo.cache_order));
+		   sinfo.objects_per_slab, (1 << sinfo.cache_order), s->flags);
 
 	seq_printf(m, " : tunables %4u %4u %4u",
 		   sinfo.limit, sinfo.batchcount, sinfo.shared);
-- 
2.34.1



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] slab: add flags in cache_show
  2025-10-17  6:48 [PATCH] slab: add flags in cache_show Kassey Li
@ 2025-10-17 10:50 ` Vlastimil Babka
  2025-10-24  3:06   ` Kassey Li
  0 siblings, 1 reply; 5+ messages in thread
From: Vlastimil Babka @ 2025-10-17 10:50 UTC (permalink / raw)
  To: Kassey Li, akpm, cl, rientjes, roman.gushchin, harry.yoo, linux-mm
  Cc: linux-kernel

On 10/17/25 08:48, Kassey Li wrote:
> Flags info is useful to check the slab type.
> 
> for example, _SLAB_RECLAIM_ACCOUNT:
> 
>     0x50100 _SLAB_PANIC _SLAB_RECLAIM_ACCOUNT _SLAB_CMPXCHG_DOUBLE
> 
> Signed-off-by: Kassey Li <kassey.li@oss.qualcomm.com>

Many of the flags are represented by files in /sys/kernel/slab/<cache>/
If you miss some, we could add it there. Changing slabinfo output could
break some users and the raw hex value is not a stable representation of the
flags anyway.

> ---
>  mm/slab_common.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/mm/slab_common.c b/mm/slab_common.c
> index 932d13ada36c..f43239211e69 100644
> --- a/mm/slab_common.c
> +++ b/mm/slab_common.c
> @@ -1083,7 +1083,7 @@ static void print_slabinfo_header(struct seq_file *m)
>  	 * without _too_ many complaints.
>  	 */
>  	seq_puts(m, "slabinfo - version: 2.1\n");
> -	seq_puts(m, "# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab>");
> +	seq_puts(m, "# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> <flags>");
>  	seq_puts(m, " : tunables <limit> <batchcount> <sharedfactor>");
>  	seq_puts(m, " : slabdata <active_slabs> <num_slabs> <sharedavail>");
>  	seq_putc(m, '\n');
> @@ -1112,9 +1112,9 @@ static void cache_show(struct kmem_cache *s, struct seq_file *m)
>  	memset(&sinfo, 0, sizeof(sinfo));
>  	get_slabinfo(s, &sinfo);
>  
> -	seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d",
> +	seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d 0x%-8x",
>  		   s->name, sinfo.active_objs, sinfo.num_objs, s->size,
> -		   sinfo.objects_per_slab, (1 << sinfo.cache_order));
> +		   sinfo.objects_per_slab, (1 << sinfo.cache_order), s->flags);
>  
>  	seq_printf(m, " : tunables %4u %4u %4u",
>  		   sinfo.limit, sinfo.batchcount, sinfo.shared);



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] slab: add flags in cache_show
  2025-10-17 10:50 ` Vlastimil Babka
@ 2025-10-24  3:06   ` Kassey Li
  2025-10-24  8:22     ` Vlastimil Babka
  0 siblings, 1 reply; 5+ messages in thread
From: Kassey Li @ 2025-10-24  3:06 UTC (permalink / raw)
  To: Vlastimil Babka, akpm, cl, rientjes, roman.gushchin, harry.yoo, linux-mm
  Cc: linux-kernel


在 10/17/2025 6:50 PM, Vlastimil Babka 写道:
> On 10/17/25 08:48, Kassey Li wrote:
>> Flags info is useful to check the slab type.
>>
>> for example, _SLAB_RECLAIM_ACCOUNT:
>>
>>      0x50100 _SLAB_PANIC _SLAB_RECLAIM_ACCOUNT _SLAB_CMPXCHG_DOUBLE
>>
>> Signed-off-by: Kassey Li <kassey.li@oss.qualcomm.com>
> Many of the flags are represented by files in /sys/kernel/slab/<cache>/
> If you miss some, we could add it there. Changing slabinfo output could
> break some users and the raw hex value is not a stable representation of the
> flags anyway.

may you review this draft change according your suggest  ? if ok, i will 
share v2 change.

diff --git a/mm/slub.c b/mm/slub.c
index b1f15598fbfd..619f446d2251 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -9033,6 +9033,12 @@ static ssize_t slab_size_show(struct kmem_cache 
*s, char *buf)
  }
  SLAB_ATTR_RO(slab_size);

+static ssize_t slab_flags_show(struct kmem_cache *s, char *buf)
+{
+       return sysfs_emit(buf, "%u\n", s->flags);
+}
+SLAB_ATTR_RO(slab_flags);
+
  static ssize_t align_show(struct kmem_cache *s, char *buf)
  {
         return sysfs_emit(buf, "%u\n", s->align);
@@ -9480,6 +9486,7 @@ SLAB_ATTR(skip_kfence);

  static struct attribute *slab_attrs[] = {
         &slab_size_attr.attr,
+       &slab_flags_attr.attr,
         &object_size_attr.attr,
         &objs_per_slab_attr.attr,
         &order_attr.attr,

>
>> ---
>>   mm/slab_common.c | 6 +++---
>>   1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/mm/slab_common.c b/mm/slab_common.c
>> index 932d13ada36c..f43239211e69 100644
>> --- a/mm/slab_common.c
>> +++ b/mm/slab_common.c
>> @@ -1083,7 +1083,7 @@ static void print_slabinfo_header(struct seq_file *m)
>>   	 * without _too_ many complaints.
>>   	 */
>>   	seq_puts(m, "slabinfo - version: 2.1\n");
>> -	seq_puts(m, "# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab>");
>> +	seq_puts(m, "# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> <flags>");
>>   	seq_puts(m, " : tunables <limit> <batchcount> <sharedfactor>");
>>   	seq_puts(m, " : slabdata <active_slabs> <num_slabs> <sharedavail>");
>>   	seq_putc(m, '\n');
>> @@ -1112,9 +1112,9 @@ static void cache_show(struct kmem_cache *s, struct seq_file *m)
>>   	memset(&sinfo, 0, sizeof(sinfo));
>>   	get_slabinfo(s, &sinfo);
>>   
>> -	seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d",
>> +	seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d 0x%-8x",
>>   		   s->name, sinfo.active_objs, sinfo.num_objs, s->size,
>> -		   sinfo.objects_per_slab, (1 << sinfo.cache_order));
>> +		   sinfo.objects_per_slab, (1 << sinfo.cache_order), s->flags);
>>   
>>   	seq_printf(m, " : tunables %4u %4u %4u",
>>   		   sinfo.limit, sinfo.batchcount, sinfo.shared);


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] slab: add flags in cache_show
  2025-10-24  3:06   ` Kassey Li
@ 2025-10-24  8:22     ` Vlastimil Babka
  2025-10-27  1:08       ` Kassey Li
  0 siblings, 1 reply; 5+ messages in thread
From: Vlastimil Babka @ 2025-10-24  8:22 UTC (permalink / raw)
  To: Kassey Li, akpm, cl, rientjes, roman.gushchin, harry.yoo, linux-mm
  Cc: linux-kernel

On 10/24/25 05:06, Kassey Li wrote:
> 
> 在 10/17/2025 6:50 PM, Vlastimil Babka 写道:
>> On 10/17/25 08:48, Kassey Li wrote:
>>> Flags info is useful to check the slab type.
>>>
>>> for example, _SLAB_RECLAIM_ACCOUNT:
>>>
>>>      0x50100 _SLAB_PANIC _SLAB_RECLAIM_ACCOUNT _SLAB_CMPXCHG_DOUBLE
>>>
>>> Signed-off-by: Kassey Li <kassey.li@oss.qualcomm.com>
>> Many of the flags are represented by files in /sys/kernel/slab/<cache>/
>> If you miss some, we could add it there. Changing slabinfo output could
>> break some users and the raw hex value is not a stable representation of the
>> flags anyway.
> 
> may you review this draft change according your suggest  ? if ok, i will 
> share v2 change.

What I meant is that that are files for some specific flags, e.g. the
SLAB_RECLAIM_ACCOUNT you mentioned has a file "reclaim_account".
Other files could be added for other flags when it's useful. Printing a raw
number dumping the implementation details isn't great.

> diff --git a/mm/slub.c b/mm/slub.c
> index b1f15598fbfd..619f446d2251 100644
> --- a/mm/slub.c
> +++ b/mm/slub.c
> @@ -9033,6 +9033,12 @@ static ssize_t slab_size_show(struct kmem_cache 
> *s, char *buf)
>   }
>   SLAB_ATTR_RO(slab_size);
> 
> +static ssize_t slab_flags_show(struct kmem_cache *s, char *buf)
> +{
> +       return sysfs_emit(buf, "%u\n", s->flags);
> +}
> +SLAB_ATTR_RO(slab_flags);
> +
>   static ssize_t align_show(struct kmem_cache *s, char *buf)
>   {
>          return sysfs_emit(buf, "%u\n", s->align);
> @@ -9480,6 +9486,7 @@ SLAB_ATTR(skip_kfence);
> 
>   static struct attribute *slab_attrs[] = {
>          &slab_size_attr.attr,
> +       &slab_flags_attr.attr,
>          &object_size_attr.attr,
>          &objs_per_slab_attr.attr,
>          &order_attr.attr,
> 
>>
>>> ---
>>>   mm/slab_common.c | 6 +++---
>>>   1 file changed, 3 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/mm/slab_common.c b/mm/slab_common.c
>>> index 932d13ada36c..f43239211e69 100644
>>> --- a/mm/slab_common.c
>>> +++ b/mm/slab_common.c
>>> @@ -1083,7 +1083,7 @@ static void print_slabinfo_header(struct seq_file *m)
>>>   	 * without _too_ many complaints.
>>>   	 */
>>>   	seq_puts(m, "slabinfo - version: 2.1\n");
>>> -	seq_puts(m, "# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab>");
>>> +	seq_puts(m, "# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> <flags>");
>>>   	seq_puts(m, " : tunables <limit> <batchcount> <sharedfactor>");
>>>   	seq_puts(m, " : slabdata <active_slabs> <num_slabs> <sharedavail>");
>>>   	seq_putc(m, '\n');
>>> @@ -1112,9 +1112,9 @@ static void cache_show(struct kmem_cache *s, struct seq_file *m)
>>>   	memset(&sinfo, 0, sizeof(sinfo));
>>>   	get_slabinfo(s, &sinfo);
>>>   
>>> -	seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d",
>>> +	seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d 0x%-8x",
>>>   		   s->name, sinfo.active_objs, sinfo.num_objs, s->size,
>>> -		   sinfo.objects_per_slab, (1 << sinfo.cache_order));
>>> +		   sinfo.objects_per_slab, (1 << sinfo.cache_order), s->flags);
>>>   
>>>   	seq_printf(m, " : tunables %4u %4u %4u",
>>>   		   sinfo.limit, sinfo.batchcount, sinfo.shared);



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] slab: add flags in cache_show
  2025-10-24  8:22     ` Vlastimil Babka
@ 2025-10-27  1:08       ` Kassey Li
  0 siblings, 0 replies; 5+ messages in thread
From: Kassey Li @ 2025-10-27  1:08 UTC (permalink / raw)
  To: Vlastimil Babka, akpm, cl, rientjes, roman.gushchin, harry.yoo, linux-mm
  Cc: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 3464 bytes --]


在 10/24/2025 4:22 PM, Vlastimil Babka 写道:
> On 10/24/25 05:06, Kassey Li wrote:
>> 在 10/17/2025 6:50 PM, Vlastimil Babka 写道:
>>> On 10/17/25 08:48, Kassey Li wrote:
>>>> Flags info is useful to check the slab type.
>>>>
>>>> for example, _SLAB_RECLAIM_ACCOUNT:
>>>>
>>>>       0x50100 _SLAB_PANIC _SLAB_RECLAIM_ACCOUNT _SLAB_CMPXCHG_DOUBLE
>>>>
>>>> Signed-off-by: Kassey Li<kassey.li@oss.qualcomm.com>
>>> Many of the flags are represented by files in /sys/kernel/slab/<cache>/
>>> If you miss some, we could add it there. Changing slabinfo output could
>>> break some users and the raw hex value is not a stable representation of the
>>> flags anyway.
>> may you review this draft change according your suggest  ? if ok, i will
>> share v2 change.
> What I meant is that that are files for some specific flags, e.g. the
> SLAB_RECLAIM_ACCOUNT you mentioned has a file "reclaim_account".
> Other files could be added for other flags when it's useful. Printing a raw
> number dumping the implementation details isn't great.


Thanks for the suggests, this is clear for me.  I will try the 
"reclaim_account" to match my usage firstly.

>
>> diff --git a/mm/slub.c b/mm/slub.c
>> index b1f15598fbfd..619f446d2251 100644
>> --- a/mm/slub.c
>> +++ b/mm/slub.c
>> @@ -9033,6 +9033,12 @@ static ssize_t slab_size_show(struct kmem_cache
>> *s, char *buf)
>>    }
>>    SLAB_ATTR_RO(slab_size);
>>
>> +static ssize_t slab_flags_show(struct kmem_cache *s, char *buf)
>> +{
>> +       return sysfs_emit(buf, "%u\n", s->flags);
>> +}
>> +SLAB_ATTR_RO(slab_flags);
>> +
>>    static ssize_t align_show(struct kmem_cache *s, char *buf)
>>    {
>>           return sysfs_emit(buf, "%u\n", s->align);
>> @@ -9480,6 +9486,7 @@ SLAB_ATTR(skip_kfence);
>>
>>    static struct attribute *slab_attrs[] = {
>>           &slab_size_attr.attr,
>> +       &slab_flags_attr.attr,
>>           &object_size_attr.attr,
>>           &objs_per_slab_attr.attr,
>>           &order_attr.attr,
>>
>>>> ---
>>>>    mm/slab_common.c | 6 +++---
>>>>    1 file changed, 3 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/mm/slab_common.c b/mm/slab_common.c
>>>> index 932d13ada36c..f43239211e69 100644
>>>> --- a/mm/slab_common.c
>>>> +++ b/mm/slab_common.c
>>>> @@ -1083,7 +1083,7 @@ static void print_slabinfo_header(struct seq_file *m)
>>>>    	 * without _too_ many complaints.
>>>>    	 */
>>>>    	seq_puts(m, "slabinfo - version: 2.1\n");
>>>> -	seq_puts(m, "# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab>");
>>>> +	seq_puts(m, "# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> <flags>");
>>>>    	seq_puts(m, " : tunables <limit> <batchcount> <sharedfactor>");
>>>>    	seq_puts(m, " : slabdata <active_slabs> <num_slabs> <sharedavail>");
>>>>    	seq_putc(m, '\n');
>>>> @@ -1112,9 +1112,9 @@ static void cache_show(struct kmem_cache *s, struct seq_file *m)
>>>>    	memset(&sinfo, 0, sizeof(sinfo));
>>>>    	get_slabinfo(s, &sinfo);
>>>>    
>>>> -	seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d",
>>>> +	seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d 0x%-8x",
>>>>    		   s->name, sinfo.active_objs, sinfo.num_objs, s->size,
>>>> -		   sinfo.objects_per_slab, (1 << sinfo.cache_order));
>>>> +		   sinfo.objects_per_slab, (1 << sinfo.cache_order), s->flags);
>>>>    
>>>>    	seq_printf(m, " : tunables %4u %4u %4u",
>>>>    		   sinfo.limit, sinfo.batchcount, sinfo.shared);

[-- Attachment #2: Type: text/html, Size: 4854 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-10-27  1:09 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-10-17  6:48 [PATCH] slab: add flags in cache_show Kassey Li
2025-10-17 10:50 ` Vlastimil Babka
2025-10-24  3:06   ` Kassey Li
2025-10-24  8:22     ` Vlastimil Babka
2025-10-27  1:08       ` Kassey Li

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox