From b78ae87d6b725417e524d64a69d561579b38fb3c Mon Sep 17 00:00:00 2001 From: Tim Bird Date: Fri, 22 May 2009 12:41:07 -0500 Subject: [PATCH] Kernel version >= 2.6.27 check Jeff Schroeder wrote: > Awesome tool! I learned about this from the LWN article and > immediately (stupidly) tried it out on a centos 5 host. Here is a > patch to add a kernel version check. This is a nice fix, but the version check should be done against the proc data being used (which is not necessarily that of the local kernel). This required moving kernel_version_check to after where the src data is read. --- capture | 2 +- smem | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/capture b/capture index e23995c..e0d32d4 100755 --- a/capture +++ b/capture @@ -4,7 +4,7 @@ # capture a memory data snapshot with realtime priority mkdir -p $1 chrt --fifo 99 \ - cp -a --parents /proc/[0-9]*/{smaps,cmdline,stat} /proc/meminfo $1 + cp -a --parents /proc/[0-9]*/{smaps,cmdline,stat} /proc/meminfo /proc/version $1 # build a compressed tarball of snapshot cd $1/proc diff --git a/smem b/smem index d4a0187..4caac37 100755 --- a/smem +++ b/smem @@ -33,6 +33,8 @@ class procdata(object): return self._readlines('%s/smaps' % pid) def memdata(self): return self._readlines('meminfo') + def version(self): + return self._readlines('version')[0] def pidname(self, pid): l = self._read('%d/stat' % pid) return l[l.find('(') + 1: l.find(')')] @@ -552,7 +554,7 @@ def showbar(l, columns, sort): pylab.show() def kernel_version_check(): - kernel_release = os.uname()[2].split('-')[0] + kernel_release = src.version().split()[2].split('-')[0] if kernel_release < "2.6.27": name = os.path.basename(sys.argv[0]) sys.stderr.write(name + " requires a kernel >= 2.6.27\n") @@ -606,7 +608,6 @@ parser.add_option("-S", "--source", type="str", help="/proc data source") -kernel_version_check() defaults = {} parser.set_defaults(**defaults) (options, args) = parser.parse_args() @@ -616,6 +617,8 @@ try: except: src = procdata(options.source) +kernel_version_check() + try: if options.mappings: showmaps()