[infinispan-dev] Time measurement and expiry
Manik Surtani
manik at jboss.org
Thu Nov 3 07:19:52 EDT 2011
+1. Looking forward to your patch.
On 2 Nov 2011, at 15:39, Sanne Grinovero wrote:
> I've experimented with some implementations; since the simplest
> approach just removes and simplifies code while providing a
> significant speedup I'm going to send a pull request for that one: I
> just have to add some additional methods to InternalCacheEntry, and
> get a good improvement in the eviction "scanning".
>
> Since with 10 million entries it's able to scan/check them all in a
> timewindow close to a single second (~ 1,2 s on my laptop), I'm then
> proposing as well the second change to remove the "precision check" at
> all, which means we don't need any clock and I just need to remove
> some ~40 lines of useless and slow code. It seems we're all agreeing
> that higher precision is pointless, correct? Especially since the
> eviction thread can finish a full scan quicker.
>
> Cheers,
> Sanne
>
> On 2 November 2011 14:45, Manik Surtani <manik at jboss.org> wrote:
>>
>> On 30 Oct 2011, at 23:58, Dan Berindei wrote:
>>
>>> Cool link Elias, I read the paper linked in the javadoc and it's very
>>> interesting.
>>>
>>> Netty seems to use scheme 6 (a single array of lists with hashing and
>>> without any overflow). I believe in general our timeouts will be much
>>> longer so I suspect scheme 5 or scheme 7 should perform better for us.
>>>
>>> Scheme 5 should be much better than 6 if most of the timeouts use the
>>> same value, and I believe we fit right in that use case.
>>> On the other hand I think we could save some memory if we implement
>>> scheme 7 by not actually storing the higher level wheels and building
>>> them on the fly by iterating the data container. The downside is that
>>> we'll need periodic sweeps of the data container, but those can be on
>>> a separate thread.
>>
>> -1. I'd prefer an approach that does not involve any additional management threads.
>>
>>> One scenario that we should keep in mind is the L1 cache, whose
>>> entries I would guess are invalidated much more often than they expire
>>> after their 1 hour lifetime. If the user stores only immortal entries
>>> + L1 entries in the cache we might end up with a ticker task that
>>> never rarely does anything useful so we should minimize its impact.
>>>
>>> It might also be worth it to implement our own list type to make
>>> adding and removing timeouts faster. I see Netty uses
>>> IdentityHashMap-backed sets for the bucket lists, but as Sanne found
>>> out they aren't the fastest thing around. Using a doubly-linked list
>>> and keeping a reference to the Node in the cache entry should make it
>>> much faster.
>>
>> Yes, I think implementing our own is the way forward as well. No sense in adding dependencies for just a single class, etc.
>>
>> Cheers
>> Manik
>> --
>> Manik Surtani
>> manik at jboss.org
>> twitter.com/maniksurtani
>>
>> Lead, Infinispan
>> http://www.infinispan.org
>>
>>
>>
>>
>> _______________________________________________
>> infinispan-dev mailing list
>> infinispan-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>>
>
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev
--
Manik Surtani
manik at jboss.org
twitter.com/maniksurtani
Lead, Infinispan
http://www.infinispan.org
More information about the infinispan-dev
mailing list