Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 13 Sep 2012 08:29:40 +0000
From:      rudot@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r241620 - in soc2012/rudot/sys: kern sys
Message-ID:  <20120913082940.B04A5106564A@hub.freebsd.org>

next in thread | raw e-mail | index | archive | help
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_ */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120913082940.B04A5106564A>