If there is any "rd.memdebug", we will monitor the kernel module memory consumption as follows: 1) use dracut various inst_hook to monitor. 2) monitor at the kdump's pre_dump stage.
Signed-off-by: Xunlei Pang xlpang@redhat.com --- dracut-kdump.sh | 11 +++++++++++ dracut-module-setup.sh | 12 ++++++++++++ kdumpctl | 14 ++++++++++++++ 3 files changed, 37 insertions(+)
diff --git a/dracut-kdump.sh b/dracut-kdump.sh index 42ba37f..e8f08eb 100755 --- a/dracut-kdump.sh +++ b/dracut-kdump.sh @@ -33,6 +33,17 @@ do_kdump_pre() if [ -n "$KDUMP_PRE" ]; then "$KDUMP_PRE" fi + + # If cmdline hook exists, we know that memdebug-ko.sh + # was activated. + # + # Execute memdebug-ko.sh before dumping, at this point + # all kernel modules are supposed to be loaded. + if [ -f /lib/dracut/hooks/cmdline/99-memdebug-ko.sh ]; then + . /lib/dracut/hooks/cmdline/99-memdebug-ko.sh + # This is the last call of trace, turn off it. + echo 0 > /sys/kernel/debug/tracing/tracing_on + fi }
do_kdump_post() diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 68e0ff8..27d13b2 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -733,4 +733,16 @@ install() { # target. Ideally all this should be pushed into dracut iscsi module # at some point of time. kdump_check_iscsi_targets + + # Setup memdebug-ko if there is any "/tmp/.kdump.memdebug.ko.tmp* which + # has been created by kdump temporarily as a hint. + ls /tmp/.kdump.memdebug.ko.tmp* > /dev/null 2>&1 + if [[ $? -eq 0 ]]; then + inst_hook cmdline 99 "$moddir/memdebug-ko.sh" + inst_hook pre-udev 99 "$moddir/memdebug-ko.sh" + inst_hook pre-trigger 99 "$moddir/memdebug-ko.sh" + inst_hook initqueue 99 "$moddir/memdebug-ko.sh" + inst_hook pre-mount 99 "$moddir/memdebug-ko.sh" + inst_hook cleanup 99 "$moddir/memdebug-ko.sh" + fi } diff --git a/kdumpctl b/kdumpctl index 250f87b..928e163 100755 --- a/kdumpctl +++ b/kdumpctl @@ -178,7 +178,21 @@ rebuild_fadump_initrd()
rebuild_kdump_initrd() { + # Clean up memdebug.ko temp file if any + rm /tmp/.kdump.memdebug.ko.tmp* -rf + + echo "$(prepare_cmdline)" | grep -q "rd.memdebug" + if [ $? -eq 0 ]; then + # As a hint to inst_hook memdebug.ko.sh for dracut 99kdumpbase, + # see dracut-module-setup.sh. + touch /tmp/.kdump.memdebug.ko.tmp$$$$ + fi + $MKDUMPRD $TARGET_INITRD $kdump_kver + + # Clean up memdebug.ko temp file if any + rm /tmp/.kdump.memdebug.ko.tmp* -rf + if [ $? != 0 ]; then echo "mkdumprd: failed to make kdump initrd" >&2 return 1