memcached internals question

J Ravi Menon jravimenon at gmail.com
Wed Mar 26 19:00:58 UTC 2008


Whoops my bad, I missed this part:

p->end_page_ptr += p->size;

It is not 'size' but 'p->size'!

Sorry for this premature assumption.

Ravi




On Wed, Mar 26, 2008 at 11:05 AM, J Ravi Menon <jravimenon at gmail.com> wrote:
> Hi.
>
>  I am new to this list, so let me know if this is not the right forum
>  to discuss memcached code.
>
>  We use memcached 1.2.2,  but I was also looking at the latest version
>  1.2.5 and I see the same logic.
>
>  During item_alloc(), I don't see the 'ntotal' being
>  normalized to the its appropriate 'chunk size':
>
>  [Note: I might be totally missing something or reading this wrong]
>
>
>  size_t ntotal = item_make_header(nkey + 1, flags, nbytes, suffix, &nsuffix);
>
>     unsigned int id = slabs_clsid(ntotal);
>     if (id == 0)
>         return 0;
>
>     it = slabs_alloc(ntotal, id);
>
>  In slabs_alloc(), adjust the ptr by 'ntotal' ( size=ntotal in this function):
>
>   if (p->sl_curr != 0)
>         return p->slots[--p->sl_curr];
>  .
>  .
>   p->end_page_ptr += p->size;
>
>  Now say slab id 1 has chunk size 96, and slab id 2 has a
>  chunk_size=120, the id=2 is the bucket
>  for all item sizes from 97bytes to 120bytes.
>
>  Shouldn't it be adjusted to the maximum chunk size?
>
>  The reason I ask is that on slabs_free(), we return the item ptr back
>  to the slots list without any size info:
>
>  p->slots[p->sl_curr++] = ptr;
>
>
>  And in slabs_alloc(),  it consults the slots list first for a free ptr
>  which could now vary in size...
>
>  Am I missing something?
>
>  Thanks,
>  Ravi
>


More information about the memcached mailing list