summaryrefslogtreecommitdiffstats
path: root/sys/kern/sched_4bsd.c
diff options
context:
space:
mode:
authortrasz <trasz@FreeBSD.org>2012-10-26 16:01:08 +0000
committertrasz <trasz@FreeBSD.org>2012-10-26 16:01:08 +0000
commitd97338334a7696793856e52982abcf531ba728cf (patch)
tree842a8cfc3ef8239e42a28dbb369918bc9a00b13e /sys/kern/sched_4bsd.c
parent5f08f2efa84de1e44eed353961807024d5b221aa (diff)
downloadFreeBSD-src-d97338334a7696793856e52982abcf531ba728cf.zip
FreeBSD-src-d97338334a7696793856e52982abcf531ba728cf.tar.gz
Add CPU percentage limit enforcement to RCTL. The resouce name is "pcpu".
It was implemented by Rudolf Tomori during Google Summer of Code 2012.
Diffstat (limited to 'sys/kern/sched_4bsd.c')
-rw-r--r--sys/kern/sched_4bsd.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/sys/kern/sched_4bsd.c b/sys/kern/sched_4bsd.c
index 7aaf37c..d1595c7 100644
--- a/sys/kern/sched_4bsd.c
+++ b/sys/kern/sched_4bsd.c
@@ -1585,6 +1585,40 @@ sched_pctcpu(struct thread *td)
return (ts->ts_pctcpu);
}
+#ifdef RACCT
+/*
+ * Calculates the contribution to the thread cpu usage for the latest
+ * (unfinished) second.
+ */
+fixpt_t
+sched_pctcpu_delta(struct thread *td)
+{
+ struct td_sched *ts;
+ fixpt_t delta;
+ int realstathz;
+
+ THREAD_LOCK_ASSERT(td, MA_OWNED);
+ ts = td->td_sched;
+ delta = 0;
+ realstathz = stathz ? stathz : hz;
+ if (ts->ts_cpticks != 0) {
+#if (FSHIFT >= CCPU_SHIFT)
+ delta = (realstathz == 100)
+ ? ((fixpt_t) ts->ts_cpticks) <<
+ (FSHIFT - CCPU_SHIFT) :
+ 100 * (((fixpt_t) ts->ts_cpticks)
+ << (FSHIFT - CCPU_SHIFT)) / realstathz;
+#else
+ delta = ((FSCALE - ccpu) *
+ (ts->ts_cpticks *
+ FSCALE / realstathz)) >> FSHIFT;
+#endif
+ }
+
+ return (delta);
+}
+#endif
+
void
sched_tick(int cnt)
{
OpenPOWER on IntegriCloud