From owner-svn-soc-all@FreeBSD.ORG Thu Sep 13 08:29:42 2012 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from socsvn.FreeBSD.org (unknown [IPv6:2001:4f8:fff6::2f]) by hub.freebsd.org (Postfix) with SMTP id B04A5106564A for ; Thu, 13 Sep 2012 08:29:40 +0000 (UTC) (envelope-from rudot@FreeBSD.org) Received: by socsvn.FreeBSD.org (sSMTP sendmail emulation); Thu, 13 Sep 2012 08:29:40 +0000 Date: Thu, 13 Sep 2012 08:29:40 +0000 From: rudot@FreeBSD.org To: svn-soc-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Message-Id: <20120913082940.B04A5106564A@hub.freebsd.org> Cc: Subject: socsvn commit: r241620 - in soc2012/rudot/sys: kern sys X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Sep 2012 08:29:43 -0000 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 -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_ */