On Tue, Aug 26, 2008 at 03:13:40PM +1000, Nick Piggin wrote:Indeed! But if you were in a situation where read-side overhead was irrelevant (perhaps a mythical machine with zero-cost atomics and cache misses), then one approach would be to combine Oleg Nesterov's QRCU with the callback processing from Andrea Arcangeli's implementation from the 2001 timeframe. Of course, if your cache misses really were zero cost, then you wouldn't care about the data remaining in cache. So maybe a machine were cache misses to other CPUs' caches are free, but misses to main memory are horribly expensive? Anyway, the trick would be to adapt QRCU (http://lkml.org/lkml/2007/2/25/18) to store the index in the task structure (as opposed to returning it from rcu_read_lock()), and have a single global queue of callbacks, guarded by a global lock. Then rcu_read_unlock() can initiate callback processing if the counter decrements down to zero, and call_rcu() would also initiate a counter switch in the case where the non-current counter was zero -- and this operation would be guarded by the same lock that guards the callback queue. But I doubt that this would be satisfactory on 4,096-CPU machines. At least not in most cases. ;-) Thanx, Paul --
| david | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Eric Sandeen | Re: [RFC] Heads up on sys_fallocate() |
| Filippos Papadopoulos | Re: INITIO scsi driver fails to work properly |
| Greg KH | [GIT PATCH] driver core patches against 2.6.24 |
git: | |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
| David Miller | [GIT]: Networking |
| Jarek Poplawski | [PATCH take 2] pkt_sched: Protect gen estimators under est_lock. |
| Natalie Protasevich | [BUG] New Kernel Bugs |
