aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorTim J. Robbins <tjr@FreeBSD.org>2003-04-24 11:03:04 +0000
committerTim J. Robbins <tjr@FreeBSD.org>2003-04-24 11:03:04 +0000
commitceff7f2a480cd2eb2313da08150571cd718a99c6 (patch)
tree64d06107589629e94e8670cef3671af74fe46209 /sys
parent70ce1167568b0ea549a939e6c2461266108c9501 (diff)
downloadsrc-ceff7f2a480cd2eb2313da08150571cd718a99c6.tar.gz
src-ceff7f2a480cd2eb2313da08150571cd718a99c6.zip
Do a better job of calculating the RSS for swapped-out processes:
don't include the kernel stacks of swapped-out threads in the page count, but do include the alternate kernel stack. jhb provided some helpful comments on this. PR: 49102
Notes
Notes: svn path=/head/; revision=113965
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/kern_proc.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c
index 03b6a81ad02c..7879a9ad233c 100644
--- a/sys/kern/kern_proc.c
+++ b/sys/kern/kern_proc.c
@@ -662,10 +662,16 @@ fill_kinfo_proc(p, kp)
kp->ki_size = vm->vm_map.size;
kp->ki_rssize = vmspace_resident_count(vm); /*XXX*/
- if (p->p_sflag & PS_INMEM)
+ if (p->p_sflag & PS_INMEM) {
kp->ki_rssize += UAREA_PAGES;
- FOREACH_THREAD_IN_PROC(p, td0)/* XXXKSE: thread swapout check */
- kp->ki_rssize += KSTACK_PAGES;
+ FOREACH_THREAD_IN_PROC(p, td0) {
+ if (!TD_IS_SWAPPED(td0))
+ kp->ki_rssize += td0->td_kstack_pages;
+ if (td0->td_altkstack_obj != NULL)
+ kp->ki_rssize +=
+ td0->td_altkstack_pages;
+ }
+ }
kp->ki_swrss = vm->vm_swrss;
kp->ki_tsize = vm->vm_tsize;
kp->ki_dsize = vm->vm_dsize;