On Sun, Dec 30, 2012 at 12:50 PM, Yunkai Zhang <yunkai...@gmail.com> wrote:

>
>
>
> On Sun, Dec 30, 2012 at 12:17 PM, John Plevyak <jplev...@acm.org> wrote:
>
>> Lol, If they have optimized it by removing the LRU nature, it was perhaps
>> overzealous, or perhaps your workload is such that it fits within the RAM
>> cache so replacement is not an issue.  Without the LRU there are
>> approximately the same number of buckets as objects, so replacement based
>> on bucket would be largely random.    Instead we can have a partitioned
>> LRU, and we are probably going to have to go that route as it looks like
>> lock contention in the cache is pretty bad.  That's the next area I was
>> thinking of looking at...
>>
>
>
> It seems that my coworker split the original one LRU queue into multiple
> queues according data size(e->data->_size_index). What they do is not to
> optimize LRU itself, but to reduce memory fragment caused by allocate/free
> memory frequently.
>
> I'll send that patch to here, and hope you can give some advise.
>


Hi jonh:

I have post the path in
TS-1006<https://issues.apache.org/jira/browse/TS-1006>issue's page,
there is the patch's
link<https://issues.apache.org/jira/secure/attachment/12562712/0006-RamCacheLRU-split-LRU-queue-into-multiple-queues-to-.patch>
.

Welcome to give us some advise:)



>
>
>>
>> cheers,
>> john
>>
>> On Sat, Dec 29, 2012 at 7:59 PM, Yunkai Zhang <yunkai...@gmail.com>
>> wrote:
>>
>> > On Sun, Dec 30, 2012 at 1:57 AM, John Plevyak <jplev...@acm.org> wrote:
>> >
>> > > This code in ::put() implements the LRU, and as you can see, it uses
>> the
>> > > LRU data structure (i.e. simple list from most recently used to
>> least):
>> > >
>> > >   while (bytes > max_bytes) {
>> > >     RamCacheLRUEntry *ee = lru.dequeue();
>> > >     if (ee)
>> > >       remove(ee);
>> > >     else
>> > >       break;
>> > >   }
>> > >
>> >
>> > It seems that the code I read had been changed on this section you
>> showed
>> > above,  as my coworker have optimized it a bit. But thanks for your
>> > explanation all the same.
>> >
>> >
>> > >
>> > >
>> > >
>> > > On Sat, Dec 29, 2012 at 9:39 AM, Yunkai Zhang <yunkai...@gmail.com>
>> > wrote:
>> > >
>> > > > Hi folks:
>> > > >
>> > > > I'm reading code about RamCacheLRU, but I was confused by
>> > > RamCacheLRU->lru
>> > > > queue defined as following:
>> > > >
>> > > > struct RamCacheLRU: public RamCache {
>> > > >    ...
>> > > >    Que(RamCacheLRUEntry, lru_link) lru;
>> > > >    DList(RamCacheLRUEntry, hash_link) *bucket;
>> > > >    ...
>> > > > };
>> > > >
>> > > > By reading put/get/remove functions of RamCacheLRU class,  it seems
>> > that
>> > > > LRU algorithm was implemented by accessing *bucket* list instead of
>> > *lru*
>> > > > queue.
>> > > >
>> > > > Do I understand it correctly? if so, we can remove lru queue and
>> > relative
>> > > > code to speed up the put/get function of LRU a bit.
>> > > >
>> > > > --
>> > > > Yunkai Zhang
>> > > > Work at Taobao
>> > > >
>> > >
>> >
>> >
>> >
>> > --
>> > Yunkai Zhang
>> > Work at Taobao
>> >
>>
>
>
>
> --
> Yunkai Zhang
> Work at Taobao
>



-- 
Yunkai Zhang
Work at Taobao

Reply via email to