----- Original Message ----- > The first patch changes dump_kmeminfo() to report overcommit information > similar to that displayed under the proc/meminfo file. It may be useful to > indicate memory over commitment abuse, for example with forced vmcores from > system hangs due to shortage of memory. The intended output is as follows: > > crash> kmem -i > PAGES TOTAL PERCENTAGE > TOTAL MEM 1965332 7.5 GB ---- > FREE 78080 305 MB 3% of TOTAL MEM > USED 1887252 7.2 GB 96% of TOTAL MEM > SHARED 789954 3 GB 40% of TOTAL MEM > BUFFERS 110606 432.1 MB 5% of TOTAL MEM > CACHED 1212645 4.6 GB 61% of TOTAL MEM > SLAB 146563 572.5 MB 7% of TOTAL MEM > > TOTAL SWAP 1970175 7.5 GB ---- > SWAP USED 5 20 KB 0% of TOTAL SWAP > SWAP FREE 1970170 7.5 GB 99% of TOTAL SWAP > > COMMIT LIMIT 2952841 11.3 GB ---- > COMMITTED 1150595 4.4 GB 38% of TOTAL LIMIT > > The second patch simply removes the mention of dump_zone_page_usage() > availability from kmem's help page. > > Tested under 3.16.4-200.fc20.x86_64 only. > Though this should work under RHEL5 (2.6.18) and above. > > Aaron Tomlin (2): > kmem: Show memory commitment data in kmem output > help: Remove mention of dump_zone_page_usage() > > help.c | 40 ++++++++--------- > memory.c | 153 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++------- > 2 files changed, 155 insertions(+), 38 deletions(-) > Hi Aaron, I've got a RHEL4 kernel which shows a COMMIT LIMIT of zero, and then dies with a SIGFPE: $ gdb crash ...[ cut ] ... crash 7.1.0rc5 Copyright (C) 2002-2014 Red Hat, Inc. Copyright (C) 2004, 2005, 2006, 2010 IBM Corporation Copyright (C) 1999-2006 Hewlett-Packard Co Copyright (C) 2005, 2006, 2011, 2012 Fujitsu Limited Copyright (C) 2006, 2007 VA Linux Systems Japan K.K. Copyright (C) 2005, 2011 NEC Corporation Copyright (C) 1999, 2002, 2007 Silicon Graphics, Inc. Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc. This program is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Enter "help copying" to see the conditions. This program has absolutely no warranty. Enter "help warranty" for details. please wait... (uncompressing vmlinux-2.6.9-73chaos.gz)Detaching after fork from child process 26349. Detaching after fork from child process 26351. Detaching after fork from child process 26352. GNU gdb (GDB) 7.6 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-unknown-linux-gnu"... Detaching after fork from child process 26353. please wait... (gathering task table data) WARNING: active task 102efb5adc0 on cpu 5: corrupt cpu value: 2152520160 KERNEL: vmlinux-2.6.9-73chaos.gz DUMPFILE: vmcore.2007-11-23.0 CPUS: 8 DATE: Fri Nov 23 16:03:46 2007 UPTIME: 4 days, 04:37:31 LOAD AVERAGE: 0.00, 0.46, 3.19 TASKS: 385 NODENAME: zeus205 RELEASE: 2.6.9-73chaos VERSION: #1 SMP Thu Sep 27 14:00:05 PDT 2007 MACHINE: x86_64 (2412 Mhz) MEMORY: 15.2 GB PANIC: "Oops: 0000 [1] <ffffffff802f063e>{schedule+96} SMP " (check log for details) PID: 5539 COMMAND: "kiblnd_sd_03" TASK: 102f9654a00 [THREAD_INFO: 100bd8fa000] CPU: 2 STATE: TASK_RUNNING (PANIC) crash> kmem -i Detaching after fork from child process 26354. PAGES TOTAL PERCENTAGE TOTAL MEM 3913204 14.9 GB ---- FREE 3763462 14.4 GB 96% of TOTAL MEM USED 149742 584.9 MB 3% of TOTAL MEM SHARED 2459 9.6 MB 0% of TOTAL MEM BUFFERS 0 0 0% of TOTAL MEM CACHED 34170 133.5 MB 0% of TOTAL MEM SLAB 55775 217.9 MB 1% of TOTAL MEM TOTAL HIGH 0 0 0% of TOTAL MEM FREE HIGH 0 0 0% of TOTAL HIGH TOTAL LOW 3913204 14.9 GB 100% of TOTAL MEM FREE LOW 3763462 14.4 GB 96% of TOTAL LOW TOTAL SWAP 0 0 ---- SWAP USED 0 0 100% of TOTAL SWAP SWAP FREE 0 0 0% of TOTAL SWAP COMMIT LIMIT 0 0 ---- Program received signal SIGFPE, Arithmetic exception. dump_kmeminfo () at memory.c:7970 7970 / allowed) : 0; Missing separate debuginfos, use: debuginfo-install glibc-2.15-59.fc17.x86_64 libgcc-4.7.2-2.fc17.x86_64 libstdc++-4.7.2-2.fc17.x86_64 lzo-2.06-2.fc17.x86_64 ncurses-libs-5.9-11.20130511.fc17.x86_64 snappy-1.0.5-1.fc17.x86_64 xz-libs-5.1.2-1alpha.fc17.x86_64 zlib-1.2.5-7.fc17.x86_64 (gdb) bt #0 dump_kmeminfo () at memory.c:7970 #1 0x00000000004a5a55 in cmd_kmem () at memory.c:4632 #2 0x0000000000467ca9 in exec_command () at main.c:832 #3 0x0000000000467ed2 in main_loop () at main.c:779 #4 0x000000000068afb3 in captured_command_loop (data=data@entry=0x0) at main.c:258 #5 0x000000000068964e in catch_errors (func=func@entry=0x68afa0 <captured_command_loop>, func_args=func_args@entry=0x0, errstring=errstring@entry=0x8cc251 "", mask=mask@entry=6) at exceptions.c:557 #6 0x000000000068be26 in captured_main (data=data@entry=0x7fffffffddc0) at main.c:1064 #7 0x000000000068964e in catch_errors (func=func@entry=0x68b180 <captured_main>, func_args=func_args@entry=0x7fffffffddc0, errstring=errstring@entry=0x8cc251 "", mask=mask@entry=6) at exceptions.c:557 #8 0x000000000068c174 in gdb_main (args=args@entry=0x7fffffffddc0) at main.c:1079 #9 0x000000000068c1ae in gdb_main_entry (argc=<optimized out>, argv=argv@entry=0x7fffffffdf18) at main.c:1099 #10 0x00000000004e6194 in gdb_main_loop (argc=<optimized out>, argc@entry=3, argv=argv@entry=0x7fffffffdf18) at gdb_interface.c:76 #11 0x0000000000466325 in main (argc=3, argv=0x7fffffffdf18) at main.c:677 (gdb) p allowed $1 = 0 (gdb) So there also needs to be an allowance for this: crash> sym sysctl_overcommit_kbytes symbol not found: sysctl_overcommit_kbytes possible alternatives: (none found) crash> p sysctl_overcommit_ratio sysctl_overcommit_ratio = $2 = 0 crash> Since kmem -i is such a commonly used command, any required offsets should be stored in the offset table, and not reinitialized every time it's called. Can you add atomic_t.counter and percpu_counter.count to the bottom of the offset_table() so that OFFSET() can be used? And for that matter, maybe have vm_init() initialize all of the hstate-related offsets in order to simplify dump_hstates() and get_hugetlb_total_pages() so that they only have to check for the validity of the sizes/offsets that they need instead of having to re-initialize them every time? Also, is there a reason you made this change?: @@ -4627,7 +4628,7 @@ cmd_kmem(void) } - if (iflag == 1) + if (iflag) dump_kmeminfo(); if (pflag == 1) Thanks, Dave -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility