[Crash-utility] [PATCH] display MCNT and PRIVATE when using kmem -p

qiaonuohan qiaonuohan at cn.fujitsu.com
Mon Jan 9 06:51:29 UTC 2012


Hello Dave,

I think it is necessary to see what is hided in the union where 
_mapcount lies. However, as you said, it's hard to pick which fields are 
more important than others when adding new items to "kmem -p". So I 
think over using struct sub-command to show what I want.

What if I change struct sub-command to this:

1. it can refer to anonymous members (e.g., page._mapcount)
2. it can refer to submembers(e.g., page._count.counter)
3. it can output easy-parsing format (using an option to specify), maybe 
like 'kmem -p'. For example,
crash> struct page.flags,_count.counter -.. < PAGE_list.txt
    1024    0
    1024    1
    1024    1
    1024    1

After adding these features to struct sub-command, I guess it is more 
easier to get information hiding in structs and parsing it. Before 
implementing, I feel the necessity to ask you for some advices. So what 
about these features?

At 2012-1-6 3:37, Dave Anderson wrote:
> I appreciate the effort, but I'm not sure whether it's worth changing
> it at this point, or whether it could be accomplished in a different
> manner.
>
> The primary purpose for "kmem -p" is to show the page structure
> address associated with each physical address in the system -- along
> with "basic information about each page".  It's had those basic
> fields in it forever -- which BTW, fit into 80 columns.  I prefer not
> to have command output exceed 80 columns unless it is impossible to
> predict the size of an output field.
>
> Anyway, the page structure definition keeps changing over time, more
> specifically the embedded anonymous structures contained within it, and
> the fields within the anonymous structs have multiple meanings.  With
> your patch, the output becomes cluttered and hard to understand, especially
> due to the strange values that can be seen in the MCNT column when it's
> not a counter value, but rather a slab-page construct:
>
>          union {
>                  atomic_t _mapcount;
>
>                  struct {
>                          unsigned inuse:16;
>                          unsigned objects:15;
>                          unsigned frozen:1;
>                  };
>          };
>
> And so it's hard to pick which fields are more important than others,
> because it pretty much depends upon what's being debugged.  You have
> picked the private field (which can have numerous meanings), but for
> example, there have been times in the past where I wanted to see the
> lru list_head contents.
>
> That all being said, your patch does have merit, but I wonder if there
> could be an alternate way of selecting or filtering what fields are
> displayed?


-- 
--
Regards
Qiao Nuohan




More information about the Crash-utility mailing list