Hi guys,

as I was conducting some perf tests yesterday and this morning, I found that the LRUCache.get(...) took around 14% of all the CPU, which is quite big.

There is nothing wrong with the current implementation though. It's pretty normal that when the data are cached, that at some point, it becomes ne of the major bottleneck. The alternative would be to fetch the serialized value from disk, and that would cost way more time.

I also digged the code to see where we can improve it, but it's pretty optimal.

Basically (correct me if I'm wrong), we are looking for an element in a hash table, then we try to find the correct version, as the cache stores versionned elements, and then we 'touch' the element so that it won't be evicted fast.

Here are a few ideas I have had, some food for thoughts.

1) Do we need to touch the elements ?
the touch() method move the element from the middle of a circular linked list to the beginning of the list. This is not exactly a free operation. What if we simply update a flag with the latest version in this elemnt ? The eviction strategy would then be to select the elements that have the lower counter. Of course, that would imply we have to go through all the elemnts from time to time, and remove a set of them when kicking the eviction (This would be very similar to a garbage collection).

It's likely to be more efficient than a touch() done for every access.

2) Do we need to keep all the versions ?
When we fetch an element from the cache, in a LDAP context, we won't fetch it a second time. Never. That means we will use a different version than the previous one. So the question to keep versions in the cache is raised : what if we simply replace the element when some modification occurs ?

(just in case these versionned elements are needed in the context of an optimistic locking system, I wonder if those versionned cache are critical too, as the number of changes will in any case limited to a very few numbers of elements. But I may be wrong here...)

I any case, I do think that we should keep the current LRUCache as is and start thinkig about a better version - if any -for after 2.0. This is typically something a student might want to play with...

Thoughts ?

--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com

Reply via email to