[Crash-utility] [PATCH 1/1 V2] crash: initial note of excluded page structures

Cliff Wickman cpw at sgi.com
Thu Jan 9 17:00:34 UTC 2014


On Thu, Jan 09, 2014 at 11:40:59AM -0500, Dave Anderson wrote:
> 
> 
> ----- Original Message -----
> > 
> > Version 2
> > - Moves the warning to this point:
> >       ...
> >       This GDB was configured as "x86_64-unknown-linux-gnu"...
> > 
> >       WARNING: All unused vmemmap page structures are excluded from this
> >       dump.
> >                This will cause failures of the kmem command if it attempts to
> >                walk any list of free pages (with options -f -F -i -s and -S).
> > 
> >         SYSTEM MAP: /boot/System.map-2.6.32-cpw
> >       ...
> > 
> > - Drop patch 2, which added warnings to individual kmem options.
> > 
> > - Feel free to change the wording of the warning.
> > 
> > And this patch is contingent upon the acceptance of a change to the
> > makedumpfile command.
> >    http://marc.info/?l=kexec&m=138853299130125&w=2
> >   
> > 
> > If makedumpfile excludes unused page structures it will flag that
> > fact in the dump header.
> > (There are about 3.67 million pages full of page structures for
> >  every tera byte of system memory.  The great bulk of those
> >  page structures are not needed.)
> > Their exclusion is a makedumpfile option.
> > 
> > Crash will display a note during initialization if such structures
> > have been excluded.  Crash commands that walk page freelists, for
> > example, will fail. So the note will help the user understand why.
> > 
> > Signed-off-by: Cliff Wickman <cpw at sgi.com>
> > ---
> >  defs.h     |    1 +
> >  diskdump.c |    3 +++
> >  diskdump.h |    1 +
> >  main.c     |    6 ++++++
> >  4 files changed, 11 insertions(+)
> > 
> > Index: crash-7.0.4/diskdump.c
> > ===================================================================
> > --- crash-7.0.4.orig/diskdump.c
> > +++ crash-7.0.4/diskdump.c
> > @@ -749,6 +749,9 @@ restart:
> >  				dd->valid_pages[i]++;
> >  	}
> >  
> > +	if (header->status & DUMP_DH_EXCLUDED_VMEMMAP)
> > +		pc->flags2 |= VMEXCLUDED;
> > +
> >          return TRUE;
> >  
> >  err:
> > Index: crash-7.0.4/diskdump.h
> > ===================================================================
> > --- crash-7.0.4.orig/diskdump.h
> > +++ crash-7.0.4/diskdump.h
> > @@ -84,6 +84,7 @@ struct kdump_sub_header {
> >  #define DUMP_DH_COMPRESSED_ZLIB    0x1   /* page is compressed with zlib */
> >  #define DUMP_DH_COMPRESSED_LZO     0x2   /* page is compressed with lzo */
> >  #define DUMP_DH_COMPRESSED_SNAPPY  0x4   /* page is compressed with snappy
> >  */
> > +#define DUMP_DH_EXCLUDED_VMEMMAP   0x8   /* unused vmemmap pages are
> > excluded */
> >  
> >  /* descriptor of each page for vmcore */
> >  typedef struct page_desc {
> > Index: crash-7.0.4/defs.h
> > ===================================================================
> > --- crash-7.0.4.orig/defs.h
> > +++ crash-7.0.4/defs.h
> > @@ -505,6 +505,7 @@ struct program_context {
> >  #define VMCOREINFO    (0x400ULL)
> >  #define ALLOW_FP      (0x800ULL)
> >  #define REM_PAUSED_F (0x1000ULL)
> > +#define VMEXCLUDED   (0x2000ULL)
> >  #define REMOTE_PAUSED() (pc->flags2 & REM_PAUSED_F)
> >  	char *cleanup;
> >  	char *namelist_orig;
> > Index: crash-7.0.4/main.c
> > ===================================================================
> > --- crash-7.0.4.orig/main.c
> > +++ crash-7.0.4/main.c
> > @@ -662,6 +662,12 @@ main_loop(void)
> >  	} else
> >  		SIGACTION(SIGINT, restart, &pc->sigaction, NULL);
> >  
> > +	if (pc->flags2 & VMEXCLUDED)
> > +                fprintf(fp,
> > +        "WARNING: All unused vmemmap page structures are excluded from this dump.\n"
> > +	"         This will cause failures of the kmem command if it attempts to\n"
> > +	"         walk any list of free pages (with options -f -F -i -s and -S).\n\n");
> > +
> >          /*
> >           *  Display system statistics and current context.
> >           */
> > 
> 
> This patch looks reasonable.
> 
> BTW, what happens if you enter "kmem <address>" alone with no option?
> It should fail as well, no?

Yes, it does.

crash> kmem 133360
kmem: page excluded: kernel virtual address: ffffea0000004350  type: "page.lru.next"

crash> kmem ffff8897baae7540
CACHE            NAME                 OBJSIZE  ALLOCATED     TOTAL  SLABS  SSIZE
ffff88c7bec70040 task_struct             2656       4578      5361   1787     8k
SLAB              MEMORY            TOTAL  ALLOCATED  FREE
ffff8897baae6040  ffff8897baae6080      3          2     1
FREE / [ALLOCATED]
  [ffff8897baae7540]

kmem: page excluded: kernel virtual address: ffffea0000007028  type: "first list entry"

Another way to search a freelist, that I didn't notice.
Do you want to add that to the warning?

-Cliff
-- 
Cliff Wickman
SGI
cpw at sgi.com
(651) 683-3824




More information about the Crash-utility mailing list