Forum: Managing VoltDB

Post: VoltDB "Voter" Benchmark

VoltDB "Voter" Benchmark
Jan 28, 2014

I am using voltdb open source edition, the voltdb cluster has five machines:

[TD="align: center"]No.
[TD="align: center"]OS
[TD="align: center"]CPU
[TD="align: center"]Cores
[TD="align: center"]Memory
[TD="align: center"]Net

1CentOS 6.2 X86_64AMD Opteron(tm) Processor 42262(cpu) X 6(core) = 12 cores32G1000Mbps
2CentOS 6.2 X86_64AMD Opteron(tm) Processor 61722(cpu) X 12(core) = 24 cores66G1000Mbps
3-5CentOS 6.2 X86_64Intel(R) Xeon(R) CPU L5320 @1.86GHz2(cpu) X 4(core) = 8 cores16G1000Mbps

all CPU information comes from /proc/cpuinfo.
I assume all machines are the same - 8 cores, 16G memory when configuring VoltDB.

benchmark program: examples/voter

Only one VoltDB client which runs on No. 2 machine

I modified the client's connection arguments in examples/voter/
function async-benchmark() {
java -classpath obj:$CLIENTCLASSPATH:obj -Dlog4j.configuration=file://$LOG4J \
voter.AsyncBenchmark \
--displayinterval=3 \
--warmup=5 \
--duration=300 \
--servers=host1:21212,host2:21212,host3:21212,host4:21212,host5:21212 \
--contestants=6 \
--maxvotes=2 \
--latencyreport=true \

to change hostcount/sitesperhost/kfactor in examples/voter/deployment.xml, when hostcount="5" sitesperhost="4" kfactor="1", i can get the best throughput and latency

Average throughput: 89,202 txns/sec
Average latency: 4.02 ms
10th percentile latency: 3 ms
25th percentile latency: 3 ms
50th percentile latency: 5 ms
75th percentile latency: 6 ms
90th percentile latency: 8 ms
95th percentile latency: 9 ms
99th percentile latency: 12 ms
99.5th percentile latency: 14 ms
99.9th percentile latency: 18 ms

when hostcount="5" sitesperhost="6" kfactor="1", the throughput and latency is very close to the above;

I have 4 questions:

1. Is the above testing result at what level ?
2. Is there an official benchmark?
3. In addition to changing sitesperhost/kfactor, there are other ways to tune VoltDB performance?
4. Do I need to tune OS/TCP, such as to enable TCP_NODELAY ?

Thanks in advance
Jan 29, 2014

Thank you for evaluating and trying out our product.

Here are answers to your question:

1. the measurements are done at the client level
2. I'll get back to you on what we consider official. We have tpcc benchmarks, but it really depends on what you are looking for. Can you tell us about your use case?
3. Please see our planning guide for how to plan and tune your database configuration
4. Please read the base platform considerations in the release notes, and the section on preparing servers in our admin guide

Feb 6, 2014

Thanks for your reply.

My first question isn't a good question.

We want to use VoltDB together with Storm, the procedure is similar to the "Voter" example.

We haven't used VoltDB before, before using VoltDB we have read all offical guides, but still have an issue how to evaluate our testing result - 90k TPS/s, we haven't data to compare it and don't know if we can do better under current conditions.
Feb 6, 2014

90k is set by the option you specified in the client --ratelimit=90000 you may want to omit it or give it a value of 1000000. Can storm handle async queries? Does storm generate its own queries, or can you tell it to use store procedures instead? If storm cannot handle async queries, than you may want to use the sync-benchmark instead. (./ sync-benchmark) you may want to tweak then, the number of threads to get an idea how much your configuration can handle transaction wise.

Feb 23, 2014

We have tried to set different rate limits, but the throughput and latency of 90k is the best.

We are implementing our own testing case using VoltDB and Storm, we encountered a problem: one stored procedure is only used for one VoltDB table, like this:
client.callProcedure(new checkingProcedureCallback(client, this.collector, input, ui), "SelectVoltProcedure", args);
the "SelectVoltProcedure" is defined on table "user", can only be used to select data from "user" table;
how to execute several SQL statements in different tables at once? sending several SQL statements to VoltDB servers together, and receiving results from VoltDB servers together
such as to send the following two SQL statements to VoltDB servers together:
select id from user where name = "abc";
select id from peer where name = "abc_peer";
expect the VoltDB response includes the id from table "user" and the id from table 'peer'