Details
-
Improvement
-
Resolution: Unresolved
-
Minor
-
None
-
2.12.0
-
Security Level: Public
Description
On my system I observed that memcached read performance was limited by the hand off to asynch decoding.
TranscodeService.decode() invokes pool.execute(task) which offers the task to the workQueue which is instantiated as an ArrayBlockingQueue. This leads to a condition where the IO thread and all the transcoder threads compete for a single lock. This capped my reads at about 80k keys/s.
When constructing the transcoders worker pool, replacing the ArrayBlockingQueue with a LinkedBlockingQueue (where reads do not block writes) resolved this issue and I got close to 200k keys/s and saturated the network.