在 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 >>> Many of the flags are represented by files in /sys/kernel/slab// >>> 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 "); >>>> + seq_puts(m, "# name "); >>>> seq_puts(m, " : tunables "); >>>> seq_puts(m, " : slabdata "); >>>> 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);