Commit af6e70b2 authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by Andrei Vagin

crit: RSS explorer

When running 'cirt x dir rss' one will see the way pagemap chunks
are scatered across the VMs of processes. Sample output from the
env00 zdtm test is

22
	400000 / 1              00400000 / 5        /root/criu/test/zdtm/static/env00

	604000 / 2              00604000 / 1        /root/criu/test/zdtm/static/env00
	                        00605000 / 1        /root/criu/test/zdtm/static/env00

	853000 / 1              00853000 / 33

	7faba2d4b000 / 6        7faba2d4b000 / 4        /usr/lib64/libc-2.22.so
	                        7faba2d4f000 / 2        /usr/lib64/libc-2.22.so

	7faba2d51000 / 2        7faba2d51000 / 4

	7faba2d54000 / 1        ~

	7faba2f64000 / 3        7faba2f64000 / 3

	7faba2f74000 / 1        7faba2f74000 / 1

	7faba2f75000 / 2        7faba2f75000 / 1        /usr/lib64/ld-2.22.so
	                        7faba2f76000 / 1        /usr/lib64/ld-2.22.so

	7faba2f77000 / 1        7faba2f77000 / 1

	7fffb4de3000 / 3        7fffb4de2000 / 70

	7fffb4e24000 / 2        ~

	7fffb4e27000 / 1        ~

	7fffb4f6a000 / 2        7fffb4f6a000 / 2
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: 's avatarAndrei Vagin <avagin@virtuozzo.com>
parent 9e3e4656
...@@ -212,7 +212,42 @@ def explore_mems(opts): ...@@ -212,7 +212,42 @@ def explore_mems(opts):
print "\t%-36s%s%s" % (astr, prot, fn) print "\t%-36s%s%s" % (astr, prot, fn)
explorers = { 'ps': explore_ps, 'fds': explore_fds, 'mems': explore_mems } def explore_rss(opts):
ps_img = pycriu.images.load(dinf(opts, 'pstree.img'))
for p in ps_img['entries']:
pid = p['pid']
vmas = pycriu.images.load(dinf(opts, 'mm-%d.img' % pid))['entries'][0]['vmas']
pms = pycriu.images.load(dinf(opts, 'pagemap-%d.img' % pid))['entries']
print "%d" % pid
vmi = 0
pvmi = -1
for pm in pms[1:]:
pstr = '\t%lx / %-8d' % (pm['vaddr'], pm['nr_pages'])
while vmas[vmi]['end'] <= pm['vaddr']:
vmi += 1
pme = pm['vaddr'] + (pm['nr_pages'] << 12)
vstr = ''
while vmas[vmi]['start'] < pme:
vma = vmas[vmi]
if vmi == pvmi:
vstr += ' ~'
else:
vstr += ' %08lx / %-8d' % (vma['start'], (vma['end'] - vma['start'])>>12)
if vma['status'] & ((1 << 6) | (1 << 7)):
vstr += ' ' + get_file_str(opts, {'type': 'REG', 'id': vma['shmid']})
pvmi = vmi
vstr += '\n\t%23s' % ''
vmi += 1
vmi -= 1
print '%-24s%s' % (pstr, vstr)
explorers = { 'ps': explore_ps, 'fds': explore_fds, 'mems': explore_mems, 'rss': explore_rss }
def explore(opts): def explore(opts):
explorers[opts['what']](opts) explorers[opts['what']](opts)
...@@ -258,7 +293,7 @@ def main(): ...@@ -258,7 +293,7 @@ def main():
# Explore # Explore
x_parser = subparsers.add_parser('x', help = 'explore image dir') x_parser = subparsers.add_parser('x', help = 'explore image dir')
x_parser.add_argument('dir') x_parser.add_argument('dir')
x_parser.add_argument('what', choices = [ 'ps', 'fds', 'mems' ]) x_parser.add_argument('what', choices = [ 'ps', 'fds', 'mems', 'rss'])
x_parser.set_defaults(func=explore) x_parser.set_defaults(func=explore)
# Show # Show
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment