Hi,

On Thu, 18 Jun 2009, Paolo Bonzini wrote:

> > > - Memory consumption in cc1/cc1plus at -Ox -g over that set of apps.
> 
> People usually just look at top's output, but Honza has a memory tester 
> so I thought maybe you can script it...  Indeed here is a script to do 
> that

The memory tester is based on the attached scripts, using strace for 
tracking, not polling on /proc output.


Ciao,
Michael.

Attachment: maxmem2.sh
Description: application/shellscript

#!/usr/bin/python

import string
import re
import sys

pidre = re.compile("^([0-9]*)")
brkre = re.compile("^[0-9 ]*brk.*= ([0-9a-fx]*)")
# munmap (0x40017000, 118685)
# mmap (NULL, 1174524, 
# mremap (void  *old_address,  size_t old_size , size_t new_size
mmapre = re.compile("^[0-9 ]*[mo][ml][ad][^\(]*\([^,]*, ([0-9a-fx]*)")
munmapre = re.compile("^[0-9 ]*munmap[^\(]*\([^,]*, ([0-9a-fx]*)")
mremapre = re.compile("^[0-9 ]*mremap[^\(]*\([^,]*, ([0-9a-fx]*), ([0-9a-fx]*)")

mmapmax = dict()
mmap = dict()
brkmin = dict()
brkmax = dict()

for line in sys.stdin:
	mo = pidre.search(line)
	pid = int(mo.group(1))
	mmapmax.setdefault(pid, 0)
	mmap.setdefault(pid, 0)
	mo = brkre.search(line)
	if mo:
		brkval = int(mo.group(1), 16)
		brkmin.setdefault(pid, brkval)
		brkmax.setdefault(pid, brkval)
		if brkval < brkmin[pid]:
			brkmin[pid] = brkval
		if brkval > brkmax[pid]:
			brkmax[pid] = brkval
	else:
		mo = mmapre.search(line)
		if mo:
			mmapval = int(mo.group(1))
			mmap[pid] += mmapval
		else:
			mo = munmapre.search(line)
			if mo:
				munmapval = int(mo.group(1))
				mmap[pid] -= munmapval
			else:
				mo = mremapre.search(line)
				if mo:
					mremappval = int(mo.group(1))
					mremapnval = int(mo.group(2))
					mmap[pid] += mremapnval - mremappval
		if mmap[pid] > mmapmax[pid]:
			mmapmax[pid] = mmap[pid]

ovrallmmap = 0
for pid, val in mmapmax.iteritems():
#	print "max mmap usage of pid %u is %u kB" % (pid, val/1024)
	if val > ovrallmmap:
		ovrallmmap = val

ovrallbrk = 0
for pid, val in brkmax.iteritems():
	use = val - brkmin[pid]
#	print "max brk usage of pid %u is %u kB" % (pid, use/1024)
	if use > ovrallbrk:
		ovrallbrk = use

#print "mmapmax: %u kB, brkmin: 0x%x, brkmax: 0x%x" % (mmapmax/1024, brkmin, brkmax)
#print "total: %u kB" % ((mmapmax + (brkmax-brkmin))/1024)

print "total: %u kB" % ((ovrallmmap + ovrallbrk)/1024)

Reply via email to