[Crash-utility] enhance bt command

Ming Zhang blackmagic02881 at gmail.com
Mon Mar 3 20:06:41 UTC 2008


On Mon, 2008-03-03 at 14:56 -0500, Dave Anderson wrote:
> Ming Zhang wrote:
> > On Mon, 2008-03-03 at 14:04 -0500, Dave Anderson wrote:
> >> Ming Zhang wrote:
> >>
> >>> my English sucks...
> >>>
> >>> this is what i got. my side size-512 or size-1024 also works. just stuff
> >>> like dentry cache or inode cache does not work.
> >>>
> >>>
> >>> crash> rd 10078b2bca0 2
> >>>      10078b2bca0:  000001007877c8d4 00000100710fd5c8   ..wx.......q....
> >>> crash> rd -S 10078b2bca0 2
> >>>      10078b2bca0:  [dentry_cache]   00000100710fd5c8 
> >>> crash> kmem -s 10078b2bca0
> >>> kmem: address is not allocated in slab subsystem: 10078b2bca0
> >> No, your English is fine -- it's your command-entering that sucks!
> >>
> >> Above, when you entered "kmem -s 10078b2bca0", you're incorrectly entering
> >> the *address* where the dentry_cache reference (1007877c8d4) is located.
> >> And so it's telling you that 10078b2bca0 is not allocated in the slab
> >> subsystem, which it isn't...
> >>
> >> But if you entered "kmem -s 1007877c8d4", you'd see the dentry_cache
> >> information.
> > 
> > yes. i noticed that. need some tea when handling 3 bugs at the same
> > time...
> > 
> > so here is my understanding. it actually shows the slab object that
> > contain that address. it might not be the address of that object. so
> > here is what i need to do
> > 
> > crash> rd -x 10078b2bca0
> >      10078b2bca0:  000001007877c8d4 
> > crash> rd -S 10078b2bca0
> >      10078b2bca0:  [dentry_cache]   
> > 
> > crash> kmem -s 000001007877c8d4
> > CACHE            NAME                 OBJSIZE  ALLOCATED     TOTAL
> > SLABS  SSIZE
> > 10037ffc080      dentry_cache             240       9429     10560
> > 660     4k
> > SLAB              MEMORY            TOTAL  ALLOCATED  FREE
> > 1007877c040       1007877c088          16          9     7
> > FREE / [ALLOCATED]
> >   [1007877c8d4]
> > 
> > this only tell me that it belongs to one dentry object, but no idea
> > which one
> > 
> > then i have to use kmem -S dentry_cache, find out this piece
> > 
> > SLAB              MEMORY            TOTAL  ALLOCATED  FREE
> > 1007877c040       1007877c088          16          9     7
> > FREE / [ALLOCATED]
> >   [1007877c088]
> >   [1007877c178]
> >    1007877c268  (cpu 1 cache)
> >    1007877c358  (cpu 1 cache)
> >   [1007877c448]
> >    1007877c538  (cpu 1 cache)
> >   [1007877c628]
> >   [1007877c718]
> >   [1007877c808]
> > ~~~~~~~~~~~~~~~~~~~~ then find out it is here.
> >   [1007877c8f8]
> >    1007877c9e8  (cpu 1 cache)
> >    1007877cad8  (cpu 1 cache)
> >   [1007877cbc8]
> >   [1007877ccb8]
> >    1007877cda8  (cpu 1 cache)
> >    1007877ce98  (cpu 1 cache)
> > 
> > then i know the object contain this address is 1007877c808.
> > then 
> > 
> > crash> dentry.d_iname
> > struct dentry {
> >   [0xcc] unsigned char d_iname[36];
> > }
> > crash> eval c808+cc
> > hexadecimal: c8d4  
> >     decimal: 51412  
> >       octal: 144324
> > 
> > show me that variable in stack actually is d_iname.
> > 
> > then can we have the output format as
> > 
> >      10078b2bca0:  [000001007877c808+cc: dentry_cache]   
> > 
> > so we know the object address, which slab it is in, and the offset,
> > (thus can derive the raw value), all in one shot?
> > 
> 
> You've done a fine bit of debugging your issue...
> 
> But I think that's a bit of overkill for each address reference.
> 
> To do it right it would have to walk slab chains to gather all of the
> information needed by the "kmem -S" output, which can be extremely
> time-consuming, and potentially error-prone if the slab chain is
> corrupt or being modified while running on a live system.

full agree. realized now.

then here is my question, how "kmem -s <addr>" find out which slab this
address belong to? by only looking at the page?

then here is my revised suggestion. can we split this into 2 steps?

(1) rd -S show [raw address: cache name]

(this is a great to have since do rd 2 times, one with -S and another
without -S is tedious.)

(2) and kmem -s <address>

show which slab it is in and optionally (with a new option like -O) show
the object?

(this is nice to have).

thanks.



> 
> Dave
-- 
Ming Zhang


@#$%^ purging memory... (*!%
http://blackmagic02881.wordpress.com/
http://www.linkedin.com/in/blackmagic02881
--------------------------------------------




More information about the Crash-utility mailing list