PERFORCE change 183090 for review
Edward Tomasz Napierala
trasz at FreeBSD.org
Mon Aug 30 21:00:29 UTC 2010
http://p4web.freebsd.org/@@183090?ac=10
Change 183090 by trasz at trasz_victim on 2010/08/30 21:00:15
RUSAGE_SWAP. It's slow and ugly, but will have to do for now. It
will be redone after tackling SysV shm.
Affected files ...
.. //depot/projects/soc2009/trasz_limits/sys/vm/swap_pager.c#7 edit
.. //depot/projects/soc2009/trasz_limits/sys/vm/vm_map.c#20 edit
.. //depot/projects/soc2009/trasz_limits/sys/vm/vm_pageout.c#14 edit
Differences ...
==== //depot/projects/soc2009/trasz_limits/sys/vm/swap_pager.c#7 (text+ko) ====
@@ -75,6 +75,7 @@
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/conf.h>
+#include <sys/container.h>
#include <sys/kernel.h>
#include <sys/priv.h>
#include <sys/proc.h>
@@ -207,8 +208,14 @@
if (res) {
PROC_LOCK(curproc);
UIDINFO_VMSIZE_LOCK(uip);
- if ((overcommit & SWAP_RESERVE_RLIMIT_ON) != 0 &&
+ if (
+#ifdef CONTAINERS
+ rusage_add(curproc, RUSAGE_SWAP, incr) &&
+#endif
+#ifndef HRL
+ (overcommit & SWAP_RESERVE_RLIMIT_ON) != 0 &&
uip->ui_vmsize + incr > lim_cur(curproc, RLIMIT_SWAP) &&
+#endif
priv_check(curthread, PRIV_VM_SWAP_NORLIMIT))
res = 0;
else
@@ -251,6 +258,9 @@
{
struct uidinfo *uip;
+#ifdef CONTAINERS
+ rusage_sub(curproc, RUSAGE_SWAP, decr);
+#endif
PROC_LOCK(curproc);
uip = curthread->td_ucred->cr_ruidinfo;
swap_release_by_uid(decr, uip);
==== //depot/projects/soc2009/trasz_limits/sys/vm/vm_map.c#20 (text+ko) ====
@@ -418,6 +418,7 @@
rusage_set(p, RUSAGE_RSS, 0);
rusage_set(p, RUSAGE_MEMLOCK, 0);
rusage_set(p, RUSAGE_VMEM, 0);
+ rusage_set(p, RUSAGE_SWAP, 0);
#endif
}
==== //depot/projects/soc2009/trasz_limits/sys/vm/vm_pageout.c#14 (text+ko) ====
@@ -1709,6 +1709,18 @@
size = vmspace_resident_count(vm);
rusage_set(p, RUSAGE_RSS, IDX_TO_OFF(size));
}
+
+ /*
+ * This is the ugly (and temporary, hopefully) part
+ * of dealing with RUSAGE_SWAP. Basically, we increase
+ * swap counters in the proper place, and decrease them
+ * here. Doing it properly will require adding either
+ * proc or ucred pointer to vm objects; before I do that,
+ * I want to get a better feeling on how the memory
+ * management works. In other words, it's post-shm task.
+ */
+ size = vmspace_swap_count(vm);
+ rusage_set(p, RUSAGE_SWAP, IDX_TO_OFF(size));
#endif
vmspace_free(vm);
}
More information about the p4-projects
mailing list