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.
This commit is contained in:
Tim Bird 2009-05-22 12:41:07 -05:00
commit 67aee6e39d
2 changed files with 6 additions and 3 deletions

View file

@ -4,7 +4,7 @@
# capture a memory data snapshot with realtime priority # capture a memory data snapshot with realtime priority
mkdir -p $1 mkdir -p $1
chrt --fifo 99 \ 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 # build a compressed tarball of snapshot
cd $1/proc cd $1/proc

7
smem
View file

@ -33,6 +33,8 @@ class procdata(object):
return self._readlines('%s/smaps' % pid) return self._readlines('%s/smaps' % pid)
def memdata(self): def memdata(self):
return self._readlines('meminfo') return self._readlines('meminfo')
def version(self):
return self._readlines('version')[0]
def pidname(self, pid): def pidname(self, pid):
l = self._read('%d/stat' % pid) l = self._read('%d/stat' % pid)
return l[l.find('(') + 1: l.find(')')] return l[l.find('(') + 1: l.find(')')]
@ -552,7 +554,7 @@ def showbar(l, columns, sort):
pylab.show() pylab.show()
def kernel_version_check(): 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": if kernel_release < "2.6.27":
name = os.path.basename(sys.argv[0]) name = os.path.basename(sys.argv[0])
sys.stderr.write(name + " requires a kernel >= 2.6.27\n") 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") help="/proc data source")
kernel_version_check()
defaults = {} defaults = {}
parser.set_defaults(**defaults) parser.set_defaults(**defaults)
(options, args) = parser.parse_args() (options, args) = parser.parse_args()
@ -616,6 +617,8 @@ try:
except: except:
src = procdata(options.source) src = procdata(options.source)
kernel_version_check()
try: try:
if options.mappings: if options.mappings:
showmaps() showmaps()