
sivanich at sgi
Oct 20, 2005, 9:31 AM
Post #3 of 3
(235 views)
Permalink
|
|
Re: 2.6.14-rc4 latency issue with rcu_process_callbacks()/file_free_rcu()
[In reply to]
|
|
On Thu, Oct 20, 2005 at 05:56:12PM +0200, Eric Dumazet wrote: > Dimitri Sivanich a écrit : > >Just bringing up a latency issue I've noticed recently. > > > >In or around 2.6.14-rc4 some changes were made to have the call to > >kmem_cache_free() from file_free() in the Linux kernel be deferred, running > >as a tasklet via file_free_rcu(), rather than running kmem_cache_free() > >right from file_free() directly. > > > >I've noticed that rcu_process_callbacks() can take quite a while to run > >now that it routinely calls file_free_rcu() to run kmem_cache_free(). > >This can make the cpu unavailable for 100's of usec on 1GHz machines, with > >or without preemption configured on (much of this path is non-preemptible). > > > >This can result in some unpredictable periods of fairly long cpu latency, > >such as when a thread is waiting to be woken by an interrupt handler on a > >'now quiet' cpu. Changing file_free() to call kmem_cache_free() directly > >completely eliminates this unexpected latency. > > Well, you cannot change file_free() to call kmem_cache_free() directly, or > risk corruption/crash. > > See Documentation/RCU/UP.txt OK. I'll have to look at this more closely. I simply ran across this as a substantial change between this and earlier kernels and decided to test against the original file_free()->kmem_cache_free() code to ensure that that alone was indeed the issue (for the circumstance I'll describe below). > > Dont you notice latency issue with other RCU protected data, like dentries ? No, but here's the circumstance under which I notice this: I'm running on a single cpu of an SMP system (4 cpu). When I hit this I'm in a situation where I've written some file data, and am now sleeping waiting to be woken up. No other threads are running on that cpu other than a few kernel threads, so all is fairly quiet. By the simple one line change (file_free() calling kmem_cache_free() again), I'm always woken up very quickly. Too bad we cannot revert back that way with the rcu changes. > > BTW a change in 2.6.14-rc5 might give different latency results. I'll look at this as soon as I get a chance. > > Eric - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo [at] vger More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|