[PATCH] crash: note excluded page structures
by Cliff Wickman
If makedumpfile (-e) 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.)
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.
This exclusion of page structures is enabled by this makedumpfile patch:
[PATCH V7] makedumpfile: exclude page structures of non-dumped pages
http://marc.info/?l=kexec&m=144600721032695&w=2
(I had said in that patch that the crash patch was already in crash -- but
it wasn't. It was only in my local copy of crash)
Signed-off-by: Cliff Wickman <cpw(a)sgi.com>
---
defs.h | 1 +
diskdump.c | 3 +++
diskdump.h | 1 +
main.c | 11 +++++++++++
4 files changed, 16 insertions(+)
Index: crash-7.1.3/diskdump.c
===================================================================
--- crash-7.1.3.orig/diskdump.c
+++ crash-7.1.3/diskdump.c
@@ -816,6 +816,9 @@ restart:
dd->valid_pages[i]++;
}
+ if (header->status & DUMP_DH_EXCLUDED_VMEMMAP)
+ pc->flags2 |= VMEXCLUDED;
+
return TRUE;
err:
Index: crash-7.1.3/diskdump.h
===================================================================
--- crash-7.1.3.orig/diskdump.h
+++ crash-7.1.3/diskdump.h
@@ -85,6 +85,7 @@ struct kdump_sub_header {
#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_COMPRESSED_INCOMPLETE 0x8 /* dumpfile is incomplete */
+#define DUMP_DH_EXCLUDED_VMEMMAP 0x10 /* unused vmemmap pages are excluded */
/* descriptor of each page for vmcore */
typedef struct page_desc {
Index: crash-7.1.3/defs.h
===================================================================
--- crash-7.1.3.orig/defs.h
+++ crash-7.1.3/defs.h
@@ -519,6 +519,7 @@ struct program_context {
#define is_incomplete_dump() (pc->flags2 & INCOMPLETE_DUMP)
#define QEMU_MEM_DUMP_COMPRESSED (0x10000ULL)
#define SNAP (0x20000ULL)
+#define VMEXCLUDED (0x40000ULL)
char *cleanup;
char *namelist_orig;
char *namelist_debug_orig;
Index: crash-7.1.3/main.c
===================================================================
--- crash-7.1.3.orig/main.c
+++ crash-7.1.3/main.c
@@ -759,6 +759,17 @@ main_loop(void)
} else
SIGACTION(SIGINT, restart, &pc->sigaction, NULL);
+ if (pc->flags2 & VMEXCLUDED)
+ fprintf(fp,
+ "WARNING: The vmemmap page structures that are associated with the\n"
+ " memory pages excluded by the \"makedumpfile -d <level>\"\n"
+ " option have been excluded from this dump.\n"
+ " The administrator has used \"makedumpfile -e\".\n"
+ " This will cause failures in any command that accesses a page\n"
+ " structure of a page that is not included in the dump. This\n"
+ " is particularly likely when using several options of the\n"
+ " kmem command.\n\n");
+
/*
* Display system statistics and current context.
*/
9 years
How does crash find booted kernel?
by Nan Xiao
Hi all,
I am trying to use crash on RHEL 7.0.After executing "crash" command,
it outputs:
crash: cannot find booted kernel -- please enter namelist argument
After referring to crash white paper
(https://people.redhat.com/anderson/crash_whitepaper/),
I know it needs vmlinux file. So I install "kernel-debuginfo" package:
[root@localhost boot]# rpm -ql kernel-debuginfo | grep vmlinux
/usr/lib/debug/lib/modules/3.10.0-123.el7.x86_64/vmlinux
Then execute crash, it still prompts the same error:
crash: cannot find booted kernel -- please enter namelist argument
I try to copy vmlinux file into /boot directory, but this error still exists.
How can I fix this issue? Thanks very much in advance!
Best Regards
Nan Xiao
9 years