Messages in this thread | | | Date | Thu, 5 Mar 2015 16:20:34 +0100 | From | Frederic Weisbecker <> | Subject | Re: [PATCH v2] sched, timer: Use atomics for thread_group_cputimer to improve scalability |
| |
On Mon, Mar 02, 2015 at 01:44:04PM -0800, Linus Torvalds wrote: > On Mon, Mar 2, 2015 at 1:16 PM, Jason Low <jason.low2@hp.com> wrote: > > > > In original code, we set cputimer->running first so it is running while > > we call update_gt_cputime(). Now in this patch, we swapped the 2 calls > > such that we set running after calling update_gt_cputime(), so that > > wouldn't be an issue anymore. > > Hmm. If you actually care about ordering, and 'running' should be > written to after the other things, then it might be best if you use > > smp_store_release(&cputimer->running, 1); > > which makes it clear that the store happens *after* what went before it. > > Or at least have a "smp_wmb()" between the atomic64 updates and the > "WRITE_ONCE()".
FWIW, perhaps it can be reduced with an smp_mb__before_atomic() on the account_group_*_time() side, paired with smp_wmb() from the thread_group_cputimer() side. Arming cputime->running shouldn't be too frequent while update cputime happens at least every tick...
Assuming smp_mb__before_atomic() is more lightweight than smp_load_acquire() of course.
> > I guess that since you use cmpxchg in update_gt_cputime, the accesses > end up being ordered anyway, but it might be better to make that thing > very explicit. > > Linus
| |