[Seaside] WARegistry performance
philippe.marschall at gmail.com
Sun Dec 14 11:15:29 UTC 2008
2008/12/13, Balázs Kósi <rebmekop at gmail.com>:
> We've tested our seaside (2.8) application with ab  and found that
> the performance decreases with repeated runs of the benchmark.
> Ab creates a new session for every request, so we've looked into the
> session handling code and found that WARegistry spends O(n)
> time with housekeeping for every new session, where n is the number of
> registered sessions. This means that creating n sessions rapidly
> takes O(n^2) time.
The problem is that reaping the expired session requires iterating
over all the sessions, right?
> SeasideRegistry-ul.3.mcz  contains an alternative approach which
> needs O(n) time for n new sessions, amortized O(1) time for every
> We use a LinkedDictionary, which is a combination of a dictionary and
> a linked list. In the list handlers are sorted by expiration time.
> Every time
> a new session is created we unregister all the expired sessions, which
> can be found at the beginning of the list. When a session is accessed
> then we move it to the end of the list.
And you store the node in the dictionary so you don't have to search for it.
> To try it out you need to load HashTable from  first.
Is there any special reason why you don't use dictionary?
> counter_benchmark.pdf  contains some benchmarks created with
> autobench . We used Seaside-2.8-578 one-click image. Set the
> size to 100 in TcpListener. Some graphs can be found at .
> What do you think?
It only works when all the sessions have the same lifetime.
More information about the seaside