svn commit: r199764 - head/sys/kern

Ivan Voras ivoras at FreeBSD.org
Tue Nov 24 19:57:41 UTC 2009


Author: ivoras
Date: Tue Nov 24 19:57:41 2009
New Revision: 199764
URL: http://svn.freebsd.org/changeset/base/199764

Log:
  Make ULE process usage (%CPU) accounting usable again by keeping track
  of the last tick we incremented on.
  
  Submitted by:	matthew.fleming/at/isilon.com, is/at/rambler-co.ru
  Reviewed by:	jeff (who thinks there should be a better way in the future)
  Approved by:	gnn (mentor)
  MFC after:	3 weeks

Modified:
  head/sys/kern/sched_ule.c

Modified: head/sys/kern/sched_ule.c
==============================================================================
--- head/sys/kern/sched_ule.c	Tue Nov 24 19:26:53 2009	(r199763)
+++ head/sys/kern/sched_ule.c	Tue Nov 24 19:57:41 2009	(r199764)
@@ -103,6 +103,7 @@ struct td_sched {	
 	u_int		ts_slptime;	/* Number of ticks we vol. slept */
 	u_int		ts_runtime;	/* Number of ticks we were running */
 	int		ts_ltick;	/* Last tick that we were running on */
+	int		ts_incrtick;	/* Last tick that we incremented on */
 	int		ts_ftick;	/* First tick that we were running on */
 	int		ts_ticks;	/* Tick count */
 #ifdef KTR
@@ -1991,6 +1992,7 @@ sched_fork_thread(struct thread *td, str
 	 */
 	ts2->ts_ticks = ts->ts_ticks;
 	ts2->ts_ltick = ts->ts_ltick;
+	ts2->ts_incrtick = ts->ts_incrtick;
 	ts2->ts_ftick = ts->ts_ftick;
 	child->td_user_pri = td->td_user_pri;
 	child->td_base_user_pri = td->td_base_user_pri;
@@ -2182,11 +2184,12 @@ sched_tick(void)
 	 * Ticks is updated asynchronously on a single cpu.  Check here to
 	 * avoid incrementing ts_ticks multiple times in a single tick.
 	 */
-	if (ts->ts_ltick == ticks)
+	if (ts->ts_incrtick == ticks)
 		return;
 	/* Adjust ticks for pctcpu */
 	ts->ts_ticks += 1 << SCHED_TICK_SHIFT;
 	ts->ts_ltick = ticks;
+	ts->ts_incrtick = ticks;
 	/*
 	 * Update if we've exceeded our desired tick threshhold by over one
 	 * second.


More information about the svn-src-all mailing list