Updated rusage patch

Bruce Evans brde at optusnet.com.au
Fri Jun 1 09:50:38 UTC 2007


On Thu, 31 May 2007, Jeff Roberson wrote:

> Now that I've said all of that and committed the patch, I just realized that 
> there is still one race that is unacceptable.  When the thread exits in 
> thread_exit() and adds the stats of both threads together we could lose 
> changes in the still-running thread.

I think I see.

The same problem seems to affect all calls to ruxagg() and rucollect()
for threads that aren't curthread.  You cannot control the stats for
other threads using a spinlock since statclock() doesn't use a spinlock
for the tick counts and shouldn't (modulo this bug) use one for the
rss's.  Resetting the tick counts in ruxagg() is particulary dangerous.
Resetting the runtime in ruxagg() isn't a problem because the runtime
isn't touched by statclock().  ruxcollect() only does insufficently
locked accesses for reading the rss's, except in thread_exit().  It
should be easy to avoid the resettings by accumulating into a local
rux as is already done for ru's (put an rux in each thread and add
these up when required).  This reduces to the same problem as for the
rss's.

Bruce


More information about the freebsd-arch mailing list