* [PATCH 2/2] Add memory usage trace to diffrent hook points
@ 2012-11-26 2:38 Dave Young
[not found] ` <20121126023852.GA6886-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
0 siblings, 1 reply; 7+ messages in thread
From: Dave Young @ 2012-11-26 2:38 UTC (permalink / raw)
To: harald-H+wXaHxf7aLQT0dZR+AlfA, initramfs-u79uwXL29TY76Z2rM5mHXA,
jstancek-H+wXaHxf7aLQT0dZR+AlfA, vgoyal-H+wXaHxf7aLQT0dZR+AlfA
Port mkdumprd memory trace functions wrote by jstancek-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
For kdump, memory usage tracing is important because there's limited
memory in kdump 2nd kernel.
Add a rd.memdebug cmdline for this. set rd.memdebug=<X> will set the
debug level to X which is the debug verbose level.
I added several trace point to the begin of several init hooks
At cmdline hooks I'm adding trace of "1+:mem 2+:iomem 3+:slab"
For other hooks I'm adding trace of "1:shortmem 2+:mem 3+:slab"
This means:
rd.memdebug=1)
cmdline hook: print /proc/meminfo
other hooks: print part of /proc/meminfo
rd.memdebug=2)
cmdline hook: show /proc/iomem and /proc/meminfo
other hooks: print /proc/meminfo
rd.memdebug=3):
cmdline hook: print /proc/iomem, /proc/meminfo and /proc/slabinfo
other hooks: print /proc/meminfo and /proc/slabinfo
*):
do not print any mem debug info
Signed-off-by: Dave Young <dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
dracut.cmdline.7.asc | 4 +
modules.d/98systemd/dracut-cmdline.sh | 1
modules.d/98systemd/dracut-initqueue.sh | 1
modules.d/98systemd/dracut-pre-pivot.sh | 1
modules.d/98systemd/dracut-pre-trigger.sh | 1
modules.d/98systemd/dracut-pre-udev.sh | 1
modules.d/99base/dracut-lib.sh | 90 ++++++++++++++++++++++++++++++
7 files changed, 99 insertions(+)
--- dracut.orig/modules.d/98systemd/dracut-cmdline.sh
+++ dracut/modules.d/98systemd/dracut-cmdline.sh
@@ -18,6 +18,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr
source_conf /etc/conf.d
+make_trace_mem "hook cmdline" 1+:mem 2+:iomem 3+:slab
# run scriptlets to parse the command line
getarg 'rd.break=cmdline' -d 'rdbreak=cmdline' && emergency_shell -n cmdline "Break before cmdline"
source_hook cmdline
--- dracut.orig/modules.d/98systemd/dracut-initqueue.sh
+++ dracut/modules.d/98systemd/dracut-initqueue.sh
@@ -10,6 +10,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr
source_conf /etc/conf.d
+make_trace_mem "hook initqueue" 1:shortmem 2+:mem 3+:slab
getarg 'rd.break=initqueue' -d 'rdbreak=initqueue' && emergency_shell -n initqueue "Break before initqueue"
RDRETRY=$(getarg rd.retry -d 'rd_retry=')
--- dracut.orig/modules.d/98systemd/dracut-pre-pivot.sh
+++ dracut/modules.d/98systemd/dracut-pre-pivot.sh
@@ -10,6 +10,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr
source_conf /etc/conf.d
+make_trace_mem "hook pre-pivot" 1:shortmem 2+:mem 3+:slab
# pre pivot scripts are sourced just before we doing cleanup and switch over
# to the new root.
getarg 'rd.break=pre-pivot' 'rdbreak=pre-pivot' && emergency_shell -n pre-pivot "Break pre-pivot"
--- dracut.orig/modules.d/98systemd/dracut-pre-trigger.sh
+++ dracut/modules.d/98systemd/dracut-pre-trigger.sh
@@ -10,6 +10,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr
source_conf /etc/conf.d
+make_trace_mem "hook pre-trigger" 1:shortmem 2+:mem 3+:slab
getargbool 0 rd.udev.info -n -y rdudevinfo && udevadm control --log-priority=info
getargbool 0 rd.udev.debug -n -y rdudevdebug && udevadm control --log-priority=debug
udevproperty "hookdir=$hookdir"
--- dracut.orig/modules.d/98systemd/dracut-pre-udev.sh
+++ dracut/modules.d/98systemd/dracut-pre-udev.sh
@@ -9,6 +9,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr
source_conf /etc/conf.d
+make_trace_mem "hook pre-udev" 1:shortmem 2+:mem 3+:slab
# pre pivot scripts are sourced just before we doing cleanup and switch over
# to the new root.
getarg 'rd.break=pre-udev' 'rdbreak=pre-udev' && emergency_shell -n pre-udev "Break pre-udev"
--- dracut.orig/dracut.cmdline.7.asc
+++ dracut/dracut.cmdline.7.asc
@@ -134,6 +134,10 @@ Debug
set -x for the dracut shell and logs to dmesg, console and
_/run/initramfs/init.log_
+**rd.memdebug=[0-3]**::
+ print memory usage debug info, set the verbose level from 1 to 3
+ print nothing when set rd.memdebug=0
+
**rd.break**::
drop to a shell at the end
--- dracut.orig/modules.d/99base/dracut-lib.sh
+++ dracut/modules.d/99base/dracut-lib.sh
@@ -996,3 +996,93 @@ listlist() {
are_lists_eq() {
listlist "$1" "$2" "$3" "$4" && listlist "$1" "$3" "$2" "$4"
}
+
+setmemdebug() {
+ if [ -z "$DEBUG_MEM_LEVEL" ]; then
+ export DEBUG_MEM_LEVEL=$(getargnum 0 3 rd.memdebug)
+ fi
+}
+
+setmemdebug
+
+# parameters: msg [trace_level:trace]...
+function make_trace_mem()
+{
+ msg=$1
+ shift
+ if [ "$DEBUG_MEM_LEVEL" -gt 0 ]; then
+ make_trace show_memstats $DEBUG_MEM_LEVEL "[debug_mem]" "$msg" "$@"
+ fi
+}
+
+# parameters: func log_level prefix msg [trace_level:trace]...
+function make_trace()
+{
+ func=$1
+ shift
+
+ log_level=`echo "$1" | grep -o '^[0-9]\+'`
+ shift
+
+ prefix=$1
+ shift
+
+ msg=$1
+ shift
+
+ if [ -z "$log_level" ]; then
+ return
+ fi
+
+ msg=`echo "$msg" | sed 's/^\s\+//'`
+
+ msg_printed=0
+ while [ $# -gt 0 ]; do
+ trace_level=`echo "$1" | grep -o '^[0-9]\+'`
+ trace_in_higher_levels=`echo "$1" | grep -o '+'`
+ trace=`echo $1 | sed "s/^.*://"`
+
+ if [ -z "$trace_level" ]; then
+ trace_level=0
+ fi
+
+ insert_trace=0
+ if [ -n "$trace_in_higher_levels" ]; then
+ if [ "$log_level" -ge "$trace_level" ]; then
+ insert_trace=1
+ fi
+ else
+ if [ "$log_level" -eq "$trace_level" ]; then
+ insert_trace=1
+ fi
+ fi
+
+ if [ $insert_trace -eq 1 ]; then
+ if [ $msg_printed -eq 0 ]; then
+ echo "$prefix $msg"
+ msg_printed=1
+ fi
+ $func $trace
+ fi
+ shift
+ done
+}
+
+# parameters: type
+show_memstats()
+{
+ case $1 in
+ shortmem)
+ cat /proc/meminfo | grep -e "^MemFree" -e "^Cached" -e "^Slab"
+ ;;
+ mem)
+ cat /proc/meminfo
+ ;;
+ slab)
+ cat /proc/slabinfo
+ ;;
+ iomem)
+ cat /proc/iomem
+ ;;
+ esac
+}
^ permalink raw reply [flat|nested] 7+ messages in thread[parent not found: <20121126023852.GA6886-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>]
* Re: [PATCH 2/2] Add memory usage trace to diffrent hook points [not found] ` <20121126023852.GA6886-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org> @ 2012-11-27 22:33 ` Vivek Goyal [not found] ` <20121127223330.GG6964-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 7+ messages in thread From: Vivek Goyal @ 2012-11-27 22:33 UTC (permalink / raw) To: Dave Young Cc: harald-H+wXaHxf7aLQT0dZR+AlfA, initramfs-u79uwXL29TY76Z2rM5mHXA, jstancek-H+wXaHxf7aLQT0dZR+AlfA On Mon, Nov 26, 2012 at 10:38:52AM +0800, Dave Young wrote: > > > Port mkdumprd memory trace functions wrote by jstancek-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org > For kdump, memory usage tracing is important because there's limited > memory in kdump 2nd kernel. > > Add a rd.memdebug cmdline for this. set rd.memdebug=<X> will set the > debug level to X which is the debug verbose level. > > I added several trace point to the begin of several init hooks > At cmdline hooks I'm adding trace of "1+:mem 2+:iomem 3+:slab" > For other hooks I'm adding trace of "1:shortmem 2+:mem 3+:slab" Not everybody knows what is kdump functionality for debugging. Can you please explain a bit more about the notion of 1+, 2+ etc. > > This means: > rd.memdebug=1) > cmdline hook: print /proc/meminfo I think it is not a bad idea to print /proc/iomem for command line hook in case of rd.memdebug=1. It is just one time print, so does not hurt. > other hooks: print part of /proc/meminfo We are calling it shortmem above. So atleast put it in bracket so that it is not confusing. Thanks Vivek > rd.memdebug=2) > cmdline hook: show /proc/iomem and /proc/meminfo > other hooks: print /proc/meminfo > rd.memdebug=3): > cmdline hook: print /proc/iomem, /proc/meminfo and /proc/slabinfo > other hooks: print /proc/meminfo and /proc/slabinfo > *): > do not print any mem debug info > > Signed-off-by: Dave Young <dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> > --- > dracut.cmdline.7.asc | 4 + > modules.d/98systemd/dracut-cmdline.sh | 1 > modules.d/98systemd/dracut-initqueue.sh | 1 > modules.d/98systemd/dracut-pre-pivot.sh | 1 > modules.d/98systemd/dracut-pre-trigger.sh | 1 > modules.d/98systemd/dracut-pre-udev.sh | 1 > modules.d/99base/dracut-lib.sh | 90 ++++++++++++++++++++++++++++++ > 7 files changed, 99 insertions(+) > > --- dracut.orig/modules.d/98systemd/dracut-cmdline.sh > +++ dracut/modules.d/98systemd/dracut-cmdline.sh > @@ -18,6 +18,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr > > source_conf /etc/conf.d > > +make_trace_mem "hook cmdline" 1+:mem 2+:iomem 3+:slab > # run scriptlets to parse the command line > getarg 'rd.break=cmdline' -d 'rdbreak=cmdline' && emergency_shell -n cmdline "Break before cmdline" > source_hook cmdline > --- dracut.orig/modules.d/98systemd/dracut-initqueue.sh > +++ dracut/modules.d/98systemd/dracut-initqueue.sh > @@ -10,6 +10,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr > > source_conf /etc/conf.d > > +make_trace_mem "hook initqueue" 1:shortmem 2+:mem 3+:slab > getarg 'rd.break=initqueue' -d 'rdbreak=initqueue' && emergency_shell -n initqueue "Break before initqueue" > > RDRETRY=$(getarg rd.retry -d 'rd_retry=') > --- dracut.orig/modules.d/98systemd/dracut-pre-pivot.sh > +++ dracut/modules.d/98systemd/dracut-pre-pivot.sh > @@ -10,6 +10,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr > > source_conf /etc/conf.d > > +make_trace_mem "hook pre-pivot" 1:shortmem 2+:mem 3+:slab > # pre pivot scripts are sourced just before we doing cleanup and switch over > # to the new root. > getarg 'rd.break=pre-pivot' 'rdbreak=pre-pivot' && emergency_shell -n pre-pivot "Break pre-pivot" > --- dracut.orig/modules.d/98systemd/dracut-pre-trigger.sh > +++ dracut/modules.d/98systemd/dracut-pre-trigger.sh > @@ -10,6 +10,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr > > source_conf /etc/conf.d > > +make_trace_mem "hook pre-trigger" 1:shortmem 2+:mem 3+:slab > getargbool 0 rd.udev.info -n -y rdudevinfo && udevadm control --log-priority=info > getargbool 0 rd.udev.debug -n -y rdudevdebug && udevadm control --log-priority=debug > udevproperty "hookdir=$hookdir" > --- dracut.orig/modules.d/98systemd/dracut-pre-udev.sh > +++ dracut/modules.d/98systemd/dracut-pre-udev.sh > @@ -9,6 +9,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr > > source_conf /etc/conf.d > > +make_trace_mem "hook pre-udev" 1:shortmem 2+:mem 3+:slab > # pre pivot scripts are sourced just before we doing cleanup and switch over > # to the new root. > getarg 'rd.break=pre-udev' 'rdbreak=pre-udev' && emergency_shell -n pre-udev "Break pre-udev" > --- dracut.orig/dracut.cmdline.7.asc > +++ dracut/dracut.cmdline.7.asc > @@ -134,6 +134,10 @@ Debug > set -x for the dracut shell and logs to dmesg, console and > _/run/initramfs/init.log_ > > +**rd.memdebug=[0-3]**:: > + print memory usage debug info, set the verbose level from 1 to 3 > + print nothing when set rd.memdebug=0 > + > **rd.break**:: > drop to a shell at the end > > --- dracut.orig/modules.d/99base/dracut-lib.sh > +++ dracut/modules.d/99base/dracut-lib.sh > @@ -996,3 +996,93 @@ listlist() { > are_lists_eq() { > listlist "$1" "$2" "$3" "$4" && listlist "$1" "$3" "$2" "$4" > } > + > +setmemdebug() { > + if [ -z "$DEBUG_MEM_LEVEL" ]; then > + export DEBUG_MEM_LEVEL=$(getargnum 0 3 rd.memdebug) > + fi > +} > + > +setmemdebug > + > +# parameters: msg [trace_level:trace]... > +function make_trace_mem() > +{ > + msg=$1 > + shift > + if [ "$DEBUG_MEM_LEVEL" -gt 0 ]; then > + make_trace show_memstats $DEBUG_MEM_LEVEL "[debug_mem]" "$msg" "$@" > + fi > +} > + > +# parameters: func log_level prefix msg [trace_level:trace]... > +function make_trace() > +{ > + func=$1 > + shift > + > + log_level=`echo "$1" | grep -o '^[0-9]\+'` > + shift > + > + prefix=$1 > + shift > + > + msg=$1 > + shift > + > + if [ -z "$log_level" ]; then > + return > + fi > + > + msg=`echo "$msg" | sed 's/^\s\+//'` > + > + msg_printed=0 > + while [ $# -gt 0 ]; do > + trace_level=`echo "$1" | grep -o '^[0-9]\+'` > + trace_in_higher_levels=`echo "$1" | grep -o '+'` > + trace=`echo $1 | sed "s/^.*://"` > + > + if [ -z "$trace_level" ]; then > + trace_level=0 > + fi > + > + insert_trace=0 > + if [ -n "$trace_in_higher_levels" ]; then > + if [ "$log_level" -ge "$trace_level" ]; then > + insert_trace=1 > + fi > + else > + if [ "$log_level" -eq "$trace_level" ]; then > + insert_trace=1 > + fi > + fi > + > + if [ $insert_trace -eq 1 ]; then > + if [ $msg_printed -eq 0 ]; then > + echo "$prefix $msg" > + msg_printed=1 > + fi > + $func $trace > + fi > + shift > + done > +} > + > +# parameters: type > +show_memstats() > +{ > + case $1 in > + shortmem) > + cat /proc/meminfo | grep -e "^MemFree" -e "^Cached" -e "^Slab" > + ;; > + mem) > + cat /proc/meminfo > + ;; > + slab) > + cat /proc/slabinfo > + ;; > + iomem) > + cat /proc/iomem > + ;; > + esac > +} > -- > To unsubscribe from this list: send the line "unsubscribe initramfs" in > the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 7+ messages in thread
[parent not found: <20121127223330.GG6964-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 2/2] Add memory usage trace to diffrent hook points [not found] ` <20121127223330.GG6964-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2012-11-28 5:53 ` Dave Young 2012-11-28 8:45 ` [PATCH 2/2 v2] " Dave Young 1 sibling, 0 replies; 7+ messages in thread From: Dave Young @ 2012-11-28 5:53 UTC (permalink / raw) To: Vivek Goyal Cc: harald-H+wXaHxf7aLQT0dZR+AlfA, initramfs-u79uwXL29TY76Z2rM5mHXA, jstancek-H+wXaHxf7aLQT0dZR+AlfA On 11/28/2012 06:33 AM, Vivek Goyal wrote: > On Mon, Nov 26, 2012 at 10:38:52AM +0800, Dave Young wrote: >> >> >> Port mkdumprd memory trace functions wrote by jstancek-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org >> For kdump, memory usage tracing is important because there's limited >> memory in kdump 2nd kernel. >> >> Add a rd.memdebug cmdline for this. set rd.memdebug=<X> will set the >> debug level to X which is the debug verbose level. >> >> I added several trace point to the begin of several init hooks >> At cmdline hooks I'm adding trace of "1+:mem 2+:iomem 3+:slab" >> For other hooks I'm adding trace of "1:shortmem 2+:mem 3+:slab" > > Not everybody knows what is kdump functionality for debugging. Can you > please explain a bit more about the notion of 1+, 2+ etc. Will update > >> >> This means: >> rd.memdebug=1) >> cmdline hook: print /proc/meminfo > > I think it is not a bad idea to print /proc/iomem for command line > hook in case of rd.memdebug=1. It is just one time print, so does > not hurt. Ok. Will do > >> other hooks: print part of /proc/meminfo > > We are calling it shortmem above. So atleast put it in bracket so > that it is not confusing. Will do. > > Thanks > Vivek > >> rd.memdebug=2) >> cmdline hook: show /proc/iomem and /proc/meminfo >> other hooks: print /proc/meminfo >> rd.memdebug=3): >> cmdline hook: print /proc/iomem, /proc/meminfo and /proc/slabinfo >> other hooks: print /proc/meminfo and /proc/slabinfo >> *): >> do not print any mem debug info >> >> Signed-off-by: Dave Young <dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> >> --- >> dracut.cmdline.7.asc | 4 + >> modules.d/98systemd/dracut-cmdline.sh | 1 >> modules.d/98systemd/dracut-initqueue.sh | 1 >> modules.d/98systemd/dracut-pre-pivot.sh | 1 >> modules.d/98systemd/dracut-pre-trigger.sh | 1 >> modules.d/98systemd/dracut-pre-udev.sh | 1 >> modules.d/99base/dracut-lib.sh | 90 ++++++++++++++++++++++++++++++ >> 7 files changed, 99 insertions(+) >> >> --- dracut.orig/modules.d/98systemd/dracut-cmdline.sh >> +++ dracut/modules.d/98systemd/dracut-cmdline.sh >> @@ -18,6 +18,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr >> >> source_conf /etc/conf.d >> >> +make_trace_mem "hook cmdline" 1+:mem 2+:iomem 3+:slab >> # run scriptlets to parse the command line >> getarg 'rd.break=cmdline' -d 'rdbreak=cmdline' && emergency_shell -n cmdline "Break before cmdline" >> source_hook cmdline >> --- dracut.orig/modules.d/98systemd/dracut-initqueue.sh >> +++ dracut/modules.d/98systemd/dracut-initqueue.sh >> @@ -10,6 +10,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr >> >> source_conf /etc/conf.d >> >> +make_trace_mem "hook initqueue" 1:shortmem 2+:mem 3+:slab >> getarg 'rd.break=initqueue' -d 'rdbreak=initqueue' && emergency_shell -n initqueue "Break before initqueue" >> >> RDRETRY=$(getarg rd.retry -d 'rd_retry=') >> --- dracut.orig/modules.d/98systemd/dracut-pre-pivot.sh >> +++ dracut/modules.d/98systemd/dracut-pre-pivot.sh >> @@ -10,6 +10,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr >> >> source_conf /etc/conf.d >> >> +make_trace_mem "hook pre-pivot" 1:shortmem 2+:mem 3+:slab >> # pre pivot scripts are sourced just before we doing cleanup and switch over >> # to the new root. >> getarg 'rd.break=pre-pivot' 'rdbreak=pre-pivot' && emergency_shell -n pre-pivot "Break pre-pivot" >> --- dracut.orig/modules.d/98systemd/dracut-pre-trigger.sh >> +++ dracut/modules.d/98systemd/dracut-pre-trigger.sh >> @@ -10,6 +10,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr >> >> source_conf /etc/conf.d >> >> +make_trace_mem "hook pre-trigger" 1:shortmem 2+:mem 3+:slab >> getargbool 0 rd.udev.info -n -y rdudevinfo && udevadm control --log-priority=info >> getargbool 0 rd.udev.debug -n -y rdudevdebug && udevadm control --log-priority=debug >> udevproperty "hookdir=$hookdir" >> --- dracut.orig/modules.d/98systemd/dracut-pre-udev.sh >> +++ dracut/modules.d/98systemd/dracut-pre-udev.sh >> @@ -9,6 +9,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr >> >> source_conf /etc/conf.d >> >> +make_trace_mem "hook pre-udev" 1:shortmem 2+:mem 3+:slab >> # pre pivot scripts are sourced just before we doing cleanup and switch over >> # to the new root. >> getarg 'rd.break=pre-udev' 'rdbreak=pre-udev' && emergency_shell -n pre-udev "Break pre-udev" >> --- dracut.orig/dracut.cmdline.7.asc >> +++ dracut/dracut.cmdline.7.asc >> @@ -134,6 +134,10 @@ Debug >> set -x for the dracut shell and logs to dmesg, console and >> _/run/initramfs/init.log_ >> >> +**rd.memdebug=[0-3]**:: >> + print memory usage debug info, set the verbose level from 1 to 3 >> + print nothing when set rd.memdebug=0 >> + >> **rd.break**:: >> drop to a shell at the end >> >> --- dracut.orig/modules.d/99base/dracut-lib.sh >> +++ dracut/modules.d/99base/dracut-lib.sh >> @@ -996,3 +996,93 @@ listlist() { >> are_lists_eq() { >> listlist "$1" "$2" "$3" "$4" && listlist "$1" "$3" "$2" "$4" >> } >> + >> +setmemdebug() { >> + if [ -z "$DEBUG_MEM_LEVEL" ]; then >> + export DEBUG_MEM_LEVEL=$(getargnum 0 3 rd.memdebug) >> + fi >> +} >> + >> +setmemdebug >> + >> +# parameters: msg [trace_level:trace]... >> +function make_trace_mem() >> +{ >> + msg=$1 >> + shift >> + if [ "$DEBUG_MEM_LEVEL" -gt 0 ]; then >> + make_trace show_memstats $DEBUG_MEM_LEVEL "[debug_mem]" "$msg" "$@" >> + fi >> +} >> + >> +# parameters: func log_level prefix msg [trace_level:trace]... >> +function make_trace() >> +{ >> + func=$1 >> + shift >> + >> + log_level=`echo "$1" | grep -o '^[0-9]\+'` >> + shift >> + >> + prefix=$1 >> + shift >> + >> + msg=$1 >> + shift >> + >> + if [ -z "$log_level" ]; then >> + return >> + fi >> + >> + msg=`echo "$msg" | sed 's/^\s\+//'` >> + >> + msg_printed=0 >> + while [ $# -gt 0 ]; do >> + trace_level=`echo "$1" | grep -o '^[0-9]\+'` >> + trace_in_higher_levels=`echo "$1" | grep -o '+'` >> + trace=`echo $1 | sed "s/^.*://"` >> + >> + if [ -z "$trace_level" ]; then >> + trace_level=0 >> + fi >> + >> + insert_trace=0 >> + if [ -n "$trace_in_higher_levels" ]; then >> + if [ "$log_level" -ge "$trace_level" ]; then >> + insert_trace=1 >> + fi >> + else >> + if [ "$log_level" -eq "$trace_level" ]; then >> + insert_trace=1 >> + fi >> + fi >> + >> + if [ $insert_trace -eq 1 ]; then >> + if [ $msg_printed -eq 0 ]; then >> + echo "$prefix $msg" >> + msg_printed=1 >> + fi >> + $func $trace >> + fi >> + shift >> + done >> +} >> + >> +# parameters: type >> +show_memstats() >> +{ >> + case $1 in >> + shortmem) >> + cat /proc/meminfo | grep -e "^MemFree" -e "^Cached" -e "^Slab" >> + ;; >> + mem) >> + cat /proc/meminfo >> + ;; >> + slab) >> + cat /proc/slabinfo >> + ;; >> + iomem) >> + cat /proc/iomem >> + ;; >> + esac >> +} >> -- >> To unsubscribe from this list: send the line "unsubscribe initramfs" in >> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html -- Thanks Dave ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/2 v2] Add memory usage trace to diffrent hook points [not found] ` <20121127223330.GG6964-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2012-11-28 5:53 ` Dave Young @ 2012-11-28 8:45 ` Dave Young [not found] ` <50B5CF24.6090006-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 1 sibling, 1 reply; 7+ messages in thread From: Dave Young @ 2012-11-28 8:45 UTC (permalink / raw) To: Vivek Goyal Cc: harald-H+wXaHxf7aLQT0dZR+AlfA, initramfs-u79uwXL29TY76Z2rM5mHXA, jstancek-H+wXaHxf7aLQT0dZR+AlfA Port mkdumprd memory trace functions wrote by jstancek-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org For kdump, memory usage tracing is important because there's limited memory in kdump 2nd kernel. Add a rd.memdebug cmdline for this. set rd.memdebug=<X> will set the debug level to X which is the debug verbose level. the format of cmdline is like below: <level>[+]:<type> <level> is the debug level [+] means debug level >= <level> <type> is the debug info type, as for this patch I added mem, iomem, slab mem is for /proc/meminfo, iomem is for /proc/iomem, slab is for /proc/slabinfo Also shortmem is the stripped /proc/meminfo which only includes 3 lines of Memfree, Cached and Slab, for example: MemFree: 6327176 kB Cached: 741916 kB Slab: 77284 kB I added several trace point to the begin of several init hooks At cmdline hooks I'm adding trace of "1+:mem 1+:iomem 3+:slab" For other hooks I'm adding trace of "1:shortmem 2+:mem 3+:slab" This means: rd.memdebug=1) cmdline hook: print mem and iomem other hooks: print shortmem rd.memdebug=2) cmdline hook: print mem and iomem other hooks: print mem rd.memdebug=3): cmdline hook: print mem iomem, and slabinfo other hooks: print mem and slabinfo *): do not print any mem debug info [v1->v2]: update to use getargnum with <minval> as argument print iomem info at cmdline hook as well Signed-off-by: Dave Young <dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> --- dracut.cmdline.7.asc | 4 + modules.d/98systemd/dracut-cmdline.sh | 1 modules.d/98systemd/dracut-initqueue.sh | 1 modules.d/98systemd/dracut-pre-pivot.sh | 1 modules.d/98systemd/dracut-pre-trigger.sh | 1 modules.d/98systemd/dracut-pre-udev.sh | 1 modules.d/99base/dracut-lib.sh | 90 ++++++++++++++++++++++++++++++ 7 files changed, 99 insertions(+) --- dracut.orig/modules.d/98systemd/dracut-cmdline.sh +++ dracut/modules.d/98systemd/dracut-cmdline.sh @@ -18,6 +18,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr source_conf /etc/conf.d +make_trace_mem "hook cmdline" 1+:mem 1+:iomem 3+:slab # run scriptlets to parse the command line getarg 'rd.break=cmdline' -d 'rdbreak=cmdline' && emergency_shell -n cmdline "Break before cmdline" source_hook cmdline --- dracut.orig/modules.d/98systemd/dracut-initqueue.sh +++ dracut/modules.d/98systemd/dracut-initqueue.sh @@ -10,6 +10,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr source_conf /etc/conf.d +make_trace_mem "hook initqueue" 1:shortmem 2+:mem 3+:slab getarg 'rd.break=initqueue' -d 'rdbreak=initqueue' && emergency_shell -n initqueue "Break before initqueue" RDRETRY=$(getarg rd.retry -d 'rd_retry=') --- dracut.orig/modules.d/98systemd/dracut-pre-pivot.sh +++ dracut/modules.d/98systemd/dracut-pre-pivot.sh @@ -10,6 +10,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr source_conf /etc/conf.d +make_trace_mem "hook pre-pivot" 1:shortmem 2+:mem 3+:slab # pre pivot scripts are sourced just before we doing cleanup and switch over # to the new root. getarg 'rd.break=pre-pivot' 'rdbreak=pre-pivot' && emergency_shell -n pre-pivot "Break pre-pivot" --- dracut.orig/modules.d/98systemd/dracut-pre-trigger.sh +++ dracut/modules.d/98systemd/dracut-pre-trigger.sh @@ -10,6 +10,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr source_conf /etc/conf.d +make_trace_mem "hook pre-trigger" 1:shortmem 2+:mem 3+:slab getargbool 0 rd.udev.info -n -y rdudevinfo && udevadm control --log-priority=info getargbool 0 rd.udev.debug -n -y rdudevdebug && udevadm control --log-priority=debug udevproperty "hookdir=$hookdir" --- dracut.orig/modules.d/98systemd/dracut-pre-udev.sh +++ dracut/modules.d/98systemd/dracut-pre-udev.sh @@ -9,6 +9,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr source_conf /etc/conf.d +make_trace_mem "hook pre-udev" 1:shortmem 2+:mem 3+:slab # pre pivot scripts are sourced just before we doing cleanup and switch over # to the new root. getarg 'rd.break=pre-udev' 'rdbreak=pre-udev' && emergency_shell -n pre-udev "Break pre-udev" --- dracut.orig/dracut.cmdline.7.asc +++ dracut/dracut.cmdline.7.asc @@ -134,6 +134,10 @@ Debug set -x for the dracut shell and logs to dmesg, console and _/run/initramfs/init.log_ +**rd.memdebug=[0-3]**:: + print memory usage debug info, set the verbose level from 1 to 3 + print nothing when set rd.memdebug=0 + **rd.break**:: drop to a shell at the end --- dracut.orig/modules.d/99base/dracut-lib.sh +++ dracut/modules.d/99base/dracut-lib.sh @@ -998,3 +998,93 @@ listlist() { are_lists_eq() { listlist "$1" "$2" "$3" "$4" && listlist "$1" "$3" "$2" "$4" } + +setmemdebug() { + if [ -z "$DEBUG_MEM_LEVEL" ]; then + export DEBUG_MEM_LEVEL=$(getargnum 0 0 3 rd.memdebug) + fi +} + +setmemdebug + +# parameters: msg [trace_level:trace]... +function make_trace_mem() +{ + msg=$1 + shift + if [ "$DEBUG_MEM_LEVEL" -gt 0 ]; then + make_trace show_memstats $DEBUG_MEM_LEVEL "[debug_mem]" "$msg" "$@" + fi +} + +# parameters: func log_level prefix msg [trace_level:trace]... +function make_trace() +{ + func=$1 + shift + + log_level=`echo "$1" | grep -o '^[0-9]\+'` + shift + + prefix=$1 + shift + + msg=$1 + shift + + if [ -z "$log_level" ]; then + return + fi + + msg=`echo "$msg" | sed 's/^\s\+//'` + + msg_printed=0 + while [ $# -gt 0 ]; do + trace_level=`echo "$1" | grep -o '^[0-9]\+'` + trace_in_higher_levels=`echo "$1" | grep -o '+'` + trace=`echo $1 | sed "s/^.*://"` + + if [ -z "$trace_level" ]; then + trace_level=0 + fi + + insert_trace=0 + if [ -n "$trace_in_higher_levels" ]; then + if [ "$log_level" -ge "$trace_level" ]; then + insert_trace=1 + fi + else + if [ "$log_level" -eq "$trace_level" ]; then + insert_trace=1 + fi + fi + + if [ $insert_trace -eq 1 ]; then + if [ $msg_printed -eq 0 ]; then + echo "$prefix $msg" + msg_printed=1 + fi + $func $trace + fi + shift + done +} + +# parameters: type +show_memstats() +{ + case $1 in + shortmem) + cat /proc/meminfo | grep -e "^MemFree" -e "^Cached" -e "^Slab" + ;; + mem) + cat /proc/meminfo + ;; + slab) + cat /proc/slabinfo + ;; + iomem) + cat /proc/iomem + ;; + esac +} ^ permalink raw reply [flat|nested] 7+ messages in thread
[parent not found: <50B5CF24.6090006-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 2/2 v2] Add memory usage trace to diffrent hook points [not found] ` <50B5CF24.6090006-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2013-01-11 9:05 ` Dave Young [not found] ` <50EFD5D8.1070508-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 7+ messages in thread From: Dave Young @ 2013-01-11 9:05 UTC (permalink / raw) To: Vivek Goyal, harald-H+wXaHxf7aLQT0dZR+AlfA Cc: initramfs-u79uwXL29TY76Z2rM5mHXA, jstancek-H+wXaHxf7aLQT0dZR+AlfA Hello harald What's your opinion about this patch? Could you take a look at it? On 11/28/2012 04:45 PM, Dave Young wrote: > > > Port mkdumprd memory trace functions wrote by jstancek-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org > For kdump, memory usage tracing is important because there's limited > memory in kdump 2nd kernel. > > Add a rd.memdebug cmdline for this. set rd.memdebug=<X> will set the > debug level to X which is the debug verbose level. > > the format of cmdline is like below: > <level>[+]:<type> > <level> is the debug level > [+] means debug level >= <level> > <type> is the debug info type, as for this patch I added mem, iomem, slab > mem is for /proc/meminfo, iomem is for /proc/iomem, slab is for /proc/slabinfo > Also shortmem is the stripped /proc/meminfo which only includes 3 lines of > Memfree, Cached and Slab, for example: > MemFree: 6327176 kB > Cached: 741916 kB > Slab: 77284 kB > > I added several trace point to the begin of several init hooks > At cmdline hooks I'm adding trace of "1+:mem 1+:iomem 3+:slab" > For other hooks I'm adding trace of "1:shortmem 2+:mem 3+:slab" > > This means: > rd.memdebug=1) > cmdline hook: print mem and iomem > other hooks: print shortmem > rd.memdebug=2) > cmdline hook: print mem and iomem > other hooks: print mem > rd.memdebug=3): > cmdline hook: print mem iomem, and slabinfo > other hooks: print mem and slabinfo > *): > do not print any mem debug info > > [v1->v2]: update to use getargnum with <minval> as argument > print iomem info at cmdline hook as well > > Signed-off-by: Dave Young <dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> > --- > dracut.cmdline.7.asc | 4 + > modules.d/98systemd/dracut-cmdline.sh | 1 > modules.d/98systemd/dracut-initqueue.sh | 1 > modules.d/98systemd/dracut-pre-pivot.sh | 1 > modules.d/98systemd/dracut-pre-trigger.sh | 1 > modules.d/98systemd/dracut-pre-udev.sh | 1 > modules.d/99base/dracut-lib.sh | 90 ++++++++++++++++++++++++++++++ > 7 files changed, 99 insertions(+) > > --- dracut.orig/modules.d/98systemd/dracut-cmdline.sh > +++ dracut/modules.d/98systemd/dracut-cmdline.sh > @@ -18,6 +18,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr > > source_conf /etc/conf.d > > +make_trace_mem "hook cmdline" 1+:mem 1+:iomem 3+:slab > # run scriptlets to parse the command line > getarg 'rd.break=cmdline' -d 'rdbreak=cmdline' && emergency_shell -n cmdline "Break before cmdline" > source_hook cmdline > --- dracut.orig/modules.d/98systemd/dracut-initqueue.sh > +++ dracut/modules.d/98systemd/dracut-initqueue.sh > @@ -10,6 +10,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr > > source_conf /etc/conf.d > > +make_trace_mem "hook initqueue" 1:shortmem 2+:mem 3+:slab > getarg 'rd.break=initqueue' -d 'rdbreak=initqueue' && emergency_shell -n initqueue "Break before initqueue" > > RDRETRY=$(getarg rd.retry -d 'rd_retry=') > --- dracut.orig/modules.d/98systemd/dracut-pre-pivot.sh > +++ dracut/modules.d/98systemd/dracut-pre-pivot.sh > @@ -10,6 +10,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr > > source_conf /etc/conf.d > > +make_trace_mem "hook pre-pivot" 1:shortmem 2+:mem 3+:slab > # pre pivot scripts are sourced just before we doing cleanup and switch over > # to the new root. > getarg 'rd.break=pre-pivot' 'rdbreak=pre-pivot' && emergency_shell -n pre-pivot "Break pre-pivot" > --- dracut.orig/modules.d/98systemd/dracut-pre-trigger.sh > +++ dracut/modules.d/98systemd/dracut-pre-trigger.sh > @@ -10,6 +10,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr > > source_conf /etc/conf.d > > +make_trace_mem "hook pre-trigger" 1:shortmem 2+:mem 3+:slab > getargbool 0 rd.udev.info -n -y rdudevinfo && udevadm control --log-priority=info > getargbool 0 rd.udev.debug -n -y rdudevdebug && udevadm control --log-priority=debug > udevproperty "hookdir=$hookdir" > --- dracut.orig/modules.d/98systemd/dracut-pre-udev.sh > +++ dracut/modules.d/98systemd/dracut-pre-udev.sh > @@ -9,6 +9,7 @@ type getarg >/dev/null 2>&1 || . /lib/dr > > source_conf /etc/conf.d > > +make_trace_mem "hook pre-udev" 1:shortmem 2+:mem 3+:slab > # pre pivot scripts are sourced just before we doing cleanup and switch over > # to the new root. > getarg 'rd.break=pre-udev' 'rdbreak=pre-udev' && emergency_shell -n pre-udev "Break pre-udev" > --- dracut.orig/dracut.cmdline.7.asc > +++ dracut/dracut.cmdline.7.asc > @@ -134,6 +134,10 @@ Debug > set -x for the dracut shell and logs to dmesg, console and > _/run/initramfs/init.log_ > > +**rd.memdebug=[0-3]**:: > + print memory usage debug info, set the verbose level from 1 to 3 > + print nothing when set rd.memdebug=0 > + > **rd.break**:: > drop to a shell at the end > > --- dracut.orig/modules.d/99base/dracut-lib.sh > +++ dracut/modules.d/99base/dracut-lib.sh > @@ -998,3 +998,93 @@ listlist() { > are_lists_eq() { > listlist "$1" "$2" "$3" "$4" && listlist "$1" "$3" "$2" "$4" > } > + > +setmemdebug() { > + if [ -z "$DEBUG_MEM_LEVEL" ]; then > + export DEBUG_MEM_LEVEL=$(getargnum 0 0 3 rd.memdebug) > + fi > +} > + > +setmemdebug > + > +# parameters: msg [trace_level:trace]... > +function make_trace_mem() > +{ > + msg=$1 > + shift > + if [ "$DEBUG_MEM_LEVEL" -gt 0 ]; then > + make_trace show_memstats $DEBUG_MEM_LEVEL "[debug_mem]" "$msg" "$@" > + fi > +} > + > +# parameters: func log_level prefix msg [trace_level:trace]... > +function make_trace() > +{ > + func=$1 > + shift > + > + log_level=`echo "$1" | grep -o '^[0-9]\+'` > + shift > + > + prefix=$1 > + shift > + > + msg=$1 > + shift > + > + if [ -z "$log_level" ]; then > + return > + fi > + > + msg=`echo "$msg" | sed 's/^\s\+//'` > + > + msg_printed=0 > + while [ $# -gt 0 ]; do > + trace_level=`echo "$1" | grep -o '^[0-9]\+'` > + trace_in_higher_levels=`echo "$1" | grep -o '+'` > + trace=`echo $1 | sed "s/^.*://"` > + > + if [ -z "$trace_level" ]; then > + trace_level=0 > + fi > + > + insert_trace=0 > + if [ -n "$trace_in_higher_levels" ]; then > + if [ "$log_level" -ge "$trace_level" ]; then > + insert_trace=1 > + fi > + else > + if [ "$log_level" -eq "$trace_level" ]; then > + insert_trace=1 > + fi > + fi > + > + if [ $insert_trace -eq 1 ]; then > + if [ $msg_printed -eq 0 ]; then > + echo "$prefix $msg" > + msg_printed=1 > + fi > + $func $trace > + fi > + shift > + done > +} > + > +# parameters: type > +show_memstats() > +{ > + case $1 in > + shortmem) > + cat /proc/meminfo | grep -e "^MemFree" -e "^Cached" -e "^Slab" > + ;; > + mem) > + cat /proc/meminfo > + ;; > + slab) > + cat /proc/slabinfo > + ;; > + iomem) > + cat /proc/iomem > + ;; > + esac > +} > -- > To unsubscribe from this list: send the line "unsubscribe initramfs" in > the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- Thanks Dave ^ permalink raw reply [flat|nested] 7+ messages in thread
[parent not found: <50EFD5D8.1070508-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 2/2 v2] Add memory usage trace to diffrent hook points [not found] ` <50EFD5D8.1070508-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2013-01-11 10:00 ` Harald Hoyer [not found] ` <50EFE2AC.7020704-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 7+ messages in thread From: Harald Hoyer @ 2013-01-11 10:00 UTC (permalink / raw) To: Dave Young Cc: Vivek Goyal, initramfs-u79uwXL29TY76Z2rM5mHXA, jstancek-H+wXaHxf7aLQT0dZR+AlfA Am 11.01.2013 10:05, schrieb Dave Young: > > Hello harald > > What's your opinion about this patch? Could you take a look at it? >> --- dracut.orig/modules.d/99base/dracut-lib.sh >> +++ dracut/modules.d/99base/dracut-lib.sh >> @@ -998,3 +998,93 @@ listlist() { >> are_lists_eq() { >> listlist "$1" "$2" "$3" "$4" && listlist "$1" "$3" "$2" "$4" >> } >> + >> +setmemdebug() { >> + if [ -z "$DEBUG_MEM_LEVEL" ]; then >> + export DEBUG_MEM_LEVEL=$(getargnum 0 0 3 rd.memdebug) >> + fi >> +} >> + >> +setmemdebug >> + >> +# parameters: msg [trace_level:trace]... >> +function make_trace_mem() >> +{ >> + msg=$1 >> + shift >> + if [ "$DEBUG_MEM_LEVEL" -gt 0 ]; then >> + make_trace show_memstats $DEBUG_MEM_LEVEL "[debug_mem]" "$msg" "$@" >> + fi >> +} >> + >> +# parameters: func log_level prefix msg [trace_level:trace]... >> +function make_trace() >> +{ >> + func=$1 >> + shift >> + >> + log_level=`echo "$1" | grep -o '^[0-9]\+'` * use $() instead of `` * grep is overkill use simple shell functions There are in modules.d/99base/dracut-lib.sh strstr() str_starts() str_ends() * or use "case" case "$1" in [0-9]*) log_level=$1;; esac >> + shift >> + >> + prefix=$1 >> + shift >> + >> + msg=$1 >> + shift >> + >> + if [ -z "$log_level" ]; then >> + return >> + fi >> + >> + msg=`echo "$msg" | sed 's/^\s\+//'` sed is overkill for this. Use ${var%%...} ${var%...} ${var#...} ${var##...} $ msg="foo+bar baz" $ echo ${msg#*+} bar baz >> + >> + msg_printed=0 >> + while [ $# -gt 0 ]; do >> + trace_level=`echo "$1" | grep -o '^[0-9]\+'` >> + trace_in_higher_levels=`echo "$1" | grep -o '+'` >> + trace=`echo $1 | sed "s/^.*://"` same same ^ permalink raw reply [flat|nested] 7+ messages in thread
[parent not found: <50EFE2AC.7020704-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 2/2 v2] Add memory usage trace to diffrent hook points [not found] ` <50EFE2AC.7020704-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2013-01-14 8:59 ` Dave Young 0 siblings, 0 replies; 7+ messages in thread From: Dave Young @ 2013-01-14 8:59 UTC (permalink / raw) To: Harald Hoyer Cc: Vivek Goyal, initramfs-u79uwXL29TY76Z2rM5mHXA, jstancek-H+wXaHxf7aLQT0dZR+AlfA On 01/11/2013 06:00 PM, Harald Hoyer wrote: > Am 11.01.2013 10:05, schrieb Dave Young: >> >> Hello harald >> >> What's your opinion about this patch? Could you take a look at it? >>> --- dracut.orig/modules.d/99base/dracut-lib.sh >>> +++ dracut/modules.d/99base/dracut-lib.sh >>> @@ -998,3 +998,93 @@ listlist() { >>> are_lists_eq() { >>> listlist "$1" "$2" "$3" "$4" && listlist "$1" "$3" "$2" "$4" >>> } >>> + >>> +setmemdebug() { >>> + if [ -z "$DEBUG_MEM_LEVEL" ]; then >>> + export DEBUG_MEM_LEVEL=$(getargnum 0 0 3 rd.memdebug) >>> + fi >>> +} >>> + >>> +setmemdebug >>> + >>> +# parameters: msg [trace_level:trace]... >>> +function make_trace_mem() >>> +{ >>> + msg=$1 >>> + shift >>> + if [ "$DEBUG_MEM_LEVEL" -gt 0 ]; then >>> + make_trace show_memstats $DEBUG_MEM_LEVEL "[debug_mem]" "$msg" "$@" >>> + fi >>> +} >>> + >>> +# parameters: func log_level prefix msg [trace_level:trace]... >>> +function make_trace() >>> +{ >>> + func=$1 >>> + shift >>> + >>> + log_level=`echo "$1" | grep -o '^[0-9]\+'` > > * use $() instead of `` Will do > > > * grep is overkill use simple shell functions > > There are in modules.d/99base/dracut-lib.sh > strstr() > str_starts() > str_ends() > > * or use "case" > > case "$1" in > [0-9]*) log_level=$1;; > esac Will do > >>> + shift >>> + >>> + prefix=$1 >>> + shift >>> + >>> + msg=$1 >>> + shift >>> + >>> + if [ -z "$log_level" ]; then >>> + return >>> + fi >>> + >>> + msg=`echo "$msg" | sed 's/^\s\+//'` > > sed is overkill for this. Use > ${var%%...} > ${var%...} > ${var#...} > ${var##...} > > $ msg="foo+bar baz" > $ echo ${msg#*+} > bar baz > Will do > >>> + >>> + msg_printed=0 >>> + while [ $# -gt 0 ]; do >>> + trace_level=`echo "$1" | grep -o '^[0-9]\+'` >>> + trace_in_higher_levels=`echo "$1" | grep -o '+'` >>> + trace=`echo $1 | sed "s/^.*://"` > > same same > Will do -- Thanks Dave ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2013-01-14 8:59 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-26 2:38 [PATCH 2/2] Add memory usage trace to diffrent hook points Dave Young
[not found] ` <20121126023852.GA6886-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2012-11-27 22:33 ` Vivek Goyal
[not found] ` <20121127223330.GG6964-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-11-28 5:53 ` Dave Young
2012-11-28 8:45 ` [PATCH 2/2 v2] " Dave Young
[not found] ` <50B5CF24.6090006-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-01-11 9:05 ` Dave Young
[not found] ` <50EFD5D8.1070508-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-01-11 10:00 ` Harald Hoyer
[not found] ` <50EFE2AC.7020704-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-01-14 8:59 ` Dave Young
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.