Forum: Installation

Post: Scaling/Performance Question

Scaling/Performance Question
Jun 6, 2013
Hi Experts,

I'm new to VoltDB and trying to run it on our cluster (a Cray).

It's really simple to setup and run, really appreciate that.

One naive question:
When I ran the voltkv example out of the box on 1 node, I get ~10K transactions per second.
Then I tried to modify the deployment.xml in voltkv example, changing hostcount="3", and replaced all "localhost" in to "headNodeIP".

Then I can start the 3 server nodes and run the client on the 4th node. However, I'm getting only ~8K transactions per second. (Well I guess I'm expecting ~30K/sec).

So I must be doing something wrong here, what can be the cause of this?

Jun 12, 2013
Hi Yushu,

Out of the box, the deployment.xml file in examples/voltkv is set with sitesperhost=2. This is a safe setting for testing on a laptop, but on a server with more than 2-4 cores, a higher number should significantly improve performance. I would recommend you first find the optimum configuration on a single server, and then we can help you with scaling out onto a cluster.

For example, if you have 24 cores, you might start with 16 sitesperhost and try incrementing or decrementing this value for several short test runs to see where you get the best throughput. You should be able to achieve much higher than ~10K TPS on a single server, even a laptop, unless the value size is very large.

When you are getting good performance on a single server, the following steps may help you in expanding to a cluster:
- On a single server, it's not an issue, but for a cluster the clocks need to be synchronized with NTP. I have some example commands that may help if you need it.
- You would set the hostcount=3 in the deployment file on all 3 servers. You should also set the sitesperhost to the same value, whatever you found to be optimal on a single server. You can set kfactor=1 if you want to test with high availability, but for pure performance k=0 will be faster.
- You would need to edit the file so that each server knows which HOST to connect to when starting up. Instead of "localhost" for the HOST variable, it should be the hostname or IP address of the 1st server that you start when you are starting the cluster.
- Also in the file, under function async-benchmark(), you should use a comma-separated list of the hostnames and port numbers of the 3 servers. For example " --servers=hostname1:21212,hostname2:21212,hostname3:21212"