socsvn commit: r241620 - in soc2012/rudot/sys: kern sys
rudot at FreeBSD.org
rudot at FreeBSD.org
Thu Sep 13 08:29:43 UTC 2012
Author: rudot
Date: Thu Sep 13 08:29:40 2012
New Revision: 241620
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=241620
Log:
move r_pflags into struct proc
Modified:
soc2012/rudot/sys/kern/kern_racct.c
soc2012/rudot/sys/kern/kern_rctl.c
soc2012/rudot/sys/kern/subr_trap.c
soc2012/rudot/sys/sys/proc.h
soc2012/rudot/sys/sys/racct.h
Modified: soc2012/rudot/sys/kern/kern_racct.c
==============================================================================
--- soc2012/rudot/sys/kern/kern_racct.c Thu Sep 13 07:25:41 2012 (r241619)
+++ soc2012/rudot/sys/kern/kern_racct.c Thu Sep 13 08:29:40 2012 (r241620)
@@ -84,7 +84,7 @@
*/
#define RACCT_PCPU_SECS 3
-struct mtx racct_lock;
+static struct mtx racct_lock;
MTX_SYSINIT(racct_lock, &racct_lock, "racct lock", MTX_DEF);
static uma_zone_t racct_zone;
@@ -1009,7 +1009,7 @@
}
static void
-racct_proc_disable(struct proc *p)
+racct_proc_throttle(struct proc *p)
{
struct thread *td;
#ifdef SMP
@@ -1017,7 +1017,6 @@
#endif
PROC_LOCK_ASSERT(p, MA_OWNED);
- mtx_assert(&racct_lock, MA_OWNED);
/*
* Do not block kernel processes. Also do not block processes with
@@ -1026,7 +1025,7 @@
if (((p->p_flag & (P_SYSTEM | P_KTHREAD)) != 0) ||
(p->p_racct->r_resources[RACCT_PCTCPU] <= pcpu_threshold))
return;
- p->p_racct->r_pflags |= R_PCPUEXCEEDED;
+ p->p_throttled = 1;
FOREACH_THREAD_IN_PROC(p, td) {
switch (td->td_state) {
@@ -1051,21 +1050,13 @@
}
}
-int
-racct_proc_disabled(struct proc *p)
-{
- mtx_assert(&racct_lock, MA_OWNED);
-
- return (p->p_racct->r_pflags & R_PCPUEXCEEDED);
-}
-
static void
-racct_proc_enable(struct proc *p)
+racct_proc_wakeup(struct proc *p)
{
- mtx_assert(&racct_lock, MA_OWNED);
+ PROC_LOCK_ASSERT(p, MA_OWNED);
- if (racct_proc_disabled(p)) {
- p->p_racct->r_pflags &= ~R_PCPUEXCEEDED;
+ if (p->p_throttled) {
+ p->p_throttled = 0;
wakeup(p->p_racct);
}
}
@@ -1148,9 +1139,9 @@
over_limits = racct_set_check_locked(p, RACCT_PCTCPU,
pct);
if (over_limits)
- racct_proc_disable(p);
- else if (racct_proc_disabled(p))
- racct_proc_enable(p);
+ racct_proc_throttle(p);
+ else if (p->p_throttled)
+ racct_proc_wakeup(p);
racct_set_locked(p, RACCT_CPU, runtime);
racct_set_locked(p, RACCT_WALLCLOCK,
(uint64_t)wallclock.tv_sec * 1000000 +
Modified: soc2012/rudot/sys/kern/kern_rctl.c
==============================================================================
--- soc2012/rudot/sys/kern/kern_rctl.c Thu Sep 13 07:25:41 2012 (r241619)
+++ soc2012/rudot/sys/kern/kern_rctl.c Thu Sep 13 08:29:40 2012 (r241620)
@@ -76,7 +76,7 @@
#define RCTL_MAX_INBUFLEN 4096
#define RCTL_LOG_BUFSIZE 128
-#define RCTL_PCPU_SHIFT 10
+#define RCTL_PCPU_SHIFT (10 * 1000000)
/*
* 'rctl_rule_link' connects a rule with every racct it's related to.
Modified: soc2012/rudot/sys/kern/subr_trap.c
==============================================================================
--- soc2012/rudot/sys/kern/subr_trap.c Thu Sep 13 07:25:41 2012 (r241619)
+++ soc2012/rudot/sys/kern/subr_trap.c Thu Sep 13 08:29:40 2012 (r241620)
@@ -93,8 +93,6 @@
#include <security/mac/mac_framework.h>
-extern struct mtx racct_lock;
-
/*
* Define the code needed before returning to user mode, for trap and
* syscall.
@@ -155,14 +153,14 @@
PT_UPDATES_FLUSH();
#endif
#ifdef RACCT
- mtx_lock(&racct_lock);
- while (racct_proc_disabled(p)) {
- sig = msleep(p->p_racct, &racct_lock, PCATCH | PBDRY, "racct",
+ PROC_LOCK(p);
+ while (p->p_throttled == 1) {
+ sig = msleep(p->p_racct, &p->p_mtx, PCATCH | PBDRY, "racct",
hz);
if ((sig == EINTR) || (sig == ERESTART))
break;
}
- mtx_unlock(&racct_lock);
+ PROC_UNLOCK(p);
#endif
}
Modified: soc2012/rudot/sys/sys/proc.h
==============================================================================
--- soc2012/rudot/sys/sys/proc.h Thu Sep 13 07:25:41 2012 (r241619)
+++ soc2012/rudot/sys/sys/proc.h Thu Sep 13 08:29:40 2012 (r241620)
@@ -583,6 +583,7 @@
after fork. */
uint64_t p_prev_runtime; /* (c) Resource usage accounting. */
struct racct *p_racct; /* (b) Resource accounting. */
+ u_char p_throttled; /* (c) Flag for racct pcpu throttling */
/*
* An orphan is the child that has beed re-parented to the
* debugger as a result of attaching to it. Need to keep
Modified: soc2012/rudot/sys/sys/racct.h
==============================================================================
--- soc2012/rudot/sys/sys/racct.h Thu Sep 13 07:25:41 2012 (r241619)
+++ soc2012/rudot/sys/sys/racct.h Thu Sep 13 08:29:40 2012 (r241620)
@@ -139,11 +139,6 @@
struct racct {
int64_t r_resources[RACCT_MAX + 1];
LIST_HEAD(, rctl_rule_link) r_rule_links;
-
- /*
- * The racct extension to the process flags
- */
- int r_pflags;
};
/* Flags kept in r_pflags. */
@@ -169,6 +164,5 @@
void racct_proc_ucred_changed(struct proc *p, struct ucred *oldcred,
struct ucred *newcred);
void racct_move(struct racct *dest, struct racct *src);
-int racct_proc_disabled(struct proc *p);
#endif /* !_RACCT_H_ */
More information about the svn-soc-all
mailing list