diff options
author | Martin Baulig <martin@home-of-linux.org> | 1998-08-12 20:16:24 +0000 |
---|---|---|
committer | Martin Baulig <martin@src.gnome.org> | 1998-08-12 20:16:24 +0000 |
commit | 9248d72018249f8a1388a4d760bbddfc0cb84219 (patch) | |
tree | 344642635ad1f221a7abf0dfb3c2a195e78e59f6 /kernel | |
parent | da622f70c7f6067b0f55ab098ebd24c8d8a8963e (diff) | |
download | libgtop-9248d72018249f8a1388a4d760bbddfc0cb84219.tar.gz |
Using `text_rss', `shlib_rss', `data_rss' and `dirty_size' instead of
1998-08-12 Martin Baulig <martin@home-of-linux.org>
* include/glibtop/procsegment.h (glibtop_proc_segment): Using
`text_rss', `shlib_rss', `data_rss' and `dirty_size' instead of
`tsr', `lrs', `drs' and `dt'. New field `stack_rss'.
* sysdeps/linux/procmem.c: Memory sizes now correctly in bytes.
* sysdeps/linux/procsegment.c: Dito.
* sysdeps/kernel/procsegment.c: Stack pages are reported via
`stack_rss' and no longer count towards `data_rss'
* kernel/table.h (table_proc_segment): Added `srs' field.
* kernel/table21/module.c (TBL_PROC_SEGMENT): Added kernel support
for this.
* sysdeps/{linux, kernel, stub}/procmap.c: New files.
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/table.h | 4 | ||||
-rw-r--r-- | kernel/table21/module.c | 31 |
2 files changed, 18 insertions, 17 deletions
diff --git a/kernel/table.h b/kernel/table.h index 9136f537..6dac48d4 100644 --- a/kernel/table.h +++ b/kernel/table.h @@ -117,8 +117,8 @@ struct table_proc_mem struct table_proc_segment { unsigned long vsize; - int size, resident, shared; - int trs, lrs, drs, dt; + unsigned long size, resident, shared; + unsigned long trs, lrs, drs, srs, dt; }; struct table_proc_time diff --git a/kernel/table21/module.c b/kernel/table21/module.c index 77ff898a..9b55eca6 100644 --- a/kernel/table21/module.c +++ b/kernel/table21/module.c @@ -473,7 +473,7 @@ table_fkt (int type, union table *buf, const void *param) if (tsk->mm && tsk->mm != &init_mm) { unsigned long vsize = 0; int size = 0, resident = 0, share = 0; - int trs = 0, lrs = 0, drs = 0, dt = 0; + int trs = 0, lrs = 0, drs = 0, srs = 0, dt = 0; struct vm_area_struct * vma = tsk->mm->mmap; while (vma) { @@ -486,27 +486,26 @@ table_fkt (int type, union table *buf, const void *param) &pages, &shared, &dirty, &total); -#if 0 - printk ("vma %p (%d) - %d, %d, %d, %d - " - "%lx - %lx, %lx - %lx - %lx\n", - vma, pid, pages, shared, dirty, total, - PAGE_SIZE, vma->vm_start, vma->vm_end, - vma->vm_end - vma->vm_start, - (vma->vm_end - vma->vm_start) >> PAGE_SHIFT); -#endif - resident += pages; share += shared; dt += dirty; size += total; - if (vma->vm_flags & VM_EXECUTABLE) - trs += pages; /* text */ - else if (vma->vm_flags & VM_GROWSDOWN) - drs += pages; /* stack */ - else if (vma->vm_end > 0x60000000) + + /* Well, shared library seem to get mapped + * above 0x40000000 and are executable, + * so I use this hack to get their size. + */ + + if (vma->vm_flags & VM_GROWSDOWN) + srs += pages; /* stack */ + else if ((vma->vm_flags & VM_EXEC) && + (vma->vm_start > 0x40000000)) lrs += pages; /* library */ + else if (vma->vm_flags & VM_EXECUTABLE) + trs += pages; /* text */ else drs += pages; + vma = vma->vm_next; } @@ -516,6 +515,8 @@ table_fkt (int type, union table *buf, const void *param) tbl.proc_segment.shared = share << PAGE_SHIFT; tbl.proc_segment.trs = trs << PAGE_SHIFT; tbl.proc_segment.lrs = lrs << PAGE_SHIFT; + tbl.proc_segment.drs = drs << PAGE_SHIFT; + tbl.proc_segment.srs = srs << PAGE_SHIFT; tbl.proc_segment.dt = dt << PAGE_SHIFT; } break; |