Cache data that whose size changes over time

dormando dormando at rydia.net
Sat Mar 1 02:56:48 UTC 2008


Hey,

Are you running memcached with the -M option? What version are you 
using? What clients?

> The thing is, we don't have 100% control over the size of the data we 
> typically cache. It may change over time. The problem then of course 
> becomes that the slab classes are already populated, so things of other 
> sizes won't find a slab class that matches their size, and thus cannot 
> be cached at all.

This _should_ only happen when running in -M mode. What should otherwise 
happen are cache evictions. So if there isn't enough memory available in 
a slab class it would eject something else from the cache first.

> One common suggestion seems to be to "warm up" the cache. Would it be a 
> bad idea to warm up every slab class with a minimum of 1 item, just to 
> make sure they're all "open"? I guess that is something we'd like to avoid.

Recent releases of memcached do this already, expressly to avoid that issue.

> Another way is to manually adjust the slab sizes over time, using 
> memcached-tool to move items around, or even restarting the daemons. 
> This seems a bit tedious though.

It might not work very well. The slab reassignment stuff is aligned for 
a factor of 2.0, but the default slab class factor is now 1.2... I don't 
fully grok how that affects everything yet, but noticed while reading 
the code.

> Is there any way to automatically adjust the slabs over time, as the 
> data stored changes? What's the current practice for dealing with this 
> problem, for other users of memcached?
> 
> Any advice appreciated - thanks!

No way as of yet, but you probably shouldn't be getting out of memory 
errors outright, so there's a chance something else is holding you back 
here.

-Dormando


More information about the memcached mailing list