[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Adding pool_cache_invalidate_local() to pool_cache(9) API
On Fri, 9 Oct 2009 07:35:14 -0700, Matt Thomas <matt%3am-software.com@localhost>
> On Oct 9, 2009, at 2:51 AM, Jean-Yves Migeon wrote:
>> If there is a lockless ("or contention-free mutex") way to do it,
>> why not.
>> But this will alter a performance-critical code path, and should be
>> out very carefully.
> Do it lazily. Set a flag in each per-cpu queue and next time an item
> cpu accesses its per-cpu cache, it can see the cache is invalid and
> discard it.
> This doesn't solve the window of that cpu already actively using the
> while the flag is set but it could that could solved by get testing
> the test on
> exit, if set discarding the item, and retrying.
> No reason for exposing the mechanics of how to do this to the users of
> poll APIs.
You would still have to provide a function to invalidate local per-CPU
pcgs; or else, each CPU would have to call pool_cache_invalidate(), and for
each call, this will deplete the global cache, even if it contains valid
objects. You could solve this by adding an extra parameter to
pool_cache_invalidate to indicate "global" or "local+global" invalidation,
but this is not much different from _invalidate and _invalidate_local.
BTW, that would require to add memory barriers for each call to
pool_put/pool_get, to ensure flag coherency across CPUs. Are such barriers
really performance friendly?
Main Index |
Thread Index |