I'm trying to run the YCSB benchmark using a basic Terracotta ehcache client. My setup consists of a single client system and 3 servers. Each server has a mirror group defined (please see the attached config). The requirements are:
- No disk persistence required
- I wish to maintain a redundant copy of each piece of data
- I don't want any data to be evicted
- I want the client to have an empty cache (ie. simply act as a proxy)
YCSB is a fairly well known benchmark which has just a few knobs to dial. I'm running it using 10, 20, 30... 60 client threads and the number of records being inserted is a function of the number of threads.
So, what I'm seeing is very flat performance as I increase the threads. Neither client or server systems seem to be maxed - in fact they're not even running that hard.
Profiling the client it seems that the problem is serious contention in com.tc.object.TCObjectServerMapImpl.doLogicalPutUnlocked. Is this to be expected? Would the benchmark run better with separate client JVMs (and fewer threads in each client)? Is there something in my config which is causing this?
I've attached my various relevant config files as well as the YCSB client code I'm using.