vmodule data, that would be private per thread
mi+thun at aldan.algebra.com
Wed Oct 24 15:26:19 CEST 2012
I need to cache and reuse some data in each thread -- to avoid
lock-contention. It does not seem like PRIV_VCL and PRIV_CALL offer
that, so, what I am doing, is this:
1. init_function creates static version of the data once and
initializes thread key with pthread_key_create()
2. each worker functions attempts to extract its thread's copy of the
data with pthread_getspecific()
3. if the pthread_getspecific() returned NULL (first call in this
thread), new memory is allocated and recorded with pthread_setspecific()
Once loaded, the memory is not -- and needs not -- be freed until
varnishd is restarted. This seems to work, however:
* I see twice as many new-memory allocations as the top limit on the
number of worker-threads: I run varnishd with -w 4,7 argument, but,
when I hit it with ab, 14 lines indicating creation of a new copy of
data are logged (with 14 different thread-IDs).
* I'm wondering, if there is already Varnish API, that would hide
these pthread_* manipulations...
Any ideas? Thank you!
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the varnish-misc