Merge pull request #269 from gyuho/all-cleanup

*: clean up and new test results
This commit is contained in:
Gyu-Ho Lee 2017-02-06 08:57:39 -08:00 committed by GitHub
commit 89eb8d31ad
137 changed files with 6769 additions and 7648 deletions

2
.gitignore vendored
View File

@ -1,2 +0,0 @@
# binary file
dbtester

534
README.md
View File

@ -32,73 +32,481 @@ All logs and results can be found at https://console.cloud.google.com/storage/br
```
+-----------------------------+-------------------+------------------------+-----------------------+
+----------------------------------------+-------------------+------------------------+-----------------------+
| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.3-go1.7.4 |
+-----------------------------+-------------------+------------------------+-----------------------+
| READS-COMPLETED-DELTA-SUM | 2 | 218 | 126 |
| SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
| WRITES-COMPLETED-DELTA-SUM | 1,217,752 | 955,419 | 2,183,202 |
| SECTORS-WRITTEN-DELTA-SUM | 702,780 | 11,846,404 | 3,991,232 |
| AVG-DATA-SIZE-ON-DISK | 2.5 GB | 7.4 GB | 3.1 GB |
| NETWORK-RECEIVE-DATA-SUM | 5.1 GB | 5.0 GB | 5.5 GB |
| NETWORK-TRANSMIT-DATA-SUM | 3.9 GB | 4.0 GB | 4.2 GB |
| MAX-CPU-USAGE | 451.00 % | 800.00 % | 409.33 % |
| MAX-MEMORY-USAGE | 1.3 GB | 3.7 GB | 4.7 GB |
| TOTAL-SECONDS | 324.5626 sec | 335.0999 sec | 667.9389 sec |
| MAX-THROUGHPUT | 36,479 req/sec | 41,799 req/sec | 15,969 req/sec |
| AVG-THROUGHPUT | 3,081 req/sec | 2,961 req/sec | 1,497 req/sec |
| MIN-THROUGHPUT | 79 req/sec | 0 req/sec | 49 req/sec |
| FASTEST-LATENCY | 1.0313 ms | 1.1256 ms | 2.9151 ms |
| AVG-LATENCY | 13.4807 ms | 25.5780 ms | 47.0926 ms |
| SLOWEST-LATENCY | 261.8235 ms | 4260.5699 ms | 22260.1112 ms |
| Latency p10 | 2.201212 ms | 2.528874 ms | 3.926152 ms |
| Latency p25 | 5.636563 ms | 3.821957 ms | 7.640734 ms |
| Latency p50 | 9.696159 ms | 6.656013 ms | 19.126381 ms |
| Latency p75 | 16.202583 ms | 11.576279 ms | 54.750630 ms |
| Latency p90 | 28.434395 ms | 14.472618 ms | 77.993718 ms |
| Latency p95 | 44.336815 ms | 16.786180 ms | 91.026490 ms |
| Latency p99 | 60.008762 ms | 479.797108 ms | 201.844359 ms |
| Latency p99.9 | 84.831886 ms | 2725.947720 ms | 1502.535463 ms |
| CLIENT-NETWORK-RECEIVE-SUM | 270 MB | 353 MB | 200 MB |
| CLIENT-NETWORK-TRANSMIT-SUM | 1.5 GB | 1.4 GB | 1.5 GB |
| CLIENT-MAX-CPU-USAGE | 577.00 % | 496.00 % | 210.00 % |
| CLIENT-MAX-MEMORY-USAGE | 355 MB | 3.3 GB | 227 MB |
| CLIENT-ERROR-COUNT | 0 | 7,495 | 0 |
+-----------------------------+-------------------+------------------------+-----------------------+
+----------------------------------------+-------------------+------------------------+-----------------------+
| TOTAL-SECONDS | 345.7743 sec | 320.9959 sec | 676.6576 sec |
| TOTAL-REQUEST-NUMBER | 1,000,000 | 1,000,000 | 1,000,000 |
| MAX-THROUGHPUT | 35,245 req/sec | 37,580 req/sec | 15,488 req/sec |
| AVG-THROUGHPUT | 2,892 req/sec | 3,108 req/sec | 1,477 req/sec |
| MIN-THROUGHPUT | 23 req/sec | 0 req/sec | 0 req/sec |
| FASTEST-LATENCY | 1.0942 ms | 0.9952 ms | 3.0193 ms |
| AVG-LATENCY | 14.0207 ms | 34.9720 ms | 44.3717 ms |
| SLOWEST-LATENCY | 101.5395 ms | 2334.6007 ms | 3475.2713 ms |
| Latency p10 | 2.308513 ms | 2.378813 ms | 3.971904 ms |
| Latency p25 | 5.879109 ms | 3.595997 ms | 7.811056 ms |
| Latency p50 | 10.100823 ms | 6.320842 ms | 20.224796 ms |
| Latency p75 | 17.160120 ms | 12.677824 ms | 56.790033 ms |
| Latency p90 | 28.890553 ms | 21.506040 ms | 89.507900 ms |
| Latency p95 | 44.861387 ms | 30.713207 ms | 106.807611 ms |
| Latency p99 | 62.570152 ms | 1186.951737 ms | 301.241777 ms |
| Latency p99.9 | 87.467729 ms | 2241.127019 ms | 2634.872172 ms |
| SERVER-TOTAL-NETWORK-RECEIVE-DATA-SUM | 5.1 GB | 5.4 GB | 5.5 GB |
| SERVER-TOTAL-NETWORK-TRANSMIT-DATA-SUM | 3.9 GB | 4.4 GB | 4.3 GB |
| CLIENT-TOTAL-NETWORK-RECEIVE-SUM | 271 MB | 356 MB | 202 MB |
| CLIENT-TOTAL-NETWORK-TRANSMIT-SUM | 1.5 GB | 1.4 GB | 1.5 GB |
| SERVER-MAX-CPU-USAGE | 449.90 % | 558.97 % | 421.60 % |
| SERVER-MAX-MEMORY-USAGE | 1.4 GB | 3.9 GB | 4.8 GB |
| CLIENT-MAX-CPU-USAGE | 552.00 % | 617.80 % | 224.00 % |
| CLIENT-MAX-MEMORY-USAGE | 361 MB | 4.4 GB | 225 MB |
| CLIENT-ERROR-COUNT | 0 | 2,093 | 0 |
| SERVER-AVG-READS-COMPLETED-DELTA-SUM | 3 | 221 | 11 |
| SERVER-AVG-SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
| SERVER-AVG-WRITES-COMPLETED-DELTA-SUM | 1,222,851 | 960,275 | 2,333,199 |
| SERVER-AVG-SECTORS-WRITTEN-DELTA-SUM | 739,936 | 12,769,072 | 4,013,148 |
| SERVER-AVG-DATA-SIZE-ON-DISK | 2.4 GB | 8.8 GB | 3.0 GB |
+----------------------------------------+-------------------+------------------------+-----------------------+
zookeeper errors:
"zk: connection closed" (count 1,747)
"zk: could not connect to a server" (count 346)
```
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.svg" alt="2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY.svg" alt="2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg" alt="2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.svg" alt="2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.svg" alt="2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.svg" alt="2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY.svg" alt="2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg" alt="2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA">
<br><br><hr>
##### Write 1M keys, 256-byte key, 1KB value, Best Throughput (etcd 700, Zookeeper 300, Consul 500 clients)
- Google Cloud Compute Engine
- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- Ubuntu 16.10
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.3 (Go 1.7.4)
```
+----------------------------------------+-------------------+------------------------+-----------------------+
| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.3-go1.7.4 |
+----------------------------------------+-------------------+------------------------+-----------------------+
| TOTAL-SECONDS | 37.4731 sec | 63.8379 sec | 309.0797 sec |
| TOTAL-REQUEST-NUMBER | 1,000,000 | 1,000,000 | 1,000,000 |
| MAX-THROUGHPUT | 32,555 req/sec | 38,537 req/sec | 16,919 req/sec |
| AVG-THROUGHPUT | 26,685 req/sec | 15,656 req/sec | 3,235 req/sec |
| MIN-THROUGHPUT | 15,350 req/sec | 0 req/sec | 0 req/sec |
| FASTEST-LATENCY | 4.5030 ms | 2.3895 ms | 14.5025 ms |
| AVG-LATENCY | 26.1688 ms | 17.9204 ms | 154.4720 ms |
| SLOWEST-LATENCY | 205.8298 ms | 3471.7581 ms | 21463.6662 ms |
| Latency p10 | 10.580892 ms | 5.948893 ms | 29.430795 ms |
| Latency p25 | 12.626734 ms | 6.817741 ms | 34.096243 ms |
| Latency p50 | 18.452075 ms | 7.718642 ms | 42.522161 ms |
| Latency p75 | 26.930691 ms | 8.659562 ms | 63.027422 ms |
| Latency p90 | 49.843748 ms | 9.750484 ms | 263.017095 ms |
| Latency p95 | 67.991988 ms | 10.757740 ms | 601.571541 ms |
| Latency p99 | 135.153213 ms | 114.903303 ms | 1237.545701 ms |
| Latency p99.9 | 160.393852 ms | 2248.915050 ms | 11496.380241 ms |
| SERVER-TOTAL-NETWORK-RECEIVE-DATA-SUM | 4.9 GB | 5.4 GB | 14 GB |
| SERVER-TOTAL-NETWORK-TRANSMIT-DATA-SUM | 3.8 GB | 4.3 GB | 12 GB |
| CLIENT-TOTAL-NETWORK-RECEIVE-SUM | 274 MB | 351 MB | 211 MB |
| CLIENT-TOTAL-NETWORK-TRANSMIT-SUM | 1.4 GB | 1.4 GB | 1.5 GB |
| SERVER-MAX-CPU-USAGE | 416.67 % | 710.17 % | 410.67 % |
| SERVER-MAX-MEMORY-USAGE | 1.2 GB | 4.6 GB | 5.9 GB |
| CLIENT-MAX-CPU-USAGE | 448.00 % | 365.00 % | 223.00 % |
| CLIENT-MAX-MEMORY-USAGE | 219 MB | 1.9 GB | 90 MB |
| CLIENT-ERROR-COUNT | 0 | 509 | 0 |
| SERVER-AVG-READS-COMPLETED-DELTA-SUM | 3 | 253 | 162 |
| SERVER-AVG-SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
| SERVER-AVG-WRITES-COMPLETED-DELTA-SUM | 110,436 | 101,558 | 665,193 |
| SERVER-AVG-SECTORS-WRITTEN-DELTA-SUM | 371,988 | 9,306,936 | 37,002,460 |
| SERVER-AVG-DATA-SIZE-ON-DISK | 2.8 GB | 7.1 GB | 2.9 GB |
+----------------------------------------+-------------------+------------------------+-----------------------+
zookeeper errors:
"zk: could not connect to a server" (count 208)
"zk: connection closed" (count 301)
```
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS.svg" alt="2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY.svg" alt="2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg" alt="2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-THROUGHPUT.svg" alt="2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-THROUGHPUT">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-NON-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-CPU.svg" alt="2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-CPU">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB.svg" alt="2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY.svg" alt="2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg" alt="2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-READS-COMPLETED-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-READS-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-READ-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-READ-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-WRITES-COMPLETED-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-WRITES-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-WRITTEN-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-WRITTEN-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-RECEIVE-BYTES-NUM-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-RECEIVE-BYTES-NUM-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-TRANSMIT-BYTES-NUM-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-TRANSMIT-BYTES-NUM-DELTA">
<br><br><hr>
##### Write 1M keys, 256-byte key, 1KB value, 1,000 client
- Google Cloud Compute Engine
- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- Ubuntu 16.10
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.3 (Go 1.7.4)
```
+----------------------------------------+-------------------+------------------------+-----------------------+
| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.3-go1.7.4 |
+----------------------------------------+-------------------+------------------------+-----------------------+
| TOTAL-SECONDS | 36.5547 sec | 59.5935 sec | 244.8620 sec |
| TOTAL-REQUEST-NUMBER | 1,000,000 | 1,000,000 | 1,000,000 |
| MAX-THROUGHPUT | 35,025 req/sec | 47,693 req/sec | 15,146 req/sec |
| AVG-THROUGHPUT | 27,356 req/sec | 16,697 req/sec | 4,083 req/sec |
| MIN-THROUGHPUT | 228 req/sec | 0 req/sec | 0 req/sec |
| FASTEST-LATENCY | 4.1857 ms | 1.4036 ms | 27.1684 ms |
| AVG-LATENCY | 36.4506 ms | 46.1962 ms | 244.4663 ms |
| SLOWEST-LATENCY | 233.1590 ms | 6787.1829 ms | 30479.0204 ms |
| Latency p10 | 14.321495 ms | 12.447591 ms | 66.233418 ms |
| Latency p25 | 17.784730 ms | 16.822188 ms | 74.271576 ms |
| Latency p50 | 23.783217 ms | 20.026128 ms | 92.736772 ms |
| Latency p75 | 44.930445 ms | 23.615952 ms | 151.332505 ms |
| Latency p90 | 67.957086 ms | 31.726640 ms | 338.858136 ms |
| Latency p95 | 121.316986 ms | 78.842487 ms | 696.780894 ms |
| Latency p99 | 163.614045 ms | 821.197693 ms | 1887.708027 ms |
| Latency p99.9 | 187.122508 ms | 2709.006521 ms | 20942.858889 ms |
| SERVER-TOTAL-NETWORK-RECEIVE-DATA-SUM | 5.0 GB | 5.3 GB | 6.6 GB |
| SERVER-TOTAL-NETWORK-TRANSMIT-DATA-SUM | 3.9 GB | 4.2 GB | 5.4 GB |
| CLIENT-TOTAL-NETWORK-RECEIVE-SUM | 282 MB | 357 MB | 243 MB |
| CLIENT-TOTAL-NETWORK-TRANSMIT-SUM | 1.4 GB | 1.4 GB | 1.5 GB |
| SERVER-MAX-CPU-USAGE | 451.00 % | 723.67 % | 436.67 % |
| SERVER-MAX-MEMORY-USAGE | 1.2 GB | 4.7 GB | 4.9 GB |
| CLIENT-MAX-CPU-USAGE | 554.00 % | 1227.00 % | 218.00 % |
| CLIENT-MAX-MEMORY-USAGE | 264 MB | 5.5 GB | 114 MB |
| CLIENT-ERROR-COUNT | 0 | 4,962 | 0 |
| SERVER-AVG-READS-COMPLETED-DELTA-SUM | 74 | 315 | 102 |
| SERVER-AVG-SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
| SERVER-AVG-WRITES-COMPLETED-DELTA-SUM | 100,644 | 82,186 | 481,109 |
| SERVER-AVG-SECTORS-WRITTEN-DELTA-SUM | 442,860 | 8,179,180 | 20,434,060 |
| SERVER-AVG-DATA-SIZE-ON-DISK | 2.7 GB | 7.3 GB | 3.0 GB |
+----------------------------------------+-------------------+------------------------+-----------------------+
zookeeper errors:
"zk: could not connect to a server" (count 3,301)
"zk: connection closed" (count 1,661)
```
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS.svg" alt="2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY.svg" alt="2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg" alt="2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-THROUGHPUT.svg" alt="2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-THROUGHPUT">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-NON-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-CPU.svg" alt="2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-CPU">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB.svg" alt="2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY.svg" alt="2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg" alt="2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-READS-COMPLETED-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-READS-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-READ-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-READ-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-WRITES-COMPLETED-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-WRITES-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-WRITTEN-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-WRITTEN-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-RECEIVE-BYTES-NUM-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-RECEIVE-BYTES-NUM-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-TRANSMIT-BYTES-NUM-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-TRANSMIT-BYTES-NUM-DELTA">
<br><br><hr>
##### Write 3-million keys, 256-byte key, 1KB value, Best Throughput (etcd 700, Zookeeper 300, Consul 500 clients)
- Google Cloud Compute Engine
- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- Ubuntu 16.10
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.3 (Go 1.7.4)
```
+----------------------------------------+-------------------+------------------------+-----------------------+
| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.3-go1.7.4 |
+----------------------------------------+-------------------+------------------------+-----------------------+
| TOTAL-SECONDS | 141.1728 sec | 4134.1565 sec | 2979.6229 sec |
| TOTAL-REQUEST-NUMBER | 3,000,000 | 3,000,000 | 3,000,000 |
| MAX-THROUGHPUT | 32,215 req/sec | 38,259 req/sec | 15,784 req/sec |
| AVG-THROUGHPUT | 21,250 req/sec | 465 req/sec | 1,006 req/sec |
| MIN-THROUGHPUT | 9,081 req/sec | 0 req/sec | 0 req/sec |
| FASTEST-LATENCY | 3.6479 ms | 1.8912 ms | 10.3322 ms |
| AVG-LATENCY | 32.9036 ms | 28.5018 ms | 496.5874 ms |
| SLOWEST-LATENCY | 1030.3392 ms | 4729.8104 ms | 34484.1252 ms |
| Latency p10 | 10.882650 ms | 5.694308 ms | 35.045139 ms |
| Latency p25 | 13.005974 ms | 6.357600 ms | 44.711879 ms |
| Latency p50 | 18.743999 ms | 7.379354 ms | 66.739638 ms |
| Latency p75 | 31.054943 ms | 8.886502 ms | 116.150396 ms |
| Latency p90 | 96.027241 ms | 11.474394 ms | 540.305996 ms |
| Latency p95 | 123.844111 ms | 14.391699 ms | 1209.603980 ms |
| Latency p99 | 148.837786 ms | 722.847010 ms | 11957.052613 ms |
| Latency p99.9 | 162.994644 ms | 2457.522611 ms | 26068.610794 ms |
| SERVER-TOTAL-NETWORK-RECEIVE-DATA-SUM | 15 GB | 26 GB | 102 GB |
| SERVER-TOTAL-NETWORK-TRANSMIT-DATA-SUM | 12 GB | 24 GB | 98 GB |
| CLIENT-TOTAL-NETWORK-RECEIVE-SUM | 832 MB | 978 MB | 688 MB |
| CLIENT-TOTAL-NETWORK-TRANSMIT-SUM | 4.3 GB | 3.3 GB | 4.4 GB |
| SERVER-MAX-CPU-USAGE | 421.00 % | 752.33 % | 410.67 % |
| SERVER-MAX-MEMORY-USAGE | 2.8 GB | 7.1 GB | 17 GB |
| CLIENT-MAX-CPU-USAGE | 442.00 % | 376.00 % | 217.00 % |
| CLIENT-MAX-MEMORY-USAGE | 265 MB | 1.9 GB | 174 MB |
| CLIENT-ERROR-COUNT | 0 | 1,076,632 | 0 |
| SERVER-AVG-READS-COMPLETED-DELTA-SUM | 14 | 309 | 94,864 |
| SERVER-AVG-SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
| SERVER-AVG-WRITES-COMPLETED-DELTA-SUM | 333,196 | 360,314 | 3,689,221 |
| SERVER-AVG-SECTORS-WRITTEN-DELTA-SUM | 1,604,172 | 67,295,610 | 794,919,246 |
| SERVER-AVG-DATA-SIZE-ON-DISK | 6.5 GB | 27 GB | 8.2 GB |
+----------------------------------------+-------------------+------------------------+-----------------------+
zookeeper errors:
"zk: connection closed" (count 6,678)
"zk: could not connect to a server" (count 1,069,954)
```
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS.svg" alt="2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY.svg" alt="2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg" alt="2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-THROUGHPUT.svg" alt="2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-THROUGHPUT">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-CPU.svg" alt="2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-CPU">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB.svg" alt="2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY.svg" alt="2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg" alt="2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-READS-COMPLETED-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-READS-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-READ-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-READ-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-WRITES-COMPLETED-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-WRITES-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-WRITTEN-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-WRITTEN-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-RECEIVE-BYTES-NUM-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg" alt="2017Q1-00-etcd-zookeeper-consul/04-write-too-many-keys/AVG-TRANSMIT-BYTES-NUM-DELTA">

View File

@ -26,7 +26,7 @@ func startCetcd(fs *flags, t *transporterServer) error {
return fmt.Errorf("cetcd binary %q does not exist", globalFlags.cetcdExec)
}
peerIPs := strings.Split(t.req.PeerIPString, "___")
peerIPs := strings.Split(t.req.PeerIPsString, "___")
clientURLs := make([]string, len(peerIPs))
for i, u := range peerIPs {
clientURLs[i] = fmt.Sprintf("http://%s:2379", u)
@ -34,8 +34,8 @@ func startCetcd(fs *flags, t *transporterServer) error {
flags := []string{
// "-consuladdr", "0.0.0.0:8500",
"-consuladdr", fmt.Sprintf("%s:8500", peerIPs[t.req.ServerIndex]),
"-etcd", clientURLs[t.req.ServerIndex], // etcd endpoint
"-consuladdr", fmt.Sprintf("%s:8500", peerIPs[t.req.IpIndex]),
"-etcd", clientURLs[t.req.IpIndex], // etcd endpoint
}
flagString := strings.Join(flags, " ")

View File

@ -31,17 +31,17 @@ func startConsul(fs *flags, t *transporterServer) error {
return err
}
peerIPs := strings.Split(t.req.PeerIPString, "___")
peerIPs := strings.Split(t.req.PeerIPsString, "___")
var flags []string
switch t.req.ServerIndex {
switch t.req.IpIndex {
case 0: // leader
flags = []string{
"agent",
"-server",
"-data-dir", fs.consulDataDir,
"-bind", peerIPs[t.req.ServerIndex],
"-client", peerIPs[t.req.ServerIndex],
"-bind", peerIPs[t.req.IpIndex],
"-client", peerIPs[t.req.IpIndex],
"-bootstrap-expect", "3",
}
@ -50,8 +50,8 @@ func startConsul(fs *flags, t *transporterServer) error {
"agent",
"-server",
"-data-dir", fs.consulDataDir,
"-bind", peerIPs[t.req.ServerIndex],
"-client", peerIPs[t.req.ServerIndex],
"-bind", peerIPs[t.req.IpIndex],
"-client", peerIPs[t.req.IpIndex],
"-join", peerIPs[0],
}
}

View File

@ -31,7 +31,7 @@ func startEtcd(fs *flags, t *transporterServer) error {
return err
}
peerIPs := strings.Split(t.req.PeerIPString, "___")
peerIPs := strings.Split(t.req.PeerIPsString, "___")
names := make([]string, len(peerIPs))
clientURLs := make([]string, len(peerIPs))
@ -44,23 +44,23 @@ func startEtcd(fs *flags, t *transporterServer) error {
members[i] = fmt.Sprintf("%s=%s", names[i], peerURLs[i])
}
qv := t.req.EtcdQuotaSizeBytes
qv := t.req.Etcdv3Config.QuotaSizeBytes
if qv > 8000000000 {
plog.Warningf("maximum etcd quota is 8GB (got %d)... resetting to 8GB...", qv)
qv = 8000000000
}
flags := []string{
"--name", names[t.req.ServerIndex],
"--name", names[t.req.IpIndex],
"--data-dir", fs.etcdDataDir,
"--quota-backend-bytes", fmt.Sprintf("%d", qv),
"--snapshot-count", fmt.Sprintf("%d", t.req.EtcdSnapCount),
"--snapshot-count", fmt.Sprintf("%d", t.req.Etcdv3Config.SnapCount),
"--listen-client-urls", clientURLs[t.req.ServerIndex],
"--advertise-client-urls", clientURLs[t.req.ServerIndex],
"--listen-client-urls", clientURLs[t.req.IpIndex],
"--advertise-client-urls", clientURLs[t.req.IpIndex],
"--listen-peer-urls", peerURLs[t.req.ServerIndex],
"--initial-advertise-peer-urls", peerURLs[t.req.ServerIndex],
"--listen-peer-urls", peerURLs[t.req.IpIndex],
"--initial-advertise-peer-urls", peerURLs[t.req.IpIndex],
"--initial-cluster-token", "dbtester-etcd-token",
"--initial-cluster", strings.Join(members, ","),

View File

@ -26,7 +26,7 @@ func startZetcd(fs *flags, t *transporterServer) error {
return fmt.Errorf("zetcd binary %q does not exist", globalFlags.zetcdExec)
}
peerIPs := strings.Split(t.req.PeerIPString, "___")
peerIPs := strings.Split(t.req.PeerIPsString, "___")
clientURLs := make([]string, len(peerIPs))
for i, u := range peerIPs {
clientURLs[i] = fmt.Sprintf("http://%s:2379", u)
@ -34,8 +34,8 @@ func startZetcd(fs *flags, t *transporterServer) error {
flags := []string{
// "-zkaddr", "0.0.0.0:2181",
"-zkaddr", fmt.Sprintf("%s:2181", peerIPs[t.req.ServerIndex]),
"-endpoint", clientURLs[t.req.ServerIndex],
"-zkaddr", fmt.Sprintf("%s:2181", peerIPs[t.req.IpIndex]),
"-endpoint", clientURLs[t.req.IpIndex],
}
flagString := strings.Join(flags, " ")

View File

@ -30,47 +30,32 @@ dataDir={{.DataDir}}
clientPort={{.ClientPort}}
initLimit={{.InitLimit}}
syncLimit={{.SyncLimit}}
maxClientCnxns={{.MaxClientCnxns}}
maxClientCnxns={{.MaxClientConnections}}
snapCount={{.SnapCount}}
{{range .Peers}}server.{{.MyID}}={{.IP}}:2888:3888
{{end}}
`
// this is Zookeeper default configuration
// http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
zkConfigDefault = ZookeeperConfig{
TickTime: 2000,
ClientPort: "2181",
InitLimit: 5,
SyncLimit: 5,
MaxClientCnxns: 60,
Peers: []ZookeeperPeer{
{MyID: 1, IP: ""},
{MyID: 2, IP: ""},
{MyID: 3, IP: ""},
},
}
)
// ZookeeperConfig is zookeeper configuration.
// http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
type ZookeeperConfig struct {
TickTime int64
DataDir string
ClientPort int64
InitLimit int64
SyncLimit int64
MaxClientConnections int64
SnapCount int64
Peers []ZookeeperPeer
}
// ZookeeperPeer defines Zookeeper peer configuration.
type ZookeeperPeer struct {
MyID int
IP string
}
// ZookeeperConfig is zookeeper configuration.
// http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
type ZookeeperConfig struct {
TickTime int
DataDir string
ClientPort string
InitLimit int
SyncLimit int
MaxClientCnxns int64
SnapCount int64
Peers []ZookeeperPeer
}
var shell = os.Getenv("SHELL")
func init() {
@ -99,23 +84,26 @@ func startZookeeper(fs *flags, t *transporterServer) error {
}
ipath := filepath.Join(fs.zkDataDir, "myid")
plog.Infof("writing Zookeeper myid file %d to %s", t.req.ZookeeperMyID, ipath)
if err := toFile(fmt.Sprintf("%d", t.req.ZookeeperMyID), ipath); err != nil {
plog.Infof("writing Zookeeper myid file %d to %s", t.req.ZookeeperConfig.MyID, ipath)
if err := toFile(fmt.Sprintf("%d", t.req.ZookeeperConfig.MyID), ipath); err != nil {
return err
}
peerIPs := strings.Split(t.req.PeerIPString, "___")
peerIPs := strings.Split(t.req.PeerIPsString, "___")
peers := []ZookeeperPeer{}
for i := range peerIPs {
peers = append(peers, ZookeeperPeer{MyID: i + 1, IP: peerIPs[i]})
}
cfg := zkConfigDefault
cfg.DataDir = fs.zkDataDir
cfg.Peers = peers
cfg.SnapCount = t.req.ZookeeperSnapCount
cfg.MaxClientCnxns = t.req.ZookeeperMaxClientCnxns
cfg := ZookeeperConfig{
TickTime: t.req.ZookeeperConfig.TickTime,
DataDir: fs.zkDataDir,
ClientPort: t.req.ZookeeperConfig.ClientPort,
InitLimit: t.req.ZookeeperConfig.InitLimit,
SyncLimit: t.req.ZookeeperConfig.SyncLimit,
MaxClientConnections: t.req.ZookeeperConfig.MaxClientConnections,
Peers: peers,
SnapCount: t.req.ZookeeperConfig.SnapCount,
}
tpl := template.Must(template.New("zkTemplate").Parse(zkTemplate))
buf := new(bytes.Buffer)
if err := tpl.Execute(buf, cfg); err != nil {

File diff suppressed because it is too large Load Diff

View File

@ -1,86 +0,0 @@
syntax = "proto3";
package agentpb;
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
option (gogoproto.marshaler_all) = true;
option (gogoproto.sizer_all) = true;
option (gogoproto.unmarshaler_all) = true;
option (gogoproto.goproto_getters_all) = false;
service Transporter {
rpc Transfer(Request) returns (Response) {}
}
message Request {
enum Operation {
Start = 0;
Stop = 1;
Heartbeat = 2;
}
enum Database {
etcdv2 = 0;
etcdv3 = 1;
ZooKeeper = 2;
Consul = 3;
zetcd = 4;
cetcd = 5;
}
Operation operation = 1;
Database database = 2;
string peerIPString = 3;
// ServerIPIndex is the index in peerIPs that points to the
// corresponding remote IP.
uint32 serverIndex = 4;
// TestName prefixes all logs to be generated in agent.
string testName = 5;
// ZookeeperMyID is myid that needs to be stored as a file in the remote machine.
uint32 zookeeperMyID = 6;
// EtcdSnapCount is 100,000 by default.
int64 etcdSnapCount = 7;
// EtcdQuotaSizeBytes is the backend size limit in bytes.
// 0 defaults to low space quota (2 GB).
int64 etcdQuotaSizeBytes = 8;
// ZookeeperSnapCount is 100,000 by default.
int64 zookeeperSnapCount = 9;
// ZookeeperMaxClientCnxns limits the number of concurrent connections
// (at the socket level) that a single client, identified by IP address.
int64 zookeeperMaxClientCnxns = 10;
// ClientNum is current number of clients.
int64 clientNum = 11;
// UploadLogs is true if automatic log-uploading is needed.
// Currently only support Google Cloud Storage.
bool uploadLogs = 100;
// GoogleCloudProjectName is the project name to use
// to upload logs.
string googleCloudProjectName = 101;
// GoogleCloudStorageKey is the key to be used to upload
// data and logs to Google Cloud Storage and others.
string googleCloudStorageKey = 102;
// GoogleCloudStorageBucketName is the bucket name to store all data and logs.
string googleCloudStorageBucketName = 103;
// GoogleCloudStorageSubDirectory is the sub-directory name to store data.
string googleCloudStorageSubDirectory = 104;
}
message Response {
bool success = 1;
// Datasize is the data size of the database on disk.
// It measures after database is requested to stop.
int64 datasize = 2;
}

View File

@ -19,7 +19,7 @@ import (
"os"
"path/filepath"
"github.com/coreos/dbtester/agent/agentpb"
"github.com/coreos/dbtester/dbtesterpb"
"github.com/coreos/dbtester/pkg/netutil"
"github.com/coreos/dbtester/pkg/ntp"
"github.com/coreos/pkg/capnslog"
@ -71,8 +71,8 @@ func init() {
Command.PersistentFlags().StringVar(&globalFlags.agentLog, "agent-log", filepath.Join(homeDir(), "agent.log"), "agent log path.")
Command.PersistentFlags().StringVar(&globalFlags.databaseLog, "database-log", filepath.Join(homeDir(), "database.log"), "Database log path.")
Command.PersistentFlags().StringVar(&globalFlags.systemMetricsCSV, "system-metrics-csv", filepath.Join(homeDir(), "system-metrics.csv"), "Raw system metrics data path.")
Command.PersistentFlags().StringVar(&globalFlags.systemMetricsCSVInterpolated, "system-metrics-csv-interpolated", filepath.Join(homeDir(), "system-metrics-interpolated.csv"), "Interpolated system metrics data path.")
Command.PersistentFlags().StringVar(&globalFlags.systemMetricsCSV, "system-metrics-csv", filepath.Join(homeDir(), "server-system-metrics.csv"), "Raw system metrics data path.")
Command.PersistentFlags().StringVar(&globalFlags.systemMetricsCSVInterpolated, "system-metrics-csv-interpolated", filepath.Join(homeDir(), "server-system-metrics-interpolated.csv"), "Interpolated system metrics data path.")
Command.PersistentFlags().StringVar(&globalFlags.javaExec, "java-exec", "/usr/bin/java", "Java executable binary path (needed for Zookeeper).")
Command.PersistentFlags().StringVar(&globalFlags.etcdExec, "etcd-exec", filepath.Join(os.Getenv("GOPATH"), "bin/etcd"), "etcd executable binary path.")
@ -95,7 +95,7 @@ func init() {
// Command implements 'agent' command.
var Command = &cobra.Command{
Use: "agent",
Short: "Database 'agent' in remote servers (runs database, upload logs).",
Short: "Database 'agent' in remote servers.",
RunE: commandFunc,
}
@ -119,7 +119,7 @@ func commandFunc(cmd *cobra.Command, args []string) error {
if err != nil {
return err
}
agentpb.RegisterTransporterServer(grpcServer, sender)
dbtesterpb.RegisterTransporterServer(grpcServer, sender)
plog.Infof("agent started with gRPC %s (log path %q)", globalFlags.grpcPort, globalFlags.agentLog)
return grpcServer.Serve(ln)

View File

@ -22,15 +22,15 @@ import (
"syscall"
"time"
"github.com/coreos/dbtester/agent/agentpb"
"github.com/coreos/dbtester/dbtesterpb"
"github.com/coreos/dbtester/pkg/fileinspect"
"github.com/gyuho/psn"
"golang.org/x/net/context"
)
// implements agentpb.TransporterServer
// implements dbtesterpb.TransporterServer
type transporterServer struct {
req agentpb.Request
req dbtesterpb.Request
databaseLogFile *os.File
proxyDatabaseLogfile *os.File
@ -61,7 +61,7 @@ type transporterServer struct {
}
// NewServer returns a new server that implements gRPC interface.
func NewServer() agentpb.TransporterServer {
func NewServer() dbtesterpb.TransporterServer {
notifier := make(chan os.Signal, 1)
signal.Notify(notifier, syscall.SIGINT, syscall.SIGTERM)
@ -73,12 +73,12 @@ func NewServer() agentpb.TransporterServer {
}
}
func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*agentpb.Response, error) {
if r != nil {
plog.Infof("received gRPC request %q with database %q (clients: %d)", r.Operation, r.Database, r.ClientNum)
func (t *transporterServer) Transfer(ctx context.Context, req *dbtesterpb.Request) (*dbtesterpb.Response, error) {
if req != nil {
plog.Infof("received gRPC request %q with database %q (clients: %d)", req.Operation, req.DatabaseID, req.CurrentClientNumber)
}
if r.Operation == agentpb.Request_Start {
if req.Operation == dbtesterpb.Request_Start {
f, err := openToAppend(globalFlags.databaseLog)
if err != nil {
return nil, err
@ -87,8 +87,8 @@ func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*
plog.Infof("agent log path: %q", globalFlags.agentLog)
plog.Infof("database log path: %q", globalFlags.databaseLog)
if r.Database == agentpb.Request_zetcd || r.Database == agentpb.Request_cetcd {
proxyLog := globalFlags.databaseLog + "-" + t.req.Database.String()
if req.DatabaseID == dbtesterpb.Request_zetcd || req.DatabaseID == dbtesterpb.Request_cetcd {
proxyLog := globalFlags.databaseLog + "-" + t.req.DatabaseID.String()
pf, err := openToAppend(proxyLog)
if err != nil {
return nil, err
@ -98,47 +98,47 @@ func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*
}
plog.Infof("system metrics CSV path: %q", globalFlags.systemMetricsCSV)
switch r.Database {
case agentpb.Request_ZooKeeper:
switch req.DatabaseID {
case dbtesterpb.Request_zookeeper:
plog.Infof("Zookeeper working directory: %q", globalFlags.zkWorkDir)
plog.Infof("Zookeeper data directory: %q", globalFlags.zkDataDir)
plog.Infof("Zookeeper configuration path: %q", globalFlags.zkConfig)
case agentpb.Request_etcdv2, agentpb.Request_etcdv3:
case dbtesterpb.Request_etcdv2, dbtesterpb.Request_etcdv3:
plog.Infof("etcd executable binary path: %q", globalFlags.etcdExec)
plog.Infof("etcd data directory: %q", globalFlags.etcdDataDir)
case agentpb.Request_zetcd:
case dbtesterpb.Request_zetcd:
plog.Infof("zetcd executable binary path: %q", globalFlags.zetcdExec)
plog.Infof("zetcd data directory: %q", globalFlags.etcdDataDir)
case agentpb.Request_cetcd:
case dbtesterpb.Request_cetcd:
plog.Infof("cetcd executable binary path: %q", globalFlags.cetcdExec)
plog.Infof("cetcd data directory: %q", globalFlags.etcdDataDir)
case agentpb.Request_Consul:
case dbtesterpb.Request_consul:
plog.Infof("Consul executable binary path: %q", globalFlags.consulExec)
plog.Infof("Consul data directory: %q", globalFlags.consulDataDir)
}
// re-use configurations for next requests
t.req = *r
t.req = *req
}
if r.Operation == agentpb.Request_Heartbeat {
t.req.ClientNum = r.ClientNum
if req.Operation == dbtesterpb.Request_Heartbeat {
t.req.CurrentClientNumber = req.CurrentClientNumber
}
var totalDatasize int64
switch r.Operation {
case agentpb.Request_Start:
switch t.req.Database {
case agentpb.Request_etcdv2, agentpb.Request_etcdv3, agentpb.Request_zetcd, agentpb.Request_cetcd:
switch req.Operation {
case dbtesterpb.Request_Start:
switch t.req.DatabaseID {
case dbtesterpb.Request_etcdv2, dbtesterpb.Request_etcdv3, dbtesterpb.Request_zetcd, dbtesterpb.Request_cetcd:
if err := startEtcd(&globalFlags, t); err != nil {
plog.Errorf("startEtcd error %v", err)
return nil, err
}
switch t.req.Database {
case agentpb.Request_zetcd:
switch t.req.DatabaseID {
case dbtesterpb.Request_zetcd:
if err := startZetcd(&globalFlags, t); err != nil {
plog.Errorf("startZetcd error %v", err)
return nil, err
@ -151,7 +151,7 @@ func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*
}
plog.Infof("exiting %q", t.proxyCmd.Path)
}()
case agentpb.Request_cetcd:
case dbtesterpb.Request_cetcd:
if err := startCetcd(&globalFlags, t); err != nil {
plog.Errorf("startCetcd error %v", err)
return nil, err
@ -165,18 +165,18 @@ func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*
plog.Infof("exiting %q", t.proxyCmd.Path)
}()
}
case agentpb.Request_ZooKeeper:
case dbtesterpb.Request_zookeeper:
if err := startZookeeper(&globalFlags, t); err != nil {
plog.Errorf("startZookeeper error %v", err)
return nil, err
}
case agentpb.Request_Consul:
case dbtesterpb.Request_consul:
if err := startConsul(&globalFlags, t); err != nil {
plog.Errorf("startConsul error %v", err)
return nil, err
}
default:
return nil, fmt.Errorf("unknown database %q", t.req.Database)
return nil, fmt.Errorf("unknown database %q", t.req.DatabaseID)
}
go func() {
@ -193,7 +193,7 @@ func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*
return nil, err
}
case agentpb.Request_Stop:
case dbtesterpb.Request_Stop:
if t.cmd == nil {
return nil, fmt.Errorf("nil command")
}
@ -216,7 +216,7 @@ func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*
t.databaseLogFile.Sync()
t.databaseLogFile.Close()
}
plog.Infof("stopped binary %q [PID: %d]", t.req.Database.String(), t.pid)
plog.Infof("stopped binary %q [PID: %d]", t.req.DatabaseID.String(), t.pid)
if t.proxyCmd != nil {
plog.Infof("sending %q to %q [PID: %d]", syscall.SIGINT, t.proxyCmd.Path, t.proxyPid)
@ -229,7 +229,7 @@ func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*
plog.Warningf("syscall.Kill failed with %v", err)
}
<-t.proxyCmdWait
plog.Infof("stopped binary proxy for %q [PID: %d]", t.req.Database.String(), t.pid)
plog.Infof("stopped binary proxy for %q [PID: %d]", t.req.DatabaseID.String(), t.pid)
}
if t.proxyDatabaseLogfile != nil {
t.proxyDatabaseLogfile.Sync()
@ -239,47 +239,47 @@ func (t *transporterServer) Transfer(ctx context.Context, r *agentpb.Request) (*
t.uploadSig <- struct{}{}
<-t.csvReady
if t.req.UploadLogs {
if t.req.TriggerLogUpload {
if err := uploadLog(&globalFlags, t); err != nil {
plog.Warningf("uploadLog error %v", err)
return nil, err
}
}
dbs, err := measureDatabasSize(globalFlags, r.Database)
dbs, err := measureDatabasSize(globalFlags, req.DatabaseID)
if err != nil {
plog.Warningf("measureDatabasSize error %v", err)
return nil, err
}
totalDatasize = dbs
case agentpb.Request_Heartbeat:
plog.Infof("overwriting clients num %d to %q", t.req.ClientNum, t.clientNumPath)
if err := toFile(fmt.Sprintf("%d", t.req.ClientNum), t.clientNumPath); err != nil {
case dbtesterpb.Request_Heartbeat:
plog.Infof("overwriting clients num %d to %q", t.req.CurrentClientNumber, t.clientNumPath)
if err := toFile(fmt.Sprintf("%d", t.req.CurrentClientNumber), t.clientNumPath); err != nil {
return nil, err
}
default:
return nil, fmt.Errorf("Not implemented %v", r.Operation)
return nil, fmt.Errorf("Not implemented %v", req.Operation)
}
plog.Info("Transfer success!")
return &agentpb.Response{Success: true, Datasize: totalDatasize}, nil
return &dbtesterpb.Response{Success: true, DatasizeOnDisk: totalDatasize}, nil
}
func measureDatabasSize(flg flags, rdb agentpb.Request_Database) (int64, error) {
func measureDatabasSize(flg flags, rdb dbtesterpb.Request_Database) (int64, error) {
switch rdb {
case agentpb.Request_etcdv2:
case dbtesterpb.Request_etcdv2:
return fileinspect.Size(flg.etcdDataDir)
case agentpb.Request_etcdv3:
case dbtesterpb.Request_etcdv3:
return fileinspect.Size(flg.etcdDataDir)
case agentpb.Request_ZooKeeper:
case dbtesterpb.Request_zookeeper:
return fileinspect.Size(flg.zkDataDir)
case agentpb.Request_Consul:
case dbtesterpb.Request_consul:
return fileinspect.Size(flg.consulDataDir)
case agentpb.Request_cetcd:
case dbtesterpb.Request_cetcd:
return fileinspect.Size(flg.etcdDataDir)
case agentpb.Request_zetcd:
case dbtesterpb.Request_zetcd:
return fileinspect.Size(flg.etcdDataDir)
default:
return 0, fmt.Errorf("uknown %q", rdb)

View File

@ -28,12 +28,12 @@ func startMetrics(fs *flags, t *transporterServer) (err error) {
return fmt.Errorf("cannot find process to track (%+v, %+v)", fs, t)
}
plog.Infof("starting collecting metrics [database %q | PID: %d | disk device: %q | network interface: %q]",
t.req.Database, t.pid, fs.diskDevice, fs.networkInterface)
t.req.DatabaseID, t.pid, fs.diskDevice, fs.networkInterface)
if err = os.RemoveAll(fs.systemMetricsCSV); err != nil {
return err
}
if err = toFile(fmt.Sprintf("%d", t.req.ClientNum), t.clientNumPath); err != nil {
if err = toFile(fmt.Sprintf("%d", t.req.CurrentClientNumber), t.clientNumPath); err != nil {
return err
}

View File

@ -20,14 +20,14 @@ import (
"strings"
"time"
"github.com/coreos/dbtester/agent/agentpb"
"github.com/coreos/dbtester/dbtesterpb"
"github.com/coreos/dbtester/pkg/remotestorage"
)
// uploadLog starts cetcd. This assumes that etcd is already started.
func uploadLog(fs *flags, t *transporterServer) error {
plog.Infof("stopped collecting metrics; uploading logs to storage %q", t.req.GoogleCloudProjectName)
u, err := remotestorage.NewGoogleCloudStorage([]byte(t.req.GoogleCloudStorageKey), t.req.GoogleCloudProjectName)
plog.Infof("stopped collecting metrics; uploading logs to storage %q", t.req.Control.GoogleCloudProjectName)
u, err := remotestorage.NewGoogleCloudStorage([]byte(t.req.Control.GoogleCloudStorageKey), t.req.Control.GoogleCloudProjectName)
if err != nil {
return err
}
@ -37,13 +37,13 @@ func uploadLog(fs *flags, t *transporterServer) error {
{
srcDatabaseLogPath := fs.databaseLog
dstDatabaseLogPath := filepath.Base(fs.databaseLog)
if !strings.HasPrefix(filepath.Base(fs.databaseLog), t.req.TestName) {
dstDatabaseLogPath = fmt.Sprintf("%s-%d-%s", t.req.TestName, t.req.ServerIndex+1, filepath.Base(fs.databaseLog))
if !strings.HasPrefix(filepath.Base(fs.databaseLog), t.req.DatabaseTag) {
dstDatabaseLogPath = fmt.Sprintf("%s-%d-%s", t.req.DatabaseTag, t.req.IpIndex+1, filepath.Base(fs.databaseLog))
}
dstDatabaseLogPath = filepath.Join(t.req.GoogleCloudStorageSubDirectory, dstDatabaseLogPath)
dstDatabaseLogPath = filepath.Join(t.req.Control.GoogleCloudStorageSubDirectory, dstDatabaseLogPath)
plog.Infof("uploading database log [%q -> %q]", srcDatabaseLogPath, dstDatabaseLogPath)
for k := 0; k < 30; k++ {
if uerr = u.UploadFile(t.req.GoogleCloudStorageBucketName, srcDatabaseLogPath, dstDatabaseLogPath); uerr != nil {
if uerr = u.UploadFile(t.req.Control.GoogleCloudStorageBucketName, srcDatabaseLogPath, dstDatabaseLogPath); uerr != nil {
plog.Warningf("UploadFile error... sleep and retry... (%v)", uerr)
time.Sleep(2 * time.Second)
continue
@ -57,17 +57,17 @@ func uploadLog(fs *flags, t *transporterServer) error {
}
{
if t.req.Database == agentpb.Request_zetcd || t.req.Database == agentpb.Request_cetcd {
dpath := fs.databaseLog + "-" + t.req.Database.String()
if t.req.DatabaseID == dbtesterpb.Request_zetcd || t.req.DatabaseID == dbtesterpb.Request_cetcd {
dpath := fs.databaseLog + "-" + t.req.DatabaseID.String()
srcDatabaseLogPath2 := dpath
dstDatabaseLogPath2 := filepath.Base(dpath)
if !strings.HasPrefix(filepath.Base(dpath), t.req.TestName) {
dstDatabaseLogPath2 = fmt.Sprintf("%s-%d-%s", t.req.TestName, t.req.ServerIndex+1, filepath.Base(dpath))
if !strings.HasPrefix(filepath.Base(dpath), t.req.DatabaseTag) {
dstDatabaseLogPath2 = fmt.Sprintf("%s-%d-%s", t.req.DatabaseTag, t.req.IpIndex+1, filepath.Base(dpath))
}
dstDatabaseLogPath2 = filepath.Join(t.req.GoogleCloudStorageSubDirectory, dstDatabaseLogPath2)
dstDatabaseLogPath2 = filepath.Join(t.req.Control.GoogleCloudStorageSubDirectory, dstDatabaseLogPath2)
plog.Infof("uploading proxy-database log [%q -> %q]", srcDatabaseLogPath2, dstDatabaseLogPath2)
for k := 0; k < 30; k++ {
if uerr = u.UploadFile(t.req.GoogleCloudStorageBucketName, srcDatabaseLogPath2, dstDatabaseLogPath2); uerr != nil {
if uerr = u.UploadFile(t.req.Control.GoogleCloudStorageBucketName, srcDatabaseLogPath2, dstDatabaseLogPath2); uerr != nil {
plog.Warningf("UploadFile error... sleep and retry... (%v)", uerr)
time.Sleep(2 * time.Second)
continue
@ -84,14 +84,14 @@ func uploadLog(fs *flags, t *transporterServer) error {
{
srcSysMetricsDataPath := fs.systemMetricsCSV
dstSysMetricsDataPath := filepath.Base(fs.systemMetricsCSV)
if !strings.HasPrefix(filepath.Base(fs.systemMetricsCSV), t.req.TestName) {
dstSysMetricsDataPath = fmt.Sprintf("%s-%d-%s", t.req.TestName, t.req.ServerIndex+1, filepath.Base(fs.systemMetricsCSV))
if !strings.HasPrefix(filepath.Base(fs.systemMetricsCSV), t.req.DatabaseTag) {
dstSysMetricsDataPath = fmt.Sprintf("%s-%d-%s", t.req.DatabaseTag, t.req.IpIndex+1, filepath.Base(fs.systemMetricsCSV))
}
dstSysMetricsDataPath = filepath.Join(t.req.GoogleCloudStorageSubDirectory, dstSysMetricsDataPath)
dstSysMetricsDataPath = filepath.Join(t.req.Control.GoogleCloudStorageSubDirectory, dstSysMetricsDataPath)
plog.Infof("uploading system metrics data [%q -> %q]", srcSysMetricsDataPath, dstSysMetricsDataPath)
for k := 0; k < 30; k++ {
if uerr := u.UploadFile(t.req.GoogleCloudStorageBucketName, srcSysMetricsDataPath, dstSysMetricsDataPath); uerr != nil {
plog.Warningf("u.UploadFile error... sleep and retry... (%v)", uerr)
if uerr := u.UploadFile(t.req.Control.GoogleCloudStorageBucketName, srcSysMetricsDataPath, dstSysMetricsDataPath); uerr != nil {
plog.Warningf("upload error... sleep and retry... (%v)", uerr)
time.Sleep(2 * time.Second)
continue
} else {
@ -106,14 +106,14 @@ func uploadLog(fs *flags, t *transporterServer) error {
{
srcSysMetricsInterpolatedDataPath := fs.systemMetricsCSVInterpolated
dstSysMetricsInterpolatedDataPath := filepath.Base(fs.systemMetricsCSVInterpolated)
if !strings.HasPrefix(filepath.Base(fs.systemMetricsCSVInterpolated), t.req.TestName) {
dstSysMetricsInterpolatedDataPath = fmt.Sprintf("%s-%d-%s", t.req.TestName, t.req.ServerIndex+1, filepath.Base(fs.systemMetricsCSVInterpolated))
if !strings.HasPrefix(filepath.Base(fs.systemMetricsCSVInterpolated), t.req.DatabaseTag) {
dstSysMetricsInterpolatedDataPath = fmt.Sprintf("%s-%d-%s", t.req.DatabaseTag, t.req.IpIndex+1, filepath.Base(fs.systemMetricsCSVInterpolated))
}
dstSysMetricsInterpolatedDataPath = filepath.Join(t.req.GoogleCloudStorageSubDirectory, dstSysMetricsInterpolatedDataPath)
dstSysMetricsInterpolatedDataPath = filepath.Join(t.req.Control.GoogleCloudStorageSubDirectory, dstSysMetricsInterpolatedDataPath)
plog.Infof("uploading system metrics interpolated data [%q -> %q]", srcSysMetricsInterpolatedDataPath, dstSysMetricsInterpolatedDataPath)
for k := 0; k < 30; k++ {
if uerr := u.UploadFile(t.req.GoogleCloudStorageBucketName, srcSysMetricsInterpolatedDataPath, dstSysMetricsInterpolatedDataPath); uerr != nil {
plog.Warningf("u.UploadFile error... sleep and retry... (%v)", uerr)
if uerr := u.UploadFile(t.req.Control.GoogleCloudStorageBucketName, srcSysMetricsInterpolatedDataPath, dstSysMetricsInterpolatedDataPath); uerr != nil {
plog.Warningf("upload error... sleep and retry... (%v)", uerr)
time.Sleep(2 * time.Second)
continue
} else {
@ -128,13 +128,13 @@ func uploadLog(fs *flags, t *transporterServer) error {
{
srcAgentLogPath := fs.agentLog
dstAgentLogPath := filepath.Base(fs.agentLog)
if !strings.HasPrefix(filepath.Base(fs.agentLog), t.req.TestName) {
dstAgentLogPath = fmt.Sprintf("%s-%d-%s", t.req.TestName, t.req.ServerIndex+1, filepath.Base(fs.agentLog))
if !strings.HasPrefix(filepath.Base(fs.agentLog), t.req.DatabaseTag) {
dstAgentLogPath = fmt.Sprintf("%s-%d-%s", t.req.DatabaseTag, t.req.IpIndex+1, filepath.Base(fs.agentLog))
}
dstAgentLogPath = filepath.Join(t.req.GoogleCloudStorageSubDirectory, dstAgentLogPath)
dstAgentLogPath = filepath.Join(t.req.Control.GoogleCloudStorageSubDirectory, dstAgentLogPath)
plog.Infof("uploading agent logs [%q -> %q]", srcAgentLogPath, dstAgentLogPath)
for k := 0; k < 30; k++ {
if uerr := u.UploadFile(t.req.GoogleCloudStorageBucketName, srcAgentLogPath, dstAgentLogPath); uerr != nil {
if uerr := u.UploadFile(t.req.Control.GoogleCloudStorageBucketName, srcAgentLogPath, dstAgentLogPath); uerr != nil {
plog.Warningf("UploadFile error... sleep and retry... (%v)", uerr)
time.Sleep(2 * time.Second)
continue

View File

@ -1,63 +0,0 @@
// Copyright 2017 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package analyze
import (
"io/ioutil"
"gopkg.in/yaml.v2"
)
// RawData defines how to aggregate data from each machine.
type RawData struct {
Legend string `yaml:"legend"`
OutputPath string `yaml:"output_path"`
DataInterpolatedSystemMetricsPaths []string `yaml:"data_interpolated_system_metrics_paths"`
DatasizeSummary string `yaml:"data_size_summary"`
DataBenchmarkLatencyPercentile string `yaml:"data_benchmark_latency_percentile"`
DataBenchmarkLatencySummary string `yaml:"data_benchmark_latency_summary"`
DataBenchmarkThroughput string `yaml:"data_benchmark_throughput"`
DataBenchmarkLatencyByKey string `yaml:"data_benchmark_latency_by_key"`
DataBenchmarkMemoryByKey string `yaml:"data_benchmark_memory_by_key"`
ClientSystemMetricsInterpolated string `yaml:"client_system_metrics_interpolated"`
TotalRequests int `yaml:"total_requests"`
}
// Config defines analyze configuration.
type Config struct {
Title string `yaml:"title"`
WorkDir string `yaml:"work_dir"`
AllAggregatedPath string `yaml:"all_aggregated_path"`
AllLatencyByKey string `yaml:"all_latency_by_key"`
AllMemoryByKey string `yaml:"all_memory_by_key"`
DataBenchmarkLatencyByKey string `yaml:"data_benchmark_latency_by_key"`
DataBenchmarkMemoryByKey string `yaml:"data_benchmark_memory_by_key"`
RawData []RawData `yaml:"raw_data"`
PlotList []PlotConfig `yaml:"plot_list"`
READMEConfig READMEConfig `yaml:"readme"`
}
// readConfig reads analyze configuration.
func readConfig(fpath string) (Config, error) {
bts, err := ioutil.ReadFile(fpath)
if err != nil {
return Config{}, err
}
rs := Config{}
if err := yaml.Unmarshal(bts, &rs); err != nil {
return Config{}, err
}
return rs, nil
}

View File

@ -1,201 +0,0 @@
title: Write 100K keys, 1000-client (etcd 100 TCP conns), 256-byte key, 1KB value
work_dir: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys
all_aggregated_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/aggregated.csv
all_latency_by_key: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/aggregated-data-latency-by-key-number.csv
all_memory_by_key: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/aggregated-data-memory-by-key-number.csv
total_requests: 100000
raw_data:
- legend: etcd v3.1 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-aggregated.csv
data_interpolated_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-1-system-metrics-interpolated.csv
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-2-system-metrics-interpolated.csv
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-3-system-metrics-interpolated.csv
data_size_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-size-summary.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
data_benchmark_latency_by_key: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-by-key-number.csv
data_benchmark_memory_by_key: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-memory-by-key-number.csv
client_system_metrics_interpolated: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-client-system-metrics-interpolated.csv
- legend: Zookeeper r3.4.9 (Java 8)
output_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-aggregated.csv
data_interpolated_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-1-system-metrics-interpolated.csv
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-2-system-metrics-interpolated.csv
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-3-system-metrics-interpolated.csv
data_size_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-size-summary.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
data_benchmark_latency_by_key: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-by-key-number.csv
data_benchmark_memory_by_key: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-memory-by-key-number.csv
client_system_metrics_interpolated: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-client-system-metrics-interpolated.csv
- legend: Consul v0.7.2 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-aggregated.csv
data_interpolated_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-1-system-metrics-interpolated.csv
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-2-system-metrics-interpolated.csv
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-3-system-metrics-interpolated.csv
data_size_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-size-summary.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-throughput-timeseries.csv
data_benchmark_latency_by_key: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-by-key-number.csv
data_benchmark_memory_by_key: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-memory-by-key-number.csv
client_system_metrics_interpolated: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.3-go1.7.4-client-system-metrics-interpolated.csv
plot_list:
- column: AVG-LATENCY-MS
x_axis: Second
y_axis: Latency(millisecond)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS.png
- column: AVG-THROUGHPUT
x_axis: Second
y_axis: Throughput(Requests/Second)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT.png
- column: AVG-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Voluntary Context Switches
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Non-voluntary Context Switches
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-CPU
x_axis: Second
y_axis: CPU(%)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU.png
- column: AVG-VMRSS-MB
x_axis: Second
y_axis: Memory(MB)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB.png
- column: AVG-READS-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Reads
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA.png
- column: AVG-SECTORS-READ-DELTA
x_axis: Second
y_axis: Sectors Read
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA.png
- column: AVG-WRITES-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Writes
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.png
- column: AVG-SECTORS-WRITTEN-DELTA
x_axis: Second
y_axis: Sectors Written
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.png
- column: AVG-RECEIVE-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Receive(bytes)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.png
- column: AVG-TRANSMIT-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Transmit(bytes)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.png
readme:
preface: |
- Google Cloud Compute Engine
- 3 machines of 8 vCPUs + 16 GB Memory + 150 GB SSD
- 1 machine(client) of 16 vCPUs + 30 GB Memory + 150 GB SSD
- Ubuntu 16.10
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
- Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
- javac 1.8.0_111
- Consul v0.7.2 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/README.md
results:
- title: Write 100K keys, 1000-client (etcd v3.1 100-conn), 256-byte key, 1KB value
images:
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
image_type: remote

View File

@ -1,86 +0,0 @@
// Copyright 2017 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package analyze
import "testing"
func Test_readConfig(t *testing.T) {
c, err := readConfig("analyze_config.yaml")
if err != nil {
t.Fatal(err)
}
if c.Title != `Write 100K keys, 1000-client (etcd 100 TCP conns), 256-byte key, 1KB value` {
t.Fatalf("unexpected Title %q", c.Title)
}
if c.WorkDir != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys" {
t.Fatalf("unexpected WorkDir %q", c.WorkDir)
}
if c.AllAggregatedPath != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/aggregated.csv" {
t.Fatalf("unexpected AllAggregatedPath %q", c.AllAggregatedPath)
}
if c.AllLatencyByKey != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/aggregated-data-latency-by-key-number.csv" {
t.Fatalf("unexpected AllLatencyByKey %q", c.AllLatencyByKey)
}
if c.AllMemoryByKey != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/aggregated-data-memory-by-key-number.csv" {
t.Fatalf("unexpected AllMemoryByKey %q", c.AllMemoryByKey)
}
if c.RawData[0].Legend != "etcd v3.1 (Go 1.7.4)" {
t.Fatalf("unexpected c.RawData[0].Legend %q", c.RawData[0].Legend)
}
if makeTag(c.RawData[0].Legend) != "etcd-v3.1-go1.7.4" {
t.Fatalf("unexpected makeTag(c.RawData[0].Legend) %q", makeTag(c.RawData[0].Legend))
}
if c.RawData[0].OutputPath != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-aggregated.csv" {
t.Fatalf("unexpected c.RawData[0].OutputPath %q", c.RawData[0].OutputPath)
}
if c.RawData[0].DataInterpolatedSystemMetricsPaths[0] != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-1-system-metrics-interpolated.csv" {
t.Fatalf("unexpected c.RawData[0].DataInterpolatedSystemMetricsPaths[0] %q", c.RawData[0].DataInterpolatedSystemMetricsPaths[0])
}
if c.RawData[0].DatasizeSummary != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-size-summary.csv" {
t.Fatalf("unexpected c.RawData[0].DatasizeSummary %q", c.RawData[0].DatasizeSummary)
}
if c.RawData[0].DataBenchmarkLatencyPercentile != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv" {
t.Fatalf("unexpected c.RawData[0].DataBenchmarkLatencyPercentile %q", c.RawData[0].DataBenchmarkLatencyPercentile)
}
if c.RawData[0].DataBenchmarkLatencySummary != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv" {
t.Fatalf("unexpected c.RawData[0].DataBenchmarkLatencySummary %q", c.RawData[0].DataBenchmarkLatencySummary)
}
if c.RawData[0].DataBenchmarkThroughput != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv" {
t.Fatalf("unexpected c.RawData[0].DataBenchmarkThroughput %q", c.RawData[0].DataBenchmarkThroughput)
}
if c.RawData[0].DataBenchmarkLatencyByKey != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-by-key-number.csv" {
t.Fatalf("unexpected c.RawData[0].DataBenchmarkLatencyByKey %q", c.RawData[0].DataBenchmarkLatencyByKey)
}
if c.RawData[0].DataBenchmarkMemoryByKey != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-memory-by-key-number.csv" {
t.Fatalf("unexpected c.RawData[0].DataBenchmarkMemoryByKey %q", c.RawData[0].DataBenchmarkMemoryByKey)
}
if c.RawData[0].ClientSystemMetricsInterpolated != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-client-system-metrics-interpolated.csv" {
t.Fatalf("unexpected c.RawData[0].ClientSystemMetricsInterpolated %q", c.RawData[0].ClientSystemMetricsInterpolated)
}
if c.READMEConfig.OutputPath != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/README.md" {
t.Fatalf("unexpected %s", c.READMEConfig.OutputPath)
}
if c.READMEConfig.Results[0].Images[0].ImageTitle != "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS" {
t.Fatalf("unexpected %s", c.READMEConfig.Results[0].Images[0].ImageTitle)
}
if c.READMEConfig.Results[0].Images[0].ImagePath != "https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS.svg" {
t.Fatalf("unexpected %s", c.READMEConfig.Results[0].Images[0].ImagePath)
}
if c.READMEConfig.Results[0].Images[0].ImageType != "remote" {
t.Fatalf("unexpected %s", c.READMEConfig.Results[0].Images[0].ImageType)
}
}

View File

@ -36,7 +36,7 @@ type analyzeData struct {
// aggregated from sysAgg and benchMetrics
aggregated dataframe.Frame
csvOutputpath string
allAggregatedOutputPath string
}
// readSystemMetricsAll reads all system metric files

View File

@ -23,7 +23,7 @@ import (
)
// aggregateAll aggregates all system metrics from 3+ nodes.
func (data *analyzeData) aggregateAll(memoryByKeyPath string, totalRequests int) error {
func (data *analyzeData) aggregateAll(memoryByKeyPath string, totalRequests int64) error {
colSys, err := data.sysAgg.Column("UNIX-SECOND")
if err != nil {
return err
@ -471,5 +471,5 @@ func (data *analyzeData) aggregateAll(memoryByKeyPath string, totalRequests int)
}
func (data *analyzeData) save() error {
return data.aggregated.CSV(data.csvOutputpath)
return data.aggregated.CSV(data.allAggregatedOutputPath)
}

View File

@ -16,7 +16,7 @@ package analyze
import "sort"
func processTimeSeries(tslice []keyNumAndMemory, unit int64, totalRequests int) []keyNumAndMemory {
func processTimeSeries(tslice []keyNumAndMemory, unit int64, totalRequests int64) []keyNumAndMemory {
sort.Sort(keyNumAndMemorys(tslice))
cumulKeyN := int64(0)

View File

@ -17,8 +17,8 @@ package analyze
import (
"fmt"
"image/color"
"strings"
"github.com/coreos/dbtester"
"github.com/gonum/plot"
"github.com/gonum/plot/plotter"
"github.com/gonum/plot/plotutil"
@ -37,14 +37,6 @@ func init() {
plotter.DefaultGlyphStyle.Radius = vg.Points(2.0)
}
// PlotConfig defines what to plot.
type PlotConfig struct {
Column string `yaml:"column"`
XAxis string `yaml:"x_axis"`
YAxis string `yaml:"y_axis"`
OutputPathList []string `yaml:"output_path_list"`
}
type pair struct {
x dataframe.Column
y dataframe.Column
@ -57,7 +49,7 @@ type triplet struct {
maxCol dataframe.Column
}
func (all *allAggregatedData) draw(cfg PlotConfig, pairs ...pair) error {
func (all *allAggregatedData) draw(cfg dbtester.Plot, pairs ...pair) error {
// frame now contains
// AVG-LATENCY-MS-etcd-v3.1-go1.7.4, AVG-LATENCY-MS-zookeeper-r3.4.9-java8, AVG-LATENCY-MS-consul-v0.7.2-go1.7.4
plt, err := plot.New()
@ -80,11 +72,11 @@ func (all *allAggregatedData) draw(cfg PlotConfig, pairs ...pair) error {
if err != nil {
return err
}
l.Color = getRGB(all.headerToLegend[p.y.Header()], i)
l.Color = getRGB(all.headerToDatabaseID[p.y.Header()], i)
l.Dashes = plotutil.Dashes(i)
ps = append(ps, l)
plt.Legend.Add(all.headerToLegend[p.y.Header()], l)
plt.Legend.Add(all.headerToDatabaseID[p.y.Header()], l)
}
plt.Add(ps...)
@ -96,7 +88,7 @@ func (all *allAggregatedData) draw(cfg PlotConfig, pairs ...pair) error {
return nil
}
func (all *allAggregatedData) drawXY(cfg PlotConfig, pairs ...pair) error {
func (all *allAggregatedData) drawXY(cfg dbtester.Plot, pairs ...pair) error {
// frame now contains
// KEYS-DB-TAG-X, AVG-LATENCY-MS-DB-TAG-Y, ...
plt, err := plot.New()
@ -119,11 +111,11 @@ func (all *allAggregatedData) drawXY(cfg PlotConfig, pairs ...pair) error {
if err != nil {
return err
}
l.Color = getRGB(all.headerToLegend[p.y.Header()], i)
l.Color = getRGB(all.headerToDatabaseID[p.y.Header()], i)
l.Dashes = plotutil.Dashes(i)
ps = append(ps, l)
plt.Legend.Add(all.headerToLegend[p.y.Header()], l)
plt.Legend.Add(all.headerToDatabaseID[p.y.Header()], l)
}
plt.Add(ps...)
@ -135,7 +127,7 @@ func (all *allAggregatedData) drawXY(cfg PlotConfig, pairs ...pair) error {
return nil
}
func (all *allAggregatedData) drawXYWithErrorPoints(cfg PlotConfig, triplets ...triplet) error {
func (all *allAggregatedData) drawXYWithErrorPoints(cfg dbtester.Plot, triplets ...triplet) error {
// frame now contains
// KEYS-DB-TAG-X, MIN-LATENCY-MS-DB-TAG-Y, AVG-LATENCY-MS-DB-TAG-Y, MAX-LATENCY-MS-DB-TAG-Y, ...
plt, err := plot.New()
@ -158,10 +150,10 @@ func (all *allAggregatedData) drawXYWithErrorPoints(cfg PlotConfig, triplets ...
if err != nil {
return err
}
l.Color = getRGBII(all.headerToLegend[triplet.avgCol.Header()], i)
l.Color = getRGBII(all.headerToDatabaseID[triplet.avgCol.Header()], i)
l.Dashes = plotutil.Dashes(i)
ps = append(ps, l)
plt.Legend.Add(all.headerToLegend[triplet.avgCol.Header()]+" MIN", l)
plt.Legend.Add(all.headerToDatabaseID[triplet.avgCol.Header()]+" MIN", l)
}
{
pt, err := pointsXY(triplet.x, triplet.avgCol)
@ -172,10 +164,10 @@ func (all *allAggregatedData) drawXYWithErrorPoints(cfg PlotConfig, triplets ...
if err != nil {
return err
}
l.Color = getRGB(all.headerToLegend[triplet.avgCol.Header()], i)
l.Color = getRGB(all.headerToDatabaseID[triplet.avgCol.Header()], i)
l.Dashes = plotutil.Dashes(i)
ps = append(ps, l)
plt.Legend.Add(all.headerToLegend[triplet.avgCol.Header()], l)
plt.Legend.Add(all.headerToDatabaseID[triplet.avgCol.Header()], l)
}
{
pt, err := pointsXY(triplet.x, triplet.maxCol)
@ -186,10 +178,10 @@ func (all *allAggregatedData) drawXYWithErrorPoints(cfg PlotConfig, triplets ...
if err != nil {
return err
}
l.Color = getRGBIII(all.headerToLegend[triplet.avgCol.Header()], i)
l.Color = getRGBIII(all.headerToDatabaseID[triplet.avgCol.Header()], i)
l.Dashes = plotutil.Dashes(i)
ps = append(ps, l)
plt.Legend.Add(all.headerToLegend[triplet.avgCol.Header()]+" MAX", l)
plt.Legend.Add(all.headerToDatabaseID[triplet.avgCol.Header()]+" MAX", l)
}
}
plt.Add(ps...)
@ -253,61 +245,55 @@ func pointsXY(colX, colY dataframe.Column) (plotter.XYs, error) {
return pts, nil
}
func getRGB(legend string, i int) color.Color {
tag := makeTag(legend)
if strings.HasPrefix(tag, "etcd") {
func getRGB(databaseID string, i int) color.Color {
switch databaseID {
case "etcdv2":
return color.RGBA{218, 97, 229, 255} // purple
case "etcdv3":
return color.RGBA{24, 90, 169, 255} // blue
}
if strings.HasPrefix(tag, "zookeeper") {
case "zookeeper":
return color.RGBA{38, 169, 24, 255} // green
}
if strings.HasPrefix(tag, "consul") {
case "consul":
return color.RGBA{198, 53, 53, 255} // red
}
if strings.HasPrefix(tag, "zetcd") {
case "zetcd":
return color.RGBA{251, 206, 0, 255} // yellow
}
if strings.HasPrefix(tag, "cetcd") {
case "cetcd":
return color.RGBA{116, 24, 169, 255} // purple
}
return plotutil.Color(i)
}
func getRGBII(legend string, i int) color.Color {
tag := makeTag(legend)
if strings.HasPrefix(tag, "etcd") {
func getRGBII(databaseID string, i int) color.Color {
switch databaseID {
case "etcdv2":
return color.RGBA{229, 212, 231, 255} // light-purple
case "etcdv3":
return color.RGBA{129, 212, 247, 255} // light-blue
}
if strings.HasPrefix(tag, "zookeeper") {
case "zookeeper":
return color.RGBA{129, 247, 152, 255} // light-green
}
if strings.HasPrefix(tag, "consul") {
case "consul":
return color.RGBA{247, 156, 156, 255} // light-red
}
if strings.HasPrefix(tag, "zetcd") {
case "zetcd":
return color.RGBA{245, 247, 166, 255} // light-yellow
}
if strings.HasPrefix(tag, "cetcd") {
case "cetcd":
return color.RGBA{247, 166, 238, 255} // light-purple
}
return plotutil.Color(i)
}
func getRGBIII(legend string, i int) color.Color {
tag := makeTag(legend)
if strings.HasPrefix(tag, "etcd") {
func getRGBIII(databaseID string, i int) color.Color {
switch databaseID {
case "etcdv2":
return color.RGBA{165, 8, 180, 255} // deep-purple
case "etcdv3":
return color.RGBA{37, 29, 191, 255} // deep-blue
}
if strings.HasPrefix(tag, "zookeeper") {
case "zookeeper":
return color.RGBA{7, 64, 35, 255} // deep-green
}
if strings.HasPrefix(tag, "consul") {
case "consul":
return color.RGBA{212, 8, 46, 255} // deep-red
}
if strings.HasPrefix(tag, "zetcd") {
case "zetcd":
return color.RGBA{229, 255, 0, 255} // deep-yellow
}
if strings.HasPrefix(tag, "cetcd") {
case "cetcd":
return color.RGBA{255, 0, 251, 255} // deep-purple
}
return plotutil.Color(i)

View File

@ -1,65 +0,0 @@
// Copyright 2017 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package analyze
import (
"bytes"
"fmt"
"path/filepath"
)
// READMEConfig defines how to write README.
type READMEConfig struct {
Preface string `yaml:"preface"`
OutputPath string `yaml:"output_path"`
Results []struct {
Title string
Images []struct {
ImageTitle string `yaml:"image_title"`
ImagePath string `yaml:"image_path"`
ImageType string `yaml:"image_type"`
} `yaml:"images"`
} `yaml:"results"`
}
func writeREADME(summary string, cfg READMEConfig) error {
buf := new(bytes.Buffer)
buf.WriteString("\n\n")
for _, result := range cfg.Results {
buf.WriteString(fmt.Sprintf("<br><br><hr>\n##### %s", result.Title))
buf.WriteString("\n\n")
buf.WriteString(cfg.Preface)
buf.WriteString("\n\n```\n")
buf.WriteString(summary)
buf.WriteString("```\n\n\n")
for _, img := range result.Images {
imgPath := ""
switch img.ImageType {
case "local":
imgPath = "./" + filepath.Base(img.ImagePath)
buf.WriteString(fmt.Sprintf("![%s](%s)\n\n", img.ImageTitle, imgPath))
case "remote":
buf.WriteString(fmt.Sprintf(`<img src="%s" alt="%s">`, img.ImagePath, img.ImageTitle))
buf.WriteString("\n\n")
default:
return fmt.Errorf("%s is not supported", img.ImageType)
}
}
buf.WriteString("\n\n")
}
return toFile(buf.String(), cfg.OutputPath)
}

View File

@ -21,11 +21,10 @@ import (
"path/filepath"
"reflect"
"sort"
"strconv"
"strings"
"strconv"
"github.com/coreos/dbtester/control"
"github.com/coreos/dbtester"
humanize "github.com/dustin/go-humanize"
"github.com/gyuho/dataframe"
"github.com/olekukonko/tablewriter"
@ -34,38 +33,42 @@ import (
type allAggregatedData struct {
title string
data []*analyzeData
databaseTags []string
headerToLegend map[string]string
headerToDatabaseID map[string]string
allDatabaseIDList []string
}
func do(configPath string) error {
cfg, err := readConfig(configPath)
cfg, err := dbtester.ReadConfig(configPath, true)
if err != nil {
return err
}
all := &allAggregatedData{
title: cfg.Title,
data: make([]*analyzeData, 0, len(cfg.RawData)),
headerToLegend: make(map[string]string),
title: cfg.TestTitle,
data: make([]*analyzeData, 0, len(cfg.DatabaseIDToTestData)),
headerToDatabaseID: make(map[string]string),
allDatabaseIDList: cfg.AllDatabaseIDList,
}
for _, elem := range cfg.RawData {
plog.Printf("reading system metrics data for %s (%q)", makeTag(elem.Legend), elem.Legend)
ad, err := readSystemMetricsAll(elem.DataInterpolatedSystemMetricsPaths...)
for _, databaseID := range cfg.AllDatabaseIDList {
testgroup := cfg.DatabaseIDToTestGroup[databaseID]
testdata := cfg.DatabaseIDToTestData[databaseID]
plog.Printf("reading system metrics data for %s", databaseID)
ad, err := readSystemMetricsAll(testdata.ServerSystemMetricsInterpolatedPathList...)
if err != nil {
return err
}
ad.databaseTag = makeTag(elem.Legend)
ad.legend = elem.Legend
ad.csvOutputpath = elem.OutputPath
ad.databaseTag = testgroup.DatabaseTag
ad.legend = testgroup.DatabaseDescription
ad.allAggregatedOutputPath = testdata.AllAggregatedOutputPath
if err = ad.aggSystemMetrics(); err != nil {
return err
}
if err = ad.importBenchMetrics(elem.DataBenchmarkThroughput); err != nil {
if err = ad.importBenchMetrics(testdata.ClientLatencyThroughputTimeseriesPath); err != nil {
return err
}
if err = ad.aggregateAll(elem.DataBenchmarkMemoryByKey, elem.TotalRequests); err != nil {
if err = ad.aggregateAll(testdata.ServerMemoryByKeyNumberPath, testgroup.RequestNumber); err != nil {
return err
}
if err = ad.save(); err != nil {
@ -73,9 +76,8 @@ func do(configPath string) error {
}
all.data = append(all.data, ad)
all.databaseTags = append(all.databaseTags, makeTag(elem.Legend))
for _, hd := range ad.aggregated.Headers() {
all.headerToLegend[makeHeader(hd, makeTag(elem.Legend))] = elem.Legend
all.headerToDatabaseID[makeHeader(hd, testgroup.DatabaseTag)] = databaseID
}
}
@ -90,19 +92,20 @@ func do(configPath string) error {
for _, ad := range all.data {
// per database
for _, col := range ad.aggregated.Columns() {
legend := all.headerToLegend[col.Header()]
row00Header = append(row00Header, makeTag(legend))
databaseID := all.headerToDatabaseID[col.Header()]
row00Header = append(row00Header, cfg.DatabaseIDToTestGroup[databaseID].DatabaseTag)
break
}
}
row01ReadsCompletedDeltaSum := []string{"READS-COMPLETED-DELTA-SUM"}
row02SectorsReadDeltaSum := []string{"SECTORS-READS-DELTA-SUM"}
row03WritesCompletedDeltaSum := []string{"WRITES-COMPLETED-DELTA-SUM"}
row04SectorsWrittenDeltaSum := []string{"SECTORS-WRITTEN-DELTA-SUM"}
row06ReceiveBytesSum := []string{"NETWORK-RECEIVE-DATA-SUM"}
row07TransmitBytesSum := []string{"NETWORK-TRANSMIT-DATA-SUM"}
row08MaxCPUUsage := []string{"MAX-CPU-USAGE"}
row09MaxMemoryUsage := []string{"MAX-MEMORY-USAGE"}
row19ServerReceiveBytesSum := []string{"SERVER-TOTAL-NETWORK-RECEIVE-DATA-SUM"}
row20ServerTransmitBytesSum := []string{"SERVER-TOTAL-NETWORK-TRANSMIT-DATA-SUM"}
row23ServerMaxCPUUsage := []string{"SERVER-MAX-CPU-USAGE"}
row24ServerMaxMemoryUsage := []string{"SERVER-MAX-MEMORY-USAGE"}
row28ReadsCompletedDeltaSum := []string{"SERVER-AVG-READS-COMPLETED-DELTA-SUM"}
row29SectorsReadDeltaSum := []string{"SERVER-AVG-SECTORS-READS-DELTA-SUM"}
row30WritesCompletedDeltaSum := []string{"SERVER-AVG-WRITES-COMPLETED-DELTA-SUM"}
row31SectorsWrittenDeltaSum := []string{"SERVER-AVG-SECTORS-WRITTEN-DELTA-SUM"}
// iterate each database's all data
for _, ad := range all.data {
@ -120,6 +123,26 @@ func do(configPath string) error {
for _, col := range ad.aggregated.Columns() {
hdr := col.Header()
switch {
case strings.HasPrefix(hdr, "RECEIVE-BYTES-NUM-DELTA-"):
cnt := col.Count()
for j := 0; j < cnt; j++ {
vv, err := col.Value(j)
if err != nil {
return err
}
fv, _ := vv.Float64()
receiveBytesNumDeltaSum += fv
}
case strings.HasPrefix(hdr, "TRANSMIT-BYTES-NUM-DELTA-"):
cnt := col.Count()
for j := 0; j < cnt; j++ {
vv, err := col.Value(j)
if err != nil {
return err
}
fv, _ := vv.Float64()
transmitBytesNumDeltaSum += fv
}
case strings.HasPrefix(hdr, "READS-COMPLETED-DELTA-"):
cnt := col.Count()
for j := 0; j < cnt; j++ {
@ -160,26 +183,6 @@ func do(configPath string) error {
fv, _ := vv.Float64()
sectorsWrittenDeltaSum += fv
}
case strings.HasPrefix(hdr, "RECEIVE-BYTES-NUM-DELTA-"):
cnt := col.Count()
for j := 0; j < cnt; j++ {
vv, err := col.Value(j)
if err != nil {
return err
}
fv, _ := vv.Float64()
receiveBytesNumDeltaSum += fv
}
case strings.HasPrefix(hdr, "TRANSMIT-BYTES-NUM-DELTA-"):
cnt := col.Count()
for j := 0; j < cnt; j++ {
vv, err := col.Value(j)
if err != nil {
return err
}
fv, _ := vv.Float64()
transmitBytesNumDeltaSum += fv
}
case strings.HasPrefix(hdr, "AVG-CPU-"):
cnt := col.Count()
for j := 0; j < cnt; j++ {
@ -203,51 +206,57 @@ func do(configPath string) error {
}
}
row01ReadsCompletedDeltaSum = append(row01ReadsCompletedDeltaSum, humanize.Comma(int64(readsCompletedDeltaSum)))
row02SectorsReadDeltaSum = append(row02SectorsReadDeltaSum, humanize.Comma(int64(sectorsReadDeltaSum)))
row03WritesCompletedDeltaSum = append(row03WritesCompletedDeltaSum, humanize.Comma(int64(writesCompletedDeltaSum)))
row04SectorsWrittenDeltaSum = append(row04SectorsWrittenDeltaSum, humanize.Comma(int64(sectorsWrittenDeltaSum)))
row06ReceiveBytesSum = append(row06ReceiveBytesSum, humanize.Bytes(uint64(receiveBytesNumDeltaSum)))
row07TransmitBytesSum = append(row07TransmitBytesSum, humanize.Bytes(uint64(transmitBytesNumDeltaSum)))
row08MaxCPUUsage = append(row08MaxCPUUsage, fmt.Sprintf("%.2f %%", maxAvgCPU))
row19ServerReceiveBytesSum = append(row19ServerReceiveBytesSum, humanize.Bytes(uint64(receiveBytesNumDeltaSum)))
row20ServerTransmitBytesSum = append(row20ServerTransmitBytesSum, humanize.Bytes(uint64(transmitBytesNumDeltaSum)))
row23ServerMaxCPUUsage = append(row23ServerMaxCPUUsage, fmt.Sprintf("%.2f %%", maxAvgCPU))
row28ReadsCompletedDeltaSum = append(row28ReadsCompletedDeltaSum, humanize.Comma(int64(readsCompletedDeltaSum)))
row29SectorsReadDeltaSum = append(row29SectorsReadDeltaSum, humanize.Comma(int64(sectorsReadDeltaSum)))
row30WritesCompletedDeltaSum = append(row30WritesCompletedDeltaSum, humanize.Comma(int64(writesCompletedDeltaSum)))
row31SectorsWrittenDeltaSum = append(row31SectorsWrittenDeltaSum, humanize.Comma(int64(sectorsWrittenDeltaSum)))
// TODO: handle overflowed memory value?
sort.Float64s(maxAvgVMRSSMBs)
mv := maxAvgVMRSSMBs[len(maxAvgVMRSSMBs)-1]
mb := uint64(mv * 1000000)
row09MaxMemoryUsage = append(row09MaxMemoryUsage, humanize.Bytes(mb))
row24ServerMaxMemoryUsage = append(row24ServerMaxMemoryUsage, humanize.Bytes(mb))
}
row05AverageDatasize := []string{"AVG-DATA-SIZE-ON-DISK"} // TOTAL-DATA-SIZE
row10TotalSeconds := []string{"TOTAL-SECONDS"} // TOTAL-SECONDS
row11MaxThroughput := []string{"MAX-THROUGHPUT"} // MAX AVG-THROUGHPUT
row12AverageThroughput := []string{"AVG-THROUGHPUT"} // REQUESTS-PER-SECOND
row13MinThroughput := []string{"MIN-THROUGHPUT"} // MIN AVG-THROUGHPUT
row14FastestLatency := []string{"FASTEST-LATENCY"} // FASTEST-LATENCY-MS
row15AverageLatency := []string{"AVG-LATENCY"} // AVERAGE-LATENCY-MS
row16SlowestLatency := []string{"SLOWEST-LATENCY"} // SLOWEST-LATENCY-MS
row17p10 := []string{"Latency p10"} // p10
row18p25 := []string{"Latency p25"} // p25
row19p50 := []string{"Latency p50"} // p50
row20p75 := []string{"Latency p75"} // p75
row21p90 := []string{"Latency p90"} // p90
row22p95 := []string{"Latency p95"} // p95
row23p99 := []string{"Latency p99"} // p99
row24p999 := []string{"Latency p99.9"} // p99.9
row25ClientReceiveBytesSum := []string{"CLIENT-NETWORK-RECEIVE-SUM"} // RECEIVE-BYTES-NUM-DELTA
row26ClientTransmitBytesSum := []string{"CLIENT-NETWORK-TRANSMIT-SUM"} // TRANSMIT-BYTES-DELTA
row27ClientMaxCPU := []string{"CLIENT-MAX-CPU-USAGE"} // CPU-NUM
row28ClientMaxMemory := []string{"CLIENT-MAX-MEMORY-USAGE"} // VMRSS-NUM
row29ErrorCount := []string{"CLIENT-ERROR-COUNT"} // ERROR:
row01TotalSeconds := []string{"TOTAL-SECONDS"} // TOTAL-SECONDS
row02TotalRequestNumber := []string{"TOTAL-REQUEST-NUMBER"}
row05MaxThroughput := []string{"MAX-THROUGHPUT"} // MAX AVG-THROUGHPUT
row06AverageThroughput := []string{"AVG-THROUGHPUT"} // REQUESTS-PER-SECOND
row07MinThroughput := []string{"MIN-THROUGHPUT"} // MIN AVG-THROUGHPUT
row08FastestLatency := []string{"FASTEST-LATENCY"} // FASTEST-LATENCY-MS
row09AverageLatency := []string{"AVG-LATENCY"} // AVERAGE-LATENCY-MS
row10SlowestLatency := []string{"SLOWEST-LATENCY"} // SLOWEST-LATENCY-MS
row11p10 := []string{"Latency p10"} // p10
row12p25 := []string{"Latency p25"} // p25
row13p50 := []string{"Latency p50"} // p50
row14p75 := []string{"Latency p75"} // p75
row15p90 := []string{"Latency p90"} // p90
row16p95 := []string{"Latency p95"} // p95
row17p99 := []string{"Latency p99"} // p99
row18p999 := []string{"Latency p99.9"} // p99.9
row21ClientReceiveBytesSum := []string{"CLIENT-TOTAL-NETWORK-RECEIVE-SUM"} // RECEIVE-BYTES-NUM-DELTA
row22lientTransmitBytesSum := []string{"CLIENT-TOTAL-NETWORK-TRANSMIT-SUM"} // TRANSMIT-BYTES-DELTA
row25ClientMaxCPU := []string{"CLIENT-MAX-CPU-USAGE"} // CPU-NUM
row26ClientMaxMemory := []string{"CLIENT-MAX-MEMORY-USAGE"} // VMRSS-NUM
row27ClientErrorCount := []string{"CLIENT-ERROR-COUNT"} // ERROR:
row32AverageDatasize := []string{"SERVER-AVG-DATA-SIZE-ON-DISK"} // TOTAL-DATA-SIZE
for i, rcfg := range cfg.RawData {
tag := makeTag(rcfg.Legend)
databaseIDToErrs := make(map[string][]string)
for i, databaseID := range cfg.AllDatabaseIDList {
testgroup := cfg.DatabaseIDToTestGroup[databaseID]
testdata := cfg.DatabaseIDToTestData[databaseID]
tag := testdata.DatabaseTag
if tag != row00Header[i+1] {
return fmt.Errorf("analyze config has different order; expected %q, got %q", row00Header[i+1], tag)
}
row02TotalRequestNumber = append(row02TotalRequestNumber, humanize.Comma(testgroup.RequestNumber))
{
fr, err := dataframe.NewFromCSV(nil, rcfg.ClientSystemMetricsInterpolated)
fr, err := dataframe.NewFromCSV(nil, testdata.ClientSystemMetricsInterpolatedPath)
if err != nil {
return err
}
@ -312,14 +321,13 @@ func do(configPath string) error {
}
}
row25ClientReceiveBytesSum = append(row25ClientReceiveBytesSum, humanize.Bytes(receiveBytesNumDeltaSum))
row26ClientTransmitBytesSum = append(row26ClientTransmitBytesSum, humanize.Bytes(transmitBytesNumDeltaSum))
row27ClientMaxCPU = append(row27ClientMaxCPU, fmt.Sprintf("%.2f %%", maxAvgCPU))
row28ClientMaxMemory = append(row28ClientMaxMemory, humanize.Bytes(maxVMRSSNum))
row21ClientReceiveBytesSum = append(row21ClientReceiveBytesSum, humanize.Bytes(receiveBytesNumDeltaSum))
row22lientTransmitBytesSum = append(row22lientTransmitBytesSum, humanize.Bytes(transmitBytesNumDeltaSum))
row25ClientMaxCPU = append(row25ClientMaxCPU, fmt.Sprintf("%.2f %%", maxAvgCPU))
row26ClientMaxMemory = append(row26ClientMaxMemory, humanize.Bytes(maxVMRSSNum))
}
{
f, err := openToRead(rcfg.DataBenchmarkLatencySummary)
f, err := openToRead(testdata.ClientLatencyDistributionSummaryPath)
if err != nil {
return err
}
@ -344,20 +352,20 @@ func do(configPath string) error {
for _, row := range rows {
switch row[0] {
case "TOTAL-SECONDS":
row10TotalSeconds = append(row10TotalSeconds, fmt.Sprintf("%s sec", row[1]))
row01TotalSeconds = append(row01TotalSeconds, fmt.Sprintf("%s sec", row[1]))
case "REQUESTS-PER-SECOND":
fv, err := strconv.ParseFloat(row[1], 64)
if err != nil {
return err
}
avg := int64(fv)
row12AverageThroughput = append(row12AverageThroughput, fmt.Sprintf("%s req/sec", humanize.Comma(avg)))
row06AverageThroughput = append(row06AverageThroughput, fmt.Sprintf("%s req/sec", humanize.Comma(avg)))
case "SLOWEST-LATENCY-MS":
row16SlowestLatency = append(row16SlowestLatency, fmt.Sprintf("%s ms", row[1]))
row10SlowestLatency = append(row10SlowestLatency, fmt.Sprintf("%s ms", row[1]))
case "FASTEST-LATENCY-MS":
row14FastestLatency = append(row14FastestLatency, fmt.Sprintf("%s ms", row[1]))
row08FastestLatency = append(row08FastestLatency, fmt.Sprintf("%s ms", row[1]))
case "AVERAGE-LATENCY-MS":
row15AverageLatency = append(row15AverageLatency, fmt.Sprintf("%s ms", row[1]))
row09AverageLatency = append(row09AverageLatency, fmt.Sprintf("%s ms", row[1]))
}
if strings.HasPrefix(row[0], "ERROR:") {
@ -366,13 +374,21 @@ func do(configPath string) error {
return err
}
totalErrCnt += iv
}
}
row29ErrorCount = append(row29ErrorCount, humanize.Comma(totalErrCnt))
}
c1 := strings.TrimSpace(strings.Replace(row[0], "ERROR:", "", -1))
c2 := humanize.Comma(iv)
es := fmt.Sprintf("%s (count %s)", c1, c2)
if _, ok := databaseIDToErrs[databaseID]; !ok {
databaseIDToErrs[databaseID] = []string{es}
} else {
databaseIDToErrs[databaseID] = append(databaseIDToErrs[databaseID], es)
}
}
}
row27ClientErrorCount = append(row27ClientErrorCount, humanize.Comma(totalErrCnt))
}
{
fr, err := dataframe.NewFromCSV(nil, rcfg.DataBenchmarkThroughput)
fr, err := dataframe.NewFromCSV(nil, testdata.ClientLatencyThroughputTimeseriesPath)
if err != nil {
return err
}
@ -399,16 +415,15 @@ func do(configPath string) error {
min = int64(fv)
}
}
row11MaxThroughput = append(row11MaxThroughput, fmt.Sprintf("%s req/sec", humanize.Comma(max)))
row13MinThroughput = append(row13MinThroughput, fmt.Sprintf("%s req/sec", humanize.Comma(min)))
row05MaxThroughput = append(row05MaxThroughput, fmt.Sprintf("%s req/sec", humanize.Comma(max)))
row07MinThroughput = append(row07MinThroughput, fmt.Sprintf("%s req/sec", humanize.Comma(min)))
}
{
fr, err := dataframe.NewFromCSV(nil, rcfg.DatasizeSummary)
fr, err := dataframe.NewFromCSV(nil, testdata.ServerDatasizeOnDiskSummaryPath)
if err != nil {
return err
}
col, err := fr.Column(control.DataSummaryColumns[3]) // datasize in bytes
col, err := fr.Column(dbtester.DatasizeOnDiskSummaryColumns[3]) // datasize in bytes
if err != nil {
return err
}
@ -422,11 +437,10 @@ func do(configPath string) error {
sum += fv
}
avg := uint64(sum / float64(col.Count()))
row05AverageDatasize = append(row05AverageDatasize, humanize.Bytes(avg))
row32AverageDatasize = append(row32AverageDatasize, humanize.Bytes(avg))
}
{
f, err := openToRead(rcfg.DataBenchmarkLatencyPercentile)
f, err := openToRead(testdata.ClientLatencyDistributionPercentilePath)
if err != nil {
return err
}
@ -453,21 +467,21 @@ func do(configPath string) error {
}
switch row[0] {
case "p10":
row17p10 = append(row17p10, fmt.Sprintf("%s ms", row[1]))
row11p10 = append(row11p10, fmt.Sprintf("%s ms", row[1]))
case "p25":
row18p25 = append(row18p25, fmt.Sprintf("%s ms", row[1]))
row12p25 = append(row12p25, fmt.Sprintf("%s ms", row[1]))
case "p50":
row19p50 = append(row19p50, fmt.Sprintf("%s ms", row[1]))
row13p50 = append(row13p50, fmt.Sprintf("%s ms", row[1]))
case "p75":
row20p75 = append(row20p75, fmt.Sprintf("%s ms", row[1]))
row14p75 = append(row14p75, fmt.Sprintf("%s ms", row[1]))
case "p90":
row21p90 = append(row21p90, fmt.Sprintf("%s ms", row[1]))
row15p90 = append(row15p90, fmt.Sprintf("%s ms", row[1]))
case "p95":
row22p95 = append(row22p95, fmt.Sprintf("%s ms", row[1]))
row16p95 = append(row16p95, fmt.Sprintf("%s ms", row[1]))
case "p99":
row23p99 = append(row23p99, fmt.Sprintf("%s ms", row[1]))
row17p99 = append(row17p99, fmt.Sprintf("%s ms", row[1]))
case "p99.9":
row24p999 = append(row24p999, fmt.Sprintf("%s ms", row[1]))
row18p999 = append(row18p999, fmt.Sprintf("%s ms", row[1]))
}
}
}
@ -475,38 +489,44 @@ func do(configPath string) error {
aggRows := [][]string{
row00Header,
row01ReadsCompletedDeltaSum,
row02SectorsReadDeltaSum,
row03WritesCompletedDeltaSum,
row04SectorsWrittenDeltaSum,
row05AverageDatasize,
row06ReceiveBytesSum,
row07TransmitBytesSum,
row08MaxCPUUsage,
row09MaxMemoryUsage,
row10TotalSeconds,
row11MaxThroughput,
row12AverageThroughput,
row13MinThroughput,
row14FastestLatency,
row15AverageLatency,
row16SlowestLatency,
row17p10,
row18p25,
row19p50,
row20p75,
row21p90,
row22p95,
row23p99,
row24p999,
row25ClientReceiveBytesSum,
row26ClientTransmitBytesSum,
row27ClientMaxCPU,
row28ClientMaxMemory,
row29ErrorCount,
row01TotalSeconds,
row02TotalRequestNumber,
row05MaxThroughput,
row06AverageThroughput,
row07MinThroughput,
row08FastestLatency,
row09AverageLatency,
row10SlowestLatency,
row11p10,
row12p25,
row13p50,
row14p75,
row15p90,
row16p95,
row17p99,
row18p999,
row19ServerReceiveBytesSum,
row20ServerTransmitBytesSum,
row21ClientReceiveBytesSum,
row22lientTransmitBytesSum,
row23ServerMaxCPUUsage,
row24ServerMaxMemoryUsage,
row25ClientMaxCPU,
row26ClientMaxMemory,
row27ClientErrorCount,
row28ReadsCompletedDeltaSum,
row29SectorsReadDeltaSum,
row30WritesCompletedDeltaSum,
row31SectorsWrittenDeltaSum,
row32AverageDatasize,
}
plog.Printf("saving data to %q", cfg.AllAggregatedPath)
file, err := openToOverwrite(cfg.AllAggregatedPath)
plog.Printf("saving summary data to %q", cfg.Analyze.AllAggregatedOutputPathCSV)
file, err := openToOverwrite(cfg.Analyze.AllAggregatedOutputPathCSV)
if err != nil {
return err
}
@ -519,12 +539,40 @@ func do(configPath string) error {
if err := wr.Error(); err != nil {
return err
}
buf := new(bytes.Buffer)
tw := tablewriter.NewWriter(buf)
tw.SetHeader(aggRows[0])
for _, row := range aggRows[1:] {
tw.Append(row)
}
tw.SetAutoFormatHeaders(false)
tw.SetAlignment(tablewriter.ALIGN_RIGHT)
tw.Render()
errs := ""
for _, databaseID := range cfg.AllDatabaseIDList {
es, ok := databaseIDToErrs[databaseID]
if !ok {
continue
}
errs = databaseID + " " + "errors:\n" + strings.Join(es, "\n") + "\n"
}
plog.Printf("saving summary data to %q", cfg.Analyze.AllAggregatedOutputPathTXT)
stxt := buf.String()
if errs != "" {
stxt += "\n" + "\n" + errs
}
if err := toFile(stxt, changeExtToTxt(cfg.Analyze.AllAggregatedOutputPathTXT)); err != nil {
return err
}
// KEYS, MIN-LATENCY-MS, AVG-LATENCY-MS, MAX-LATENCY-MS
plog.Printf("combining data to %q", cfg.AllLatencyByKey)
plog.Info("combining all latency data by keys")
allLatencyFrame := dataframe.New()
for _, elem := range cfg.RawData {
fr, err := dataframe.NewFromCSV(nil, elem.DataBenchmarkLatencyByKey)
for _, databaseID := range cfg.AllDatabaseIDList {
testdata := cfg.DatabaseIDToTestData[databaseID]
fr, err := dataframe.NewFromCSV(nil, testdata.ClientLatencyByKeyNumberPath)
if err != nil {
return err
}
@ -532,7 +580,7 @@ func do(configPath string) error {
if err != nil {
return err
}
colKeys.UpdateHeader(makeHeader("KEYS", makeTag(elem.Legend)))
colKeys.UpdateHeader(makeHeader("KEYS", testdata.DatabaseTag))
if err = allLatencyFrame.AddColumn(colKeys); err != nil {
return err
}
@ -541,7 +589,7 @@ func do(configPath string) error {
if err != nil {
return err
}
colMinLatency.UpdateHeader(makeHeader("MIN-LATENCY-MS", makeTag(elem.Legend)))
colMinLatency.UpdateHeader(makeHeader("MIN-LATENCY-MS", testdata.DatabaseTag))
if err = allLatencyFrame.AddColumn(colMinLatency); err != nil {
return err
}
@ -550,7 +598,7 @@ func do(configPath string) error {
if err != nil {
return err
}
colAvgLatency.UpdateHeader(makeHeader("AVG-LATENCY-MS", makeTag(elem.Legend)))
colAvgLatency.UpdateHeader(makeHeader("AVG-LATENCY-MS", testdata.DatabaseTag))
if err = allLatencyFrame.AddColumn(colAvgLatency); err != nil {
return err
}
@ -559,16 +607,60 @@ func do(configPath string) error {
if err != nil {
return err
}
colMaxLatency.UpdateHeader(makeHeader("MAX-LATENCY-MS", makeTag(elem.Legend)))
colMaxLatency.UpdateHeader(makeHeader("MAX-LATENCY-MS", testdata.DatabaseTag))
if err = allLatencyFrame.AddColumn(colMaxLatency); err != nil {
return err
}
}
if err := allLatencyFrame.CSV(cfg.AllLatencyByKey); err != nil {
// KEYS, MIN-VMRSS-MB, AVG-VMRSS-MB, MAX-VMRSS-MB
plog.Info("combining all server memory usage by keys")
allMemoryFrame := dataframe.New()
for _, databaseID := range cfg.AllDatabaseIDList {
testdata := cfg.DatabaseIDToTestData[databaseID]
fr, err := dataframe.NewFromCSV(nil, testdata.ServerMemoryByKeyNumberPath)
if err != nil {
return err
}
colKeys, err := fr.Column("KEYS")
if err != nil {
return err
}
colKeys.UpdateHeader(makeHeader("KEYS", testdata.DatabaseTag))
if err = allMemoryFrame.AddColumn(colKeys); err != nil {
return err
}
colMemMin, err := fr.Column("MIN-VMRSS-MB")
if err != nil {
return err
}
colMemMin.UpdateHeader(makeHeader("MIN-VMRSS-MB", testdata.DatabaseTag))
if err = allMemoryFrame.AddColumn(colMemMin); err != nil {
return err
}
colMem, err := fr.Column("AVG-VMRSS-MB")
if err != nil {
return err
}
colMem.UpdateHeader(makeHeader("AVG-VMRSS-MB", testdata.DatabaseTag))
if err = allMemoryFrame.AddColumn(colMem); err != nil {
return err
}
colMemMax, err := fr.Column("MAX-VMRSS-MB")
if err != nil {
return err
}
colMemMax.UpdateHeader(makeHeader("MAX-VMRSS-MB", testdata.DatabaseTag))
if err = allMemoryFrame.AddColumn(colMemMax); err != nil {
return err
}
}
{
allLatencyFrameCfg := PlotConfig{
allLatencyFrameCfg := dbtester.Plot{
Column: "AVG-LATENCY-MS",
XAxis: "Cumulative Number of Keys",
YAxis: "Latency(millisecond) by Keys",
@ -604,7 +696,7 @@ func do(configPath string) error {
}
{
// with error points
allLatencyFrameCfg := PlotConfig{
allLatencyFrameCfg := dbtester.Plot{
Column: "AVG-LATENCY-MS",
XAxis: "Cumulative Number of Keys",
YAxis: "Latency(millisecond) by Keys",
@ -646,56 +738,8 @@ func do(configPath string) error {
return err
}
}
// KEYS, MIN-VMRSS-MB, AVG-VMRSS-MB, MAX-VMRSS-MB
plog.Printf("combining data to %q", cfg.AllMemoryByKey)
allMemoryFrame := dataframe.New()
for _, elem := range cfg.RawData {
fr, err := dataframe.NewFromCSV(nil, elem.DataBenchmarkMemoryByKey)
if err != nil {
return err
}
colKeys, err := fr.Column("KEYS")
if err != nil {
return err
}
colKeys.UpdateHeader(makeHeader("KEYS", makeTag(elem.Legend)))
if err = allMemoryFrame.AddColumn(colKeys); err != nil {
return err
}
colMemMin, err := fr.Column("MIN-VMRSS-MB")
if err != nil {
return err
}
colMemMin.UpdateHeader(makeHeader("MIN-VMRSS-MB", makeTag(elem.Legend)))
if err = allMemoryFrame.AddColumn(colMemMin); err != nil {
return err
}
colMem, err := fr.Column("AVG-VMRSS-MB")
if err != nil {
return err
}
colMem.UpdateHeader(makeHeader("AVG-VMRSS-MB", makeTag(elem.Legend)))
if err = allMemoryFrame.AddColumn(colMem); err != nil {
return err
}
colMemMax, err := fr.Column("MAX-VMRSS-MB")
if err != nil {
return err
}
colMemMax.UpdateHeader(makeHeader("MAX-VMRSS-MB", makeTag(elem.Legend)))
if err = allMemoryFrame.AddColumn(colMemMax); err != nil {
return err
}
}
if err := allMemoryFrame.CSV(cfg.AllMemoryByKey); err != nil {
return err
}
{
allMemoryFrameCfg := PlotConfig{
allMemoryFrameCfg := dbtester.Plot{
Column: "AVG-VMRSS-MB",
XAxis: "Cumulative Number of Keys",
YAxis: "Memory(MB) by Keys",
@ -731,7 +775,7 @@ func do(configPath string) error {
}
{
// with error points
allMemoryFrameCfg := PlotConfig{
allMemoryFrameCfg := dbtester.Plot{
Column: "AVG-VMRSS-MB",
XAxis: "Cumulative Number of Keys",
YAxis: "Memory(MB) by Keys",
@ -781,7 +825,8 @@ func do(configPath string) error {
var pairs []pair
var dataColumns []dataframe.Column
for i, ad := range all.data {
tag := all.databaseTags[i]
databaseID := all.allDatabaseIDList[i]
tag := cfg.DatabaseIDToTestGroup[databaseID].DatabaseTag
avgCol, err := ad.aggregated.Column("CONTROL-CLIENT-NUM")
if err != nil {
@ -807,7 +852,7 @@ func do(configPath string) error {
if err != nil {
return err
}
if err = nf1.CSV(filepath.Join(cfg.WorkDir, plotConfig.Column+".csv")); err != nil {
if err = nf1.CSV(plotConfig.OutputPathCSV); err != nil {
return err
}
@ -829,10 +874,11 @@ func do(configPath string) error {
return err
}
}
if err = nf2.CSV(filepath.Join(cfg.WorkDir, plotConfig.Column+"-BY-CLIENT-NUM"+".csv")); err != nil {
if err = nf2.CSV(filepath.Join(filepath.Dir(plotConfig.OutputPathCSV), plotConfig.Column+"-BY-CLIENT-NUM"+".csv")); err != nil {
return err
}
if len(cfg.DatabaseIDToTestGroup[cfg.AllDatabaseIDList[0]].BenchmarkOptions.ConnectionClientNumbers) > 0 {
plog.Printf("aggregating data for %q of all database (by client number)", plotConfig.Column)
nf3 := dataframe.New()
var firstKeys []int
@ -888,25 +934,13 @@ func do(configPath string) error {
return err
}
}
if err = nf3.CSV(filepath.Join(cfg.WorkDir, plotConfig.Column+"-BY-CLIENT-NUM-aggregated"+".csv")); err != nil {
if err = nf3.CSV(filepath.Join(filepath.Dir(plotConfig.OutputPathCSV), plotConfig.Column+"-BY-CLIENT-NUM-aggregated"+".csv")); err != nil {
return err
}
}
buf := new(bytes.Buffer)
tw := tablewriter.NewWriter(buf)
tw.SetHeader(aggRows[0])
for _, row := range aggRows[1:] {
tw.Append(row)
}
tw.SetAutoFormatHeaders(false)
tw.SetAlignment(tablewriter.ALIGN_RIGHT)
tw.Render()
if err := toFile(buf.String(), changeExtToTxt(cfg.AllAggregatedPath)); err != nil {
return err
}
plog.Printf("writing README at %q", cfg.READMEConfig.OutputPath)
return writeREADME(buf.String(), cfg.READMEConfig)
return cfg.WriteREADME(stxt)
}
func changeExtToTxt(fpath string) string {

View File

@ -35,6 +35,10 @@ func maxFloat64(a, b float64) float64 {
return b
}
func makeHeader(column string, tag string) string {
return fmt.Sprintf("%s-%s", column, tag)
}
// converts unix nanoseconds to unix second.
func convertUnixNano(ts int64) int64 {
return int64(ts / 1e9)

View File

@ -1,58 +0,0 @@
database: etcdv3
test_name: etcd-v3.1-go1.7.4
peer_ips:
- 10.240.0.20
- 10.240.0.21
- 10.240.0.22
agent_port: 3500
database_port: 2379
# these will saved where 'dbtester control' command runs
log: control.log
data_size_summary: data-size-summary.csv
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
data_latency_by_key_number: data-latency-by-key-number.csv
# client machine's system metrics
client_system_metrics: client-system-metrics.csv
client_system_metrics_interpolated: client-system-metrics-interpolated.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
etcd_quota_size_bytes: 8000000000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1
clients: 1
# if specified, connections, clients are overwritten
connections_clients: [1, 10, 50, 100, 300, 500, 700, 1000]
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop
# upload logs
step4:
upload_logs: true
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable

View File

@ -1,58 +0,0 @@
database: zookeeper
test_name: zookeeper-r3.4.9-java8
peer_ips:
- 10.240.0.25
- 10.240.0.27
- 10.240.0.28
agent_port: 3500
database_port: 2181
# these will saved where 'dbtester control' command runs
log: control.log
data_size_summary: data-size-summary.csv
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
data_latency_by_key_number: data-latency-by-key-number.csv
# client machine's system metrics
client_system_metrics: client-system-metrics.csv
client_system_metrics_interpolated: client-system-metrics-interpolated.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
etcd_quota_size_bytes: 8000000000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1
clients: 1
# if specified, connections, clients are overwritten
connections_clients: [1, 10, 50, 100, 300, 500, 700, 1000]
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop
# upload logs
step4:
upload_logs: true
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable

View File

@ -1,58 +0,0 @@
database: consul
test_name: consul-v0.7.3-go1.7.4
peer_ips:
- 10.240.0.30
- 10.240.0.31
- 10.240.0.33
agent_port: 3500
database_port: 8500
# these will saved where 'dbtester control' command runs
log: control.log
data_size_summary: data-size-summary.csv
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
data_latency_by_key_number: data-latency-by-key-number.csv
# client machine's system metrics
client_system_metrics: client-system-metrics.csv
client_system_metrics_interpolated: client-system-metrics-interpolated.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
etcd_quota_size_bytes: 8000000000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1
clients: 1
# if specified, connections, clients are overwritten
connections_clients: [1, 10, 50, 100, 300, 500, 700, 1000]
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop
# upload logs
step4:
upload_logs: true
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable

View File

@ -1,216 +0,0 @@
title: Write 1M keys, 256-byte key, 1KB value value, clients 1 to 1,000
work_dir: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable
all_aggregated_path: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/aggregated.csv
all_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/aggregated-data-latency-by-key-number.csv
all_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/aggregated-data-memory-by-key-number.csv
total_requests: 1000000
raw_data:
- legend: etcd v3.1 (Go 1.7.4)
output_path: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-aggregated.csv
data_interpolated_system_metrics_paths:
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-1-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-2-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-3-system-metrics-interpolated.csv
data_size_summary: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-size-summary.csv
data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-by-key-number.csv
data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-memory-by-key-number.csv
client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-client-system-metrics-interpolated.csv
- legend: Zookeeper r3.4.9 (Java 8)
output_path: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-aggregated.csv
data_interpolated_system_metrics_paths:
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-1-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-2-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-3-system-metrics-interpolated.csv
data_size_summary: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-size-summary.csv
data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-by-key-number.csv
data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-memory-by-key-number.csv
client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-client-system-metrics-interpolated.csv
- legend: Consul v0.7.3 (Go 1.7.4)
output_path: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-aggregated.csv
data_interpolated_system_metrics_paths:
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-1-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-2-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-3-system-metrics-interpolated.csv
data_size_summary: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-data-size-summary.csv
data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-data-latency-throughput-timeseries.csv
data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-data-latency-by-key-number.csv
data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-data-memory-by-key-number.csv
client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-client-system-metrics-interpolated.csv
plot_list:
- column: AVG-LATENCY-MS
x_axis: Second
y_axis: Latency(millisecond)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.svg
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.png
- column: AVG-THROUGHPUT
x_axis: Second
y_axis: Throughput(Requests/Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.svg
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.png
- column: AVG-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Voluntary Context Switches
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Non-voluntary Context Switches
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-CPU
x_axis: Second
y_axis: CPU(%)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.svg
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.png
- column: AVG-VMRSS-MB
x_axis: Second
y_axis: Memory(MB)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.svg
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.png
- column: AVG-READS-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Reads (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.png
- column: AVG-SECTORS-READ-DELTA
x_axis: Second
y_axis: Sectors Read (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.png
- column: AVG-WRITES-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Writes (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.png
- column: AVG-SECTORS-WRITTEN-DELTA
x_axis: Second
y_axis: Sectors Written (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.png
- column: AVG-RECEIVE-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Receive(bytes) (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.png
- column: AVG-TRANSMIT-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Transmit(bytes) (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.png
readme:
preface: |
- Google Cloud Compute Engine
- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- Ubuntu 16.10
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.3 (Go 1.7.4)
output_path: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/README.md
results:
- title: Write 1M keys, 256-byte key, 1KB value value, clients 1 to 1,000
images:
- image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
image_type: remote

View File

@ -1,57 +0,0 @@
database: etcdv3
test_name: etcd-v3.1-go1.7.4
peer_ips:
- 10.240.0.20
- 10.240.0.21
- 10.240.0.22
agent_port: 3500
database_port: 2379
# these will saved where 'dbtester control' command runs
log: control.log
data_size_summary: data-size-summary.csv
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
data_latency_by_key_number: data-latency-by-key-number.csv
# client machine's system metrics
client_system_metrics: client-system-metrics.csv
client_system_metrics_interpolated: client-system-metrics-interpolated.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
etcd_quota_size_bytes: 8000000000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 700 # for best throughput
clients: 700 # for best throughput
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop
# upload logs
step4:
upload_logs: true
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput

View File

@ -1,57 +0,0 @@
database: zookeeper
test_name: zookeeper-r3.4.9-java8
peer_ips:
- 10.240.0.25
- 10.240.0.27
- 10.240.0.28
agent_port: 3500
database_port: 2181
# these will saved where 'dbtester control' command runs
log: control.log
data_size_summary: data-size-summary.csv
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
data_latency_by_key_number: data-latency-by-key-number.csv
# client machine's system metrics
client_system_metrics: client-system-metrics.csv
client_system_metrics_interpolated: client-system-metrics-interpolated.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
etcd_quota_size_bytes: 8000000000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 300 # for best throughput
clients: 300 # for best throughput
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop
# upload logs
step4:
upload_logs: true
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput

View File

@ -1,57 +0,0 @@
database: consul
test_name: consul-v0.7.3-go1.7.4
peer_ips:
- 10.240.0.30
- 10.240.0.31
- 10.240.0.33
agent_port: 3500
database_port: 8500
# these will saved where 'dbtester control' command runs
log: control.log
data_size_summary: data-size-summary.csv
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
data_latency_by_key_number: data-latency-by-key-number.csv
# client machine's system metrics
client_system_metrics: client-system-metrics.csv
client_system_metrics_interpolated: client-system-metrics-interpolated.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
etcd_quota_size_bytes: 8000000000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 500 # for best throughput
clients: 500 # for best throughput
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop
# upload logs
step4:
upload_logs: true
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput

View File

@ -1,216 +0,0 @@
title: Write 1M keys, 256-byte key, 1KB value, Best Throughput (etcd 700, Zookeeper 300, Consul 500 clients)
work_dir: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput
all_aggregated_path: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/aggregated.csv
all_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/aggregated-data-latency-by-key-number.csv
all_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/aggregated-data-memory-by-key-number.csv
total_requests: 1000000
raw_data:
- legend: etcd v3.1 (Go 1.7.4)
output_path: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-aggregated.csv
data_interpolated_system_metrics_paths:
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-1-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-2-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-3-system-metrics-interpolated.csv
data_size_summary: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-data-size-summary.csv
data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-data-latency-by-key-number.csv
data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-data-memory-by-key-number.csv
client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/etcd-v3.1-go1.7.4-client-system-metrics-interpolated.csv
- legend: Zookeeper r3.4.9 (Java 8)
output_path: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-aggregated.csv
data_interpolated_system_metrics_paths:
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-1-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-2-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-3-system-metrics-interpolated.csv
data_size_summary: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-data-size-summary.csv
data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-data-latency-by-key-number.csv
data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-data-memory-by-key-number.csv
client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/zookeeper-r3.4.9-java8-client-system-metrics-interpolated.csv
- legend: Consul v0.7.3 (Go 1.7.4)
output_path: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-aggregated.csv
data_interpolated_system_metrics_paths:
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-1-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-2-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-3-system-metrics-interpolated.csv
data_size_summary: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-data-size-summary.csv
data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-data-latency-throughput-timeseries.csv
data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-data-latency-by-key-number.csv
data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-data-memory-by-key-number.csv
client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/consul-v0.7.3-go1.7.4-client-system-metrics-interpolated.csv
plot_list:
- column: AVG-LATENCY-MS
x_axis: Second
y_axis: Latency(millisecond)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS.svg
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS.png
- column: AVG-THROUGHPUT
x_axis: Second
y_axis: Throughput(Requests/Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-THROUGHPUT.svg
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-THROUGHPUT.png
- column: AVG-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Voluntary Context Switches
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Non-voluntary Context Switches
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-CPU
x_axis: Second
y_axis: CPU(%)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-CPU.svg
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-CPU.png
- column: AVG-VMRSS-MB
x_axis: Second
y_axis: Memory(MB)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB.svg
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB.png
- column: AVG-READS-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Reads (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-READS-COMPLETED-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-READS-COMPLETED-DELTA.png
- column: AVG-SECTORS-READ-DELTA
x_axis: Second
y_axis: Sectors Read (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-READ-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-READ-DELTA.png
- column: AVG-WRITES-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Writes (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-WRITES-COMPLETED-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-WRITES-COMPLETED-DELTA.png
- column: AVG-SECTORS-WRITTEN-DELTA
x_axis: Second
y_axis: Sectors Written (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-WRITTEN-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-WRITTEN-DELTA.png
- column: AVG-RECEIVE-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Receive(bytes) (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-RECEIVE-BYTES-NUM-DELTA.png
- column: AVG-TRANSMIT-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Transmit(bytes) (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-TRANSMIT-BYTES-NUM-DELTA.png
readme:
preface: |
- Google Cloud Compute Engine
- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- Ubuntu 16.10
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.3 (Go 1.7.4)
output_path: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/README.md
results:
- title: Write 1M keys, 256-byte key, 1KB value, Best Throughput (etcd 700, Zookeeper 300, Consul 500 clients)
images:
- image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-THROUGHPUT
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-THROUGHPUT.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-NON-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-CPU
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-CPU.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-READS-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-READS-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-READ-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-READ-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-WRITES-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-WRITES-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-WRITTEN-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-SECTORS-WRITTEN-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-RECEIVE-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-RECEIVE-BYTES-NUM-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-TRANSMIT-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
image_type: remote

View File

@ -1,57 +0,0 @@
database: etcdv3
test_name: etcd-v3.1-go1.7.4
peer_ips:
- 10.240.0.20
- 10.240.0.21
- 10.240.0.22
agent_port: 3500
database_port: 2379
# these will saved where 'dbtester control' command runs
log: control.log
data_size_summary: data-size-summary.csv
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
data_latency_by_key_number: data-latency-by-key-number.csv
# client machine's system metrics
client_system_metrics: client-system-metrics.csv
client_system_metrics_interpolated: client-system-metrics-interpolated.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
etcd_quota_size_bytes: 8000000000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1000
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop
# upload logs
step4:
upload_logs: true
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client

View File

@ -1,57 +0,0 @@
database: zookeeper
test_name: zookeeper-r3.4.9-java8
peer_ips:
- 10.240.0.25
- 10.240.0.27
- 10.240.0.28
agent_port: 3500
database_port: 2181
# these will saved where 'dbtester control' command runs
log: control.log
data_size_summary: data-size-summary.csv
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
data_latency_by_key_number: data-latency-by-key-number.csv
# client machine's system metrics
client_system_metrics: client-system-metrics.csv
client_system_metrics_interpolated: client-system-metrics-interpolated.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
etcd_quota_size_bytes: 8000000000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1000
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop
# upload logs
step4:
upload_logs: true
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client

View File

@ -1,57 +0,0 @@
database: consul
test_name: consul-v0.7.3-go1.7.4
peer_ips:
- 10.240.0.30
- 10.240.0.31
- 10.240.0.33
agent_port: 3500
database_port: 8500
# these will saved where 'dbtester control' command runs
log: control.log
data_size_summary: data-size-summary.csv
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
data_latency_by_key_number: data-latency-by-key-number.csv
# client machine's system metrics
client_system_metrics: client-system-metrics.csv
client_system_metrics_interpolated: client-system-metrics-interpolated.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
etcd_quota_size_bytes: 8000000000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1000
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop
# upload logs
step4:
upload_logs: true
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client

View File

@ -1,216 +0,0 @@
title: Write 1M keys, 256-byte key, 1KB value, 1,000 client
work_dir: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client
all_aggregated_path: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/aggregated.csv
all_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/aggregated-data-latency-by-key-number.csv
all_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/aggregated-data-memory-by-key-number.csv
total_requests: 1000000
raw_data:
- legend: etcd v3.1 (Go 1.7.4)
output_path: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-aggregated.csv
data_interpolated_system_metrics_paths:
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-1-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-2-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-3-system-metrics-interpolated.csv
data_size_summary: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-data-size-summary.csv
data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-data-latency-by-key-number.csv
data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-data-memory-by-key-number.csv
client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/etcd-v3.1-go1.7.4-client-system-metrics-interpolated.csv
- legend: Zookeeper r3.4.9 (Java 8)
output_path: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-aggregated.csv
data_interpolated_system_metrics_paths:
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-1-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-2-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-3-system-metrics-interpolated.csv
data_size_summary: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-data-size-summary.csv
data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-data-latency-by-key-number.csv
data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-data-memory-by-key-number.csv
client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/zookeeper-r3.4.9-java8-client-system-metrics-interpolated.csv
- legend: Consul v0.7.3 (Go 1.7.4)
output_path: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-aggregated.csv
data_interpolated_system_metrics_paths:
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-1-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-2-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-3-system-metrics-interpolated.csv
data_size_summary: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-data-size-summary.csv
data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-data-latency-throughput-timeseries.csv
data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-data-latency-by-key-number.csv
data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-data-memory-by-key-number.csv
client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/consul-v0.7.3-go1.7.4-client-system-metrics-interpolated.csv
plot_list:
- column: AVG-LATENCY-MS
x_axis: Second
y_axis: Latency(millisecond)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS.svg
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS.png
- column: AVG-THROUGHPUT
x_axis: Second
y_axis: Throughput(Requests/Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-THROUGHPUT.svg
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-THROUGHPUT.png
- column: AVG-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Voluntary Context Switches
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Non-voluntary Context Switches
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-CPU
x_axis: Second
y_axis: CPU(%)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-CPU.svg
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-CPU.png
- column: AVG-VMRSS-MB
x_axis: Second
y_axis: Memory(MB)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB.svg
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB.png
- column: AVG-READS-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Reads (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-READS-COMPLETED-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-READS-COMPLETED-DELTA.png
- column: AVG-SECTORS-READ-DELTA
x_axis: Second
y_axis: Sectors Read (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-READ-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-READ-DELTA.png
- column: AVG-WRITES-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Writes
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-WRITES-COMPLETED-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-WRITES-COMPLETED-DELTA.png
- column: AVG-SECTORS-WRITTEN-DELTA
x_axis: Second
y_axis: Sectors Written (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-WRITTEN-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-WRITTEN-DELTA.png
- column: AVG-RECEIVE-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Receive(bytes) (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-RECEIVE-BYTES-NUM-DELTA.png
- column: AVG-TRANSMIT-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Transmit(bytes) (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-TRANSMIT-BYTES-NUM-DELTA.png
readme:
preface: |
- Google Cloud Compute Engine
- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- Ubuntu 16.10
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.3 (Go 1.7.4)
output_path: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/README.md
results:
- title: Write 1M keys, 256-byte key, 1KB value, 1,000 client
images:
- image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-THROUGHPUT
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-THROUGHPUT.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-NON-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-CPU
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-CPU.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-READS-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-READS-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-READ-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-READ-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-WRITES-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-WRITES-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-WRITTEN-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-SECTORS-WRITTEN-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-RECEIVE-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-RECEIVE-BYTES-NUM-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-TRANSMIT-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
image_type: remote

View File

@ -1,56 +0,0 @@
database: etcdv3
test_name: etcd-v3.1-go1.7.4
peer_ips:
- 10.240.0.20
- 10.240.0.21
- 10.240.0.22
agent_port: 3500
database_port: 2379
# these will saved where 'dbtester control' command runs
log: control.log
data_size_summary: data-size-summary.csv
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
data_latency_by_key_number: data-latency-by-key-number.csv
# client machine's system metrics
client_system_metrics: client-system-metrics.csv
client_system_metrics_interpolated: client-system-metrics-interpolated.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 700 # for best throughput
clients: 700 # for best throughput
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop
# upload logs
step4:
upload_logs: true
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys

View File

@ -1,56 +0,0 @@
database: zookeeper
test_name: zookeeper-r3.4.9-java8
peer_ips:
- 10.240.0.25
- 10.240.0.27
- 10.240.0.28
agent_port: 3500
database_port: 2181
# these will saved where 'dbtester control' command runs
log: control.log
data_size_summary: data-size-summary.csv
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
data_latency_by_key_number: data-latency-by-key-number.csv
# client machine's system metrics
client_system_metrics: client-system-metrics.csv
client_system_metrics_interpolated: client-system-metrics-interpolated.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 300 # for best throughput
clients: 300 # for best throughput
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop
# upload logs
step4:
upload_logs: true
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys

View File

@ -1,56 +0,0 @@
database: consul
test_name: consul-v0.7.3-go1.7.4
peer_ips:
- 10.240.0.30
- 10.240.0.31
- 10.240.0.33
agent_port: 3500
database_port: 8500
# these will saved where 'dbtester control' command runs
log: control.log
data_size_summary: data-size-summary.csv
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
data_latency_by_key_number: data-latency-by-key-number.csv
# client machine's system metrics
client_system_metrics: client-system-metrics.csv
client_system_metrics_interpolated: client-system-metrics-interpolated.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 500 # for best throughput
clients: 500 # for best throughput
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop
# upload logs
step4:
upload_logs: true
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys

View File

@ -1,215 +0,0 @@
title: Write X keys, 256-byte key, 1KB value, Best Throughput (etcd 700, Zookeeper 300, Consul 500 clients)
work_dir: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys
all_aggregated_path: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/aggregated.csv
all_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/aggregated-data-latency-by-key-number.csv
all_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/aggregated-data-memory-by-key-number.csv
total_requests: ????
raw_data:
- legend: etcd v3.1 (Go 1.7.4)
output_path: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-aggregated.csv
data_interpolated_system_metrics_paths:
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-1-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-2-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-3-system-metrics-interpolated.csv
data_size_summary: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keysetcd-v3.1-go1.7.4-data-size-summary.csv
data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-data-latency-by-key-number.csv
data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-data-memory-by-key-number.csv
client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/etcd-v3.1-go1.7.4-client-system-metrics-interpolated.csv
- legend: Zookeeper r3.4.9 (Java 8)
output_path: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-aggregated.csv
data_interpolated_system_metrics_paths:
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-1-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-2-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-3-system-metrics-interpolated.csv
data_size_summary: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-data-size-summary.csv
data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-data-latency-by-key-number.csv
data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-data-memory-by-key-number.csv
client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/zookeeper-r3.4.9-java8-client-system-metrics-interpolated.csv
- legend: Consul v0.7.3 (Go 1.7.4)
output_path: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-aggregated.csv
data_interpolated_system_metrics_paths:
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-1-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-2-system-metrics-interpolated.csv
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-3-system-metrics-interpolated.csv
data_size_summary: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-data-size-summary.csv
data_benchmark_latency_percentile: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_latency_by_key: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-data-latency-by-key-number.csv
data_benchmark_memory_by_key: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-data-memory-by-key-number.csv
client_system_metrics_interpolated: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/consul-v0.7.3-go1.7.4-client-system-metrics-interpolated.csv
plot_list:
- column: AVG-LATENCY-MS
x_axis: Second
y_axis: Latency(millisecond)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS.svg
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS.png
- column: AVG-THROUGHPUT
x_axis: Second
y_axis: Throughput(Requests/Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-THROUGHPUT.svg
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-THROUGHPUT.png
- column: AVG-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Voluntary Context Switches
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Non-voluntary Context Switches
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-CPU
x_axis: Second
y_axis: CPU(%)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-CPU.svg
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-CPU.png
- column: AVG-VMRSS-MB
x_axis: Second
y_axis: Memory(MB)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB.svg
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB.png
- column: AVG-READS-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Reads (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-READS-COMPLETED-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-READS-COMPLETED-DELTA.png
- column: AVG-SECTORS-READ-DELTA
x_axis: Second
y_axis: Sectors Read (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-READ-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-READ-DELTA.png
- column: AVG-WRITES-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Writes (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-WRITES-COMPLETED-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-WRITES-COMPLETED-DELTA.png
- column: AVG-SECTORS-WRITTEN-DELTA
x_axis: Second
y_axis: Sectors Written (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-WRITTEN-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-WRITTEN-DELTA.png
- column: AVG-RECEIVE-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Receive(bytes) (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-RECEIVE-BYTES-NUM-DELTA.png
- column: AVG-TRANSMIT-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Transmit(bytes) (Delta per Second)
output_path_list:
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.png
readme:
preface: |
- Google Cloud Compute Engine
- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- Ubuntu 16.10
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.3 (Go 1.7.4)
output_path: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/README.md
results:
- title: Write X keys, 256-byte key, 1KB value, Best Throughput (etcd 700, Zookeeper 300, Consul 500 clients)
images:
- image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-THROUGHPUT
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-THROUGHPUT.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-CPU
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-CPU.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-READS-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-READS-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-READ-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-READ-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-WRITES-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-WRITES-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-WRITTEN-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-SECTORS-WRITTEN-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-RECEIVE-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg
image_type: remote
- image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-TRANSMIT-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
image_type: remote

View File

@ -1,47 +0,0 @@
database: etcdv3
test_name: etcd-v3.1-go1.7.4
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys
peer_ips:
- 10.240.0.20
- 10.240.0.21
- 10.240.0.22
agent_port: 3500
database_port: 2379
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 100
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,47 +0,0 @@
database: zookeeper
test_name: zookeeper-r3.4.9-java8
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys
peer_ips:
- 10.240.0.25
- 10.240.0.27
- 10.240.0.28
agent_port: 3500
database_port: 2181
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1000
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,47 +0,0 @@
database: consul
test_name: consul-v0.7.2-go1.7.4
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys
peer_ips:
- 10.240.0.30
- 10.240.0.31
- 10.240.0.33
agent_port: 3500
database_port: 8500
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1000
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,185 +0,0 @@
title: Write 1M keys, 1000-client, 256-byte key, 1KB value
work_dir: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys
all_aggregated_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/aggregated.csv
raw_data:
- legend: etcd v3.1 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
- legend: Zookeeper r3.4.9 (Java 8)
output_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
- legend: Consul v0.7.2 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-throughput-timeseries.csv
plot_list:
- column: AVG-LATENCY-MS
x_axis: Second
y_axis: Latency(millisecond)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS.png
- column: AVG-THROUGHPUT
x_axis: Second
y_axis: Throughput(Requests/Second)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT.png
- column: AVG-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Voluntary Context Switches
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Non-voluntary Context Switches
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-CPU
x_axis: Second
y_axis: CPU(%)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU.png
- column: AVG-VMRSS-MB
x_axis: Second
y_axis: Memory(MB)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB.png
- column: AVG-READS-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Reads
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA.png
- column: AVG-SECTORS-READ-DELTA
x_axis: Second
y_axis: Sectors Read
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA.png
- column: AVG-WRITES-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Writes
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.png
- column: AVG-SECTORS-WRITTEN-DELTA
x_axis: Second
y_axis: Sectors Written
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.png
- column: AVG-RECEIVE-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Receive(bytes)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.png
- column: AVG-TRANSMIT-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Transmit(bytes)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.png
readme:
preface: |
- Google Cloud Compute Engine
- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- Ubuntu 16.10
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.2 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/README.md
results:
- title: Write 1M keys, 1000-client, 256-byte key, 1KB value
images:
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
image_type: remote

View File

@ -1,47 +0,0 @@
database: etcdv3
test_name: etcd-v3.1-go1.7.4
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited
peer_ips:
- 10.240.0.20
- 10.240.0.21
- 10.240.0.22
agent_port: 3500
database_port: 2379
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 100
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 1000
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,47 +0,0 @@
database: zookeeper
test_name: zookeeper-r3.4.9-java8
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited
peer_ips:
- 10.240.0.25
- 10.240.0.27
- 10.240.0.28
agent_port: 3500
database_port: 2181
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1000
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 1000
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,47 +0,0 @@
database: consul
test_name: consul-v0.7.2-go1.7.4
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited
peer_ips:
- 10.240.0.30
- 10.240.0.31
- 10.240.0.33
agent_port: 3500
database_port: 8500
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1000
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 1000
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,185 +0,0 @@
title: Write 1M keys, 1000-client, 1000QPS, 256-byte key, 1KB value
work_dir: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited
all_aggregated_path: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/aggregated.csv
raw_data:
- legend: etcd v3.1 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
- legend: Zookeeper r3.4.9 (Java 8)
output_path: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
- legend: Consul v0.7.2 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-data-latency-throughput-timeseries.csv
plot_list:
- column: AVG-LATENCY-MS
x_axis: Second
y_axis: Latency(millisecond)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-LATENCY-MS.svg
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-LATENCY-MS.png
- column: AVG-THROUGHPUT
x_axis: Second
y_axis: Throughput(Requests/Second)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-THROUGHPUT.svg
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-THROUGHPUT.png
- column: AVG-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Voluntary Context Switches
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Non-voluntary Context Switches
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-CPU
x_axis: Second
y_axis: CPU(%)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-CPU.svg
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-CPU.png
- column: AVG-VMRSS-MB
x_axis: Second
y_axis: Memory(MB)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VMRSS-MB.svg
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VMRSS-MB.png
- column: AVG-READS-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Reads
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA.png
- column: AVG-SECTORS-READ-DELTA
x_axis: Second
y_axis: Sectors Read
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA.png
- column: AVG-WRITES-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Writes
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA.png
- column: AVG-SECTORS-WRITTEN-DELTA
x_axis: Second
y_axis: Sectors Written
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA.png
- column: AVG-RECEIVE-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Receive(bytes)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA.png
- column: AVG-TRANSMIT-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Transmit(bytes)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA.png
readme:
preface: |
- Google Cloud Compute Engine
- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- Ubuntu 16.10
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.2 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/README.md
results:
- title: Write 1M keys, 1000-client, 1000QPS, 256-byte key, 1KB value
images:
- image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-LATENCY-MS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-LATENCY-MS.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-THROUGHPUT
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-THROUGHPUT.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-CPU
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-CPU.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VMRSS-MB
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VMRSS-MB.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
image_type: remote

View File

@ -1,48 +0,0 @@
database: etcdv3
test_name: etcd-v3.1-go1.7.4
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable
peer_ips:
- 10.240.0.20
- 10.240.0.21
- 10.240.0.22
agent_port: 3500
database_port: 2379
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1
clients: 1
# if specified, connections, clients are overwritten
connections_clients: [1, 3, 5, 10, 50, 100, 500, 700, 1000]
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,48 +0,0 @@
database: zookeeper
test_name: zookeeper-r3.4.9-java8
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable
peer_ips:
- 10.240.0.25
- 10.240.0.27
- 10.240.0.28
agent_port: 3500
database_port: 2181
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1
clients: 1
# if specified, connections, clients are overwritten
connections_clients: [1, 3, 5, 10, 50, 100, 500, 700, 1000]
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,48 +0,0 @@
database: consul
test_name: consul-v0.7.2-go1.7.4
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable
peer_ips:
- 10.240.0.30
- 10.240.0.31
- 10.240.0.33
agent_port: 3500
database_port: 8500
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1
clients: 1
# if specified, connections, clients are overwritten
connections_clients: [1, 3, 5, 10, 50, 100, 500, 700, 1000]
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,185 +0,0 @@
title: Write 1M keys, 256-byte key, 1KB value value (clients 1 to 1000)
work_dir: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable
all_aggregated_path: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/aggregated.csv
raw_data:
- legend: etcd v3.1 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
- legend: Zookeeper r3.4.9 (Java 8)
output_path: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
- legend: Consul v0.7.2 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-data-latency-throughput-timeseries.csv
plot_list:
- column: AVG-LATENCY-MS
x_axis: Second
y_axis: Latency(millisecond)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-LATENCY-MS.svg
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-LATENCY-MS.png
- column: AVG-THROUGHPUT
x_axis: Second
y_axis: Throughput(Requests/Second)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-THROUGHPUT.svg
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-THROUGHPUT.png
- column: AVG-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Voluntary Context Switches
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Non-voluntary Context Switches
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-CPU
x_axis: Second
y_axis: CPU(%)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-CPU.svg
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-CPU.png
- column: AVG-VMRSS-MB
x_axis: Second
y_axis: Memory(MB)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VMRSS-MB.svg
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VMRSS-MB.png
- column: AVG-READS-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Reads
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.png
- column: AVG-SECTORS-READ-DELTA
x_axis: Second
y_axis: Sectors Read
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.png
- column: AVG-WRITES-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Writes
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.png
- column: AVG-SECTORS-WRITTEN-DELTA
x_axis: Second
y_axis: Sectors Written
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.png
- column: AVG-RECEIVE-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Receive(bytes)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.png
- column: AVG-TRANSMIT-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Transmit(bytes)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.png
readme:
preface: |
- Google Cloud Compute Engine
- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- Ubuntu 16.10
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.2 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/README.md
results:
- title: Write 1M keys, 256-byte key, 1KB value value (clients 1 to 1000)
images:
- image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-LATENCY-MS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-LATENCY-MS.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-THROUGHPUT
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-THROUGHPUT.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-CPU
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-CPU.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VMRSS-MB
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VMRSS-MB.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
image_type: remote

View File

@ -1,47 +0,0 @@
database: etcdv3
test_name: etcd-v3.1-go1.7.4
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys
peer_ips:
- 10.99.157.131
- 10.99.157.133
- 10.99.157.137
agent_port: 3500
database_port: 2379
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1000
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,47 +0,0 @@
database: zookeeper
test_name: zookeeper-r3.4.9-java8
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys
peer_ips:
- 10.99.157.153
- 10.99.157.135
- 10.99.157.143
agent_port: 3500
database_port: 2181
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1000
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,47 +0,0 @@
database: consul
test_name: consul-v0.7.2-go1.7.4
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys
peer_ips:
- 10.99.157.149
- 10.99.157.141
- 10.99.157.145
agent_port: 3500
database_port: 8500
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1000
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,185 +0,0 @@
title: Write 1M keys, 1000-client, 256-byte key, 1KB value
work_dir: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys
all_aggregated_path: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/aggregated.csv
raw_data:
- legend: etcd v3.1 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/etcd-v3.1-go1.7.4-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/etcd-v3.1-go1.7.4-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/etcd-v3.1-go1.7.4-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/etcd-v3.1-go1.7.4-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
- legend: Zookeeper r3.4.9 (Java 8)
output_path: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/zookeeper-r3.4.9-java8-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/zookeeper-r3.4.9-java8-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/zookeeper-r3.4.9-java8-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/zookeeper-r3.4.9-java8-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
- legend: Consul v0.7.2 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/consul-v0.7.2-go1.7.4-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/consul-v0.7.2-go1.7.4-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/consul-v0.7.2-go1.7.4-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/consul-v0.7.2-go1.7.4-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/consul-v0.7.2-go1.7.4-data-latency-throughput-timeseries.csv
plot_list:
- column: AVG-LATENCY-MS
x_axis: Second
y_axis: Latency(millisecond)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-LATENCY-MS.svg
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-LATENCY-MS.png
- column: AVG-THROUGHPUT
x_axis: Second
y_axis: Throughput(Requests/Second)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-THROUGHPUT.svg
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-THROUGHPUT.png
- column: AVG-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Voluntary Context Switches
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Non-voluntary Context Switches
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-CPU
x_axis: Second
y_axis: CPU(%)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-CPU.svg
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-CPU.png
- column: AVG-VMRSS-MB
x_axis: Second
y_axis: Memory(MB)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VMRSS-MB.svg
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VMRSS-MB.png
- column: AVG-READS-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Reads
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-READS-COMPLETED-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-READS-COMPLETED-DELTA.png
- column: AVG-SECTORS-READ-DELTA
x_axis: Second
y_axis: Sectors Read
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-READ-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-READ-DELTA.png
- column: AVG-WRITES-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Writes
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.png
- column: AVG-SECTORS-WRITTEN-DELTA
x_axis: Second
y_axis: Sectors Written
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.png
- column: AVG-RECEIVE-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Receive(bytes)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.png
- column: AVG-TRANSMIT-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Transmit(bytes)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.png
readme:
preface: |
- Packet Bare Metal
- 4 machines of 16 Physical Cores @ 2.6 GHz + 128 GB DDR4 RAM + 120 GB SSD + 20Gbps Bonded Network (1 for client)
- Ubuntu 16.04
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.2 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/README.md
results:
- title: Write 1M keys, 1000-client, 256-byte key, 1KB value
images:
- image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-LATENCY-MS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-LATENCY-MS.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-THROUGHPUT
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-THROUGHPUT.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-CPU
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-CPU.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VMRSS-MB
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VMRSS-MB.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-READS-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-READS-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-READ-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-READ-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-WRITES-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
image_type: remote

View File

@ -1,47 +0,0 @@
database: etcdv3
test_name: etcd-v3.1-go1.7.4
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited
peer_ips:
- 10.99.157.131
- 10.99.157.133
- 10.99.157.137
agent_port: 3500
database_port: 2379
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1000
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 1000
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,47 +0,0 @@
database: zookeeper
test_name: zookeeper-r3.4.9-java8
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited
peer_ips:
- 10.99.157.153
- 10.99.157.135
- 10.99.157.143
agent_port: 3500
database_port: 2181
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1000
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 1000
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,47 +0,0 @@
database: consul
test_name: consul-v0.7.2-go1.7.4
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited
peer_ips:
- 10.99.157.149
- 10.99.157.141
- 10.99.157.145
agent_port: 3500
database_port: 8500
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1000
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 1000
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,185 +0,0 @@
title: Write 1M keys, 1000-client, 1000QPS, 256-byte key, 1KB value
work_dir: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited
all_aggregated_path: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/aggregated.csv
raw_data:
- legend: etcd v3.1 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
- legend: Zookeeper r3.4.9 (Java 8)
output_path: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
- legend: Consul v0.7.2 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/consul-v0.7.2-go1.7.4-data-latency-throughput-timeseries.csv
plot_list:
- column: AVG-LATENCY-MS
x_axis: Second
y_axis: Latency(millisecond)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-LATENCY-MS.svg
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-LATENCY-MS.png
- column: AVG-THROUGHPUT
x_axis: Second
y_axis: Throughput(Requests/Second)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-THROUGHPUT.svg
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-THROUGHPUT.png
- column: AVG-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Voluntary Context Switches
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Non-voluntary Context Switches
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-CPU
x_axis: Second
y_axis: CPU(%)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-CPU.svg
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-CPU.png
- column: AVG-VMRSS-MB
x_axis: Second
y_axis: Memory(MB)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VMRSS-MB.svg
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VMRSS-MB.png
- column: AVG-READS-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Reads
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA.png
- column: AVG-SECTORS-READ-DELTA
x_axis: Second
y_axis: Sectors Read
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA.png
- column: AVG-WRITES-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Writes
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA.png
- column: AVG-SECTORS-WRITTEN-DELTA
x_axis: Second
y_axis: Sectors Written
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA.png
- column: AVG-RECEIVE-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Receive(bytes)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA.png
- column: AVG-TRANSMIT-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Transmit(bytes)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA.png
readme:
preface: |
- Packet Bare Metal
- 4 machines of 16 Physical Cores @ 2.6 GHz + 128 GB DDR4 RAM + 120 GB SSD + 20Gbps Bonded Network (1 for client)
- Ubuntu 16.04
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.2 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/README.md
results:
- title: Write 1M keys, 1000-client, 1000QPS, 256-byte key, 1KB value
images:
- image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-LATENCY-MS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-LATENCY-MS.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-THROUGHPUT
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-THROUGHPUT.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-CPU
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-CPU.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VMRSS-MB
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VMRSS-MB.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
image_type: remote

View File

@ -1,48 +0,0 @@
database: etcdv3
test_name: etcd-v3.1-go1.7.4
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable
peer_ips:
- 10.99.157.131
- 10.99.157.133
- 10.99.157.137
agent_port: 3500
database_port: 2379
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1
clients: 1
# if specified, connections, clients are overwritten
connections_clients: [1, 3, 5, 10, 50, 100, 500, 700, 1000]
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,48 +0,0 @@
database: zookeeper
test_name: zookeeper-r3.4.9-java8
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable
peer_ips:
- 10.99.157.153
- 10.99.157.135
- 10.99.157.143
agent_port: 3500
database_port: 2181
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1
clients: 1
# if specified, connections, clients are overwritten
connections_clients: [1, 3, 5, 10, 50, 100, 500, 700, 1000]
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,48 +0,0 @@
database: consul
test_name: consul-v0.7.2-go1.7.4
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /root/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable
peer_ips:
- 10.99.157.149
- 10.99.157.141
- 10.99.157.145
agent_port: 3500
database_port: 8500
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1
clients: 1
# if specified, connections, clients are overwritten
connections_clients: [1, 3, 5, 10, 50, 100, 500, 700, 1000]
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,185 +0,0 @@
title: Write 1M keys, 256-byte key, 1KB value value (clients 1 to 1000)
work_dir: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable
all_aggregated_path: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/aggregated.csv
raw_data:
- legend: etcd v3.1 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-data-latency-throughput-timeseries.csv
- legend: Zookeeper r3.4.9 (Java 8)
output_path: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-data-latency-throughput-timeseries.csv
- legend: Consul v0.7.2 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-aggregated.csv
data_system_metrics_paths:
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-1-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-2-system-metrics.csv
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-3-system-metrics.csv
data_benchmark_latency_percentile: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-data-latency-distribution-percentile.csv
data_benchmark_latency_summary: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-data-latency-distribution-summary.csv
data_benchmark_throughput: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/consul-v0.7.2-go1.7.4-data-latency-throughput-timeseries.csv
plot_list:
- column: AVG-LATENCY-MS
x_axis: Second
y_axis: Latency(millisecond)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-LATENCY-MS.svg
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-LATENCY-MS.png
- column: AVG-THROUGHPUT
x_axis: Second
y_axis: Throughput(Requests/Second)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-THROUGHPUT.svg
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-THROUGHPUT.png
- column: AVG-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Voluntary Context Switches
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Non-voluntary Context Switches
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png
- column: AVG-CPU
x_axis: Second
y_axis: CPU(%)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-CPU.svg
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-CPU.png
- column: AVG-VMRSS-MB
x_axis: Second
y_axis: Memory(MB)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VMRSS-MB.svg
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VMRSS-MB.png
- column: AVG-READS-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Reads
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.png
- column: AVG-SECTORS-READ-DELTA
x_axis: Second
y_axis: Sectors Read
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.png
- column: AVG-WRITES-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Writes
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.png
- column: AVG-SECTORS-WRITTEN-DELTA
x_axis: Second
y_axis: Sectors Written
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.png
- column: AVG-RECEIVE-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Receive(bytes)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.png
- column: AVG-TRANSMIT-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Transmit(bytes)
output_path_list:
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
- 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.png
readme:
preface: |
- Packet Bare Metal
- 4 machines of 16 Physical Cores @ 2.6 GHz + 128 GB DDR4 RAM + 120 GB SSD + 20Gbps Bonded Network (1 for client)
- Ubuntu 16.04
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.2 (Go 1.7.4)
output_path: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/README.md
results:
- title: Write 1M keys, 256-byte key, 1KB value value (clients 1 to 1000)
images:
- image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-LATENCY-MS
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-LATENCY-MS.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-THROUGHPUT
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-THROUGHPUT.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-CPU
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-CPU.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VMRSS-MB
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VMRSS-MB.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg
image_type: remote
- image_title: 2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA
image_path: https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
image_type: remote

View File

@ -1,47 +0,0 @@
database: etcdv3
test_name: etcd-v3.1-go1.7.4
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/read-1M-keys-linearizable
peer_ips:
- 10.240.0.20
- 10.240.0.21
- 10.240.0.22
agent_port: 3500
database_port: 2379
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: read
stale_read: false
connections: 1000
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,47 +0,0 @@
database: zookeeper
test_name: zookeeper-r3.4.9-java8
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/read-1M-keys-linearizable
peer_ips:
- 10.240.0.25
- 10.240.0.27
- 10.240.0.28
agent_port: 3500
database_port: 2181
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: read
stale_read: false
connections: 1000
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,47 +0,0 @@
database: consul
test_name: consul-v0.7.2-go1.7.4
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: /home/gyuho/gcloud-key.json # need this only in 'control' side
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/read-1M-keys-linearizable
peer_ips:
- 10.240.0.30
- 10.240.0.31
- 10.240.0.33
agent_port: 3500
database_port: 8500
# these will saved where 'dbtester control' command runs
log: control.log
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: read
stale_read: false
connections: 1000
clients: 1000
connections_clients: []
key_size: 256
value_size: 1024
total_requests: 1000000
requests_per_second: 0
etcdv3_compaction_cycle: 0
# after benchmark
step3:
action: stop

View File

@ -1,425 +0,0 @@
<br><br><hr>
##### Write 1M keys, 1000-client, 256-byte key, 1KB value
- Google Cloud Compute Engine
- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- Ubuntu 16.10
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.2 (Go 1.7.4)
```
+----------------------------+--------------------+------------------------+-----------------------+
| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.2-go1.7.4 |
+----------------------------+--------------------+------------------------+-----------------------+
| READS-COMPLETED-DELTA | 6 | 311 | 15 |
| SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
| WRITES-COMPLETED-DELTA-SUM | 98301 | 86583 | 941248 |
| SECTORS-WRITTEN-DELTA-SUM | 565344 | 9223784 | 41419484 |
| RECEIVE-BYTES-SUM | 5.0 GB | 5.4 GB | 7.8 GB |
| TRANSMIT-BYTES-SUM | 3.8 GB | 4.3 GB | 6.5 GB |
| MAX-CPU-USAGE | 291.56 % | 363.65 % | 226.18 % |
| MAX-MEMORY-USAGE | 1204.28 MB | 4689.33 MB | 4329.98 MB |
| TOTAL-SECONDS | 36.2024 sec | 61.0944 sec | 467.9311 sec |
| AVG-THROUGHPUT | 27622.4453 req/sec | 16298.0557 req/sec | 2137.0667 req/sec |
| SLOWEST-LATENCY | 246.4560 ms | 5570.6375 ms | 30388.9318 ms |
| FASTEST-LATENCY | 5.3413 ms | 2.4757 ms | 21.5605 ms |
| AVG-LATENCY | 36.1057 ms | 50.4279 ms | 467.4253 ms |
| Latency p10 | 13.712090 ms | 14.861507 ms | 65.910086 ms |
| Latency p25 | 16.625779 ms | 18.884719 ms | 77.221971 ms |
| Latency p50 | 22.306160 ms | 22.291879 ms | 120.663354 ms |
| Latency p75 | 40.376905 ms | 25.751846 ms | 716.373543 ms |
| Latency p90 | 65.849751 ms | 30.030446 ms | 1068.038406 ms |
| Latency p95 | 137.545464 ms | 81.141780 ms | 1080.751412 ms |
| Latency p99 | 177.127309 ms | 965.771377 ms | 2686.919571 ms |
| Latency p99.9 | 198.540415 ms | 2911.408642 ms | 19041.188919 ms |
+----------------------------+--------------------+------------------------+-----------------------+
```
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS.svg" alt="2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-LATENCY-MS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT.svg" alt="2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-THROUGHPUT">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU.svg" alt="2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-CPU">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB.svg" alt="2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-VMRSS-MB">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-READS-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-READ-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-WRITES-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA">
<br><br><hr>
##### Write 1M keys, 1000-client, 1000QPS, 256-byte key, 1KB value
- Google Cloud Compute Engine
- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- Ubuntu 16.10
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.2 (Go 1.7.4)
```
+----------------------------+-------------------+------------------------+-----------------------+
| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.2-go1.7.4 |
+----------------------------+-------------------+------------------------+-----------------------+
| READS-COMPLETED-DELTA | 0 | 211 | 141 |
| SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
| WRITES-COMPLETED-DELTA-SUM | 4431218 | 4670825 | 7233188 |
| SECTORS-WRITTEN-DELTA-SUM | 2263660 | 14832440 | 81719964 |
| RECEIVE-BYTES-SUM | 5.8 GB | 5.8 GB | 6.0 GB |
| TRANSMIT-BYTES-SUM | 4.6 GB | 4.7 GB | 4.7 GB |
| MAX-CPU-USAGE | 52.02 % | 46.67 % | 84.40 % |
| MAX-MEMORY-USAGE | 1626.60 MB | 3568.67 MB | 3950.50 MB |
| TOTAL-SECONDS | 999.0083 sec | 1000.5091 sec | 1195.0587 sec |
| AVG-THROUGHPUT | 1000.9927 req/sec | 998.8554 req/sec | 836.7790 req/sec |
| SLOWEST-LATENCY | 198.1010 ms | 2392.6933 ms | 23594.1354 ms |
| FASTEST-LATENCY | 1.2003 ms | 0.9210 ms | 3.6024 ms |
| AVG-LATENCY | 4.5224 ms | 8.1224 ms | 363.4513 ms |
| Latency p10 | 2.710760 ms | 1.593791 ms | 8.339832 ms |
| Latency p25 | 3.382362 ms | 1.815819 ms | 36.060302 ms |
| Latency p50 | 4.375098 ms | 2.109050 ms | 134.805513 ms |
| Latency p75 | 5.431229 ms | 2.403126 ms | 205.643246 ms |
| Latency p90 | 6.422301 ms | 2.662319 ms | 227.073525 ms |
| Latency p95 | 7.127944 ms | 3.112525 ms | 250.450359 ms |
| Latency p99 | 8.805373 ms | 236.442165 ms | 10010.579309 ms |
| Latency p99.9 | 17.743337 ms | 1006.184186 ms | 22707.315056 ms |
+----------------------------+-------------------+------------------------+-----------------------+
```
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-LATENCY-MS.svg" alt="2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-LATENCY-MS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-THROUGHPUT.svg" alt="2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-THROUGHPUT">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-CPU.svg" alt="2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-CPU">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VMRSS-MB.svg" alt="2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-VMRSS-MB">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/02-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA">
<br><br><hr>
##### Write 1M keys, 256-byte key, 1KB value value (clients 1 to 1000)
- Google Cloud Compute Engine
- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- Ubuntu 16.10
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.2 (Go 1.7.4)
```
+----------------------------+-------------------+------------------------+-----------------------+
| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.2-go1.7.4 |
+----------------------------+-------------------+------------------------+-----------------------+
| READS-COMPLETED-DELTA | 185 | 293 | 383 |
| SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
| WRITES-COMPLETED-DELTA-SUM | 2090388 | 1667449 | 3966668 |
| SECTORS-WRITTEN-DELTA-SUM | 1173224 | 14349236 | 30568376 |
| RECEIVE-BYTES-SUM | 5.2 GB | 5.4 GB | 8.9 GB |
| TRANSMIT-BYTES-SUM | 4.0 GB | 4.3 GB | 7.7 GB |
| MAX-CPU-USAGE | 56.46 % | 56.26 % | 56.29 % |
| MAX-MEMORY-USAGE | 1466.26 MB | 3563.36 MB | 4545.72 MB |
| TOTAL-SECONDS | 570.7510 sec | 477.1301 sec | 1056.0748 sec |
| AVG-THROUGHPUT | 1752.0775 req/sec | 2090.3063 req/sec | 946.9027 req/sec |
| SLOWEST-LATENCY | 556.0183 ms | 3654.9846 ms | 17465.0180 ms |
| FASTEST-LATENCY | 1.1633 ms | 0.9644 ms | 3.2258 ms |
| AVG-LATENCY | 12.1934 ms | 30.7887 ms | 96.5730 ms |
| Latency p10 | 2.312432 ms | 2.226581 ms | 4.048553 ms |
| Latency p25 | 4.204692 ms | 2.847540 ms | 5.682306 ms |
| Latency p50 | 7.689732 ms | 4.229944 ms | 10.091410 ms |
| Latency p75 | 14.481892 ms | 10.914450 ms | 44.163918 ms |
| Latency p90 | 24.692357 ms | 17.725627 ms | 94.140188 ms |
| Latency p95 | 40.230709 ms | 24.428028 ms | 208.474321 ms |
| Latency p99 | 60.787420 ms | 1188.220202 ms | 895.758025 ms |
| Latency p99.9 | 527.752867 ms | 2326.553678 ms | 13622.807237 ms |
+----------------------------+-------------------+------------------------+-----------------------+
```
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-LATENCY-MS.svg" alt="2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-LATENCY-MS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-THROUGHPUT.svg" alt="2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-THROUGHPUT">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-CPU.svg" alt="2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-CPU">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VMRSS-MB.svg" alt="2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-VMRSS-MB">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/03-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA">
<br><br><hr>
##### Write 1M keys, 1000-client, 256-byte key, 1KB value
- Packet Bare Metal
- 4 machines of 16 Physical Cores @ 2.6 GHz + 128 GB DDR4 RAM + 120 GB SSD + 20Gbps Bonded Network (1 for client)
- Ubuntu 16.04
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.2 (Go 1.7.4)
```
+----------------------------+--------------------+------------------------+-----------------------+
| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.2-go1.7.4 |
+----------------------------+--------------------+------------------------+-----------------------+
| READS-COMPLETED-DELTA | 6 | 4 | 14 |
| SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
| WRITES-COMPLETED-DELTA-SUM | 339249 | 663603 | 1124580 |
| SECTORS-WRITTEN-DELTA-SUM | 0 | 0 | 0 |
| RECEIVE-BYTES-SUM | 5.2 GB | 5.4 GB | 5.7 GB |
| TRANSMIT-BYTES-SUM | 4.0 GB | 4.4 GB | 4.4 GB |
| MAX-CPU-USAGE | 363.53 % | 388.31 % | 282.29 % |
| MAX-MEMORY-USAGE | 1219.19 MB | 9291.80 MB | 4659.98 MB |
| TOTAL-SECONDS | 40.8774 sec | 30.3340 sec | 164.0401 sec |
| AVG-THROUGHPUT | 24463.3803 req/sec | 32964.2605 req/sec | 6096.0706 req/sec |
| SLOWEST-LATENCY | 150.4056 ms | 1565.8847 ms | 7306.8885 ms |
| FASTEST-LATENCY | 0.8704 ms | 0.3387 ms | 8.9377 ms |
| AVG-LATENCY | 40.7504 ms | 29.4415 ms | 163.8167 ms |
| Latency p10 | 19.337223 ms | 18.111482 ms | 58.038157 ms |
| Latency p25 | 24.134461 ms | 20.482972 ms | 72.112776 ms |
| Latency p50 | 33.954506 ms | 23.463435 ms | 106.720600 ms |
| Latency p75 | 54.301812 ms | 27.142309 ms | 213.816984 ms |
| Latency p90 | 72.115813 ms | 31.443281 ms | 333.154609 ms |
| Latency p95 | 81.127899 ms | 35.534083 ms | 373.636304 ms |
| Latency p99 | 98.866146 ms | 147.958507 ms | 461.374153 ms |
| Latency p99.9 | 132.016073 ms | 1378.812699 ms | 5311.162416 ms |
+----------------------------+--------------------+------------------------+-----------------------+
```
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-LATENCY-MS.svg" alt="2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-LATENCY-MS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-THROUGHPUT.svg" alt="2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-THROUGHPUT">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-CPU.svg" alt="2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-CPU">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VMRSS-MB.svg" alt="2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-VMRSS-MB">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-READS-COMPLETED-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-READS-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-READ-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-READ-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-WRITES-COMPLETED-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-WRITES-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-SECTORS-WRITTEN-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-RECEIVE-BYTES-NUM-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/04-write-1M-keys/AVG-TRANSMIT-BYTES-NUM-DELTA">
<br><br><hr>
##### Write 1M keys, 1000-client, 1000QPS, 256-byte key, 1KB value
- Packet Bare Metal
- 4 machines of 16 Physical Cores @ 2.6 GHz + 128 GB DDR4 RAM + 120 GB SSD + 20Gbps Bonded Network (1 for client)
- Ubuntu 16.04
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.2 (Go 1.7.4)
```
+----------------------------+-------------------+------------------------+-----------------------+
| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.2-go1.7.4 |
+----------------------------+-------------------+------------------------+-----------------------+
| READS-COMPLETED-DELTA | 473 | 712 | 571 |
| SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
| WRITES-COMPLETED-DELTA-SUM | 8263385 | 9922581 | 13261792 |
| SECTORS-WRITTEN-DELTA-SUM | 0 | 0 | 0 |
| RECEIVE-BYTES-SUM | 6.5 GB | 5.9 GB | 6.4 GB |
| TRANSMIT-BYTES-SUM | 5.2 GB | 4.7 GB | 5.1 GB |
| MAX-CPU-USAGE | 91.10 % | 64.88 % | 147.91 % |
| MAX-MEMORY-USAGE | 1696.60 MB | 2842.88 MB | 4231.98 MB |
| TOTAL-SECONDS | 999.0582 sec | 999.8117 sec | 1040.1450 sec |
| AVG-THROUGHPUT | 1000.9427 req/sec | 999.5752 req/sec | 961.4044 req/sec |
| SLOWEST-LATENCY | 56.0360 ms | 2635.4569 ms | 8546.8756 ms |
| FASTEST-LATENCY | 0.7225 ms | 0.3447 ms | 1.3011 ms |
| AVG-LATENCY | 1.3866 ms | 6.9357 ms | 93.2921 ms |
| Latency p10 | 1.019233 ms | 0.667793 ms | 2.297153 ms |
| Latency p25 | 1.140797 ms | 0.757403 ms | 2.458065 ms |
| Latency p50 | 1.303873 ms | 0.876627 ms | 2.654298 ms |
| Latency p75 | 1.429593 ms | 0.982231 ms | 3.600769 ms |
| Latency p90 | 1.584000 ms | 1.121141 ms | 10.765193 ms |
| Latency p95 | 1.733878 ms | 1.236501 ms | 65.069180 ms |
| Latency p99 | 3.298035 ms | 28.890276 ms | 4628.091116 ms |
| Latency p99.9 | 17.796168 ms | 1369.914634 ms | 7243.951610 ms |
+----------------------------+-------------------+------------------------+-----------------------+
```
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-LATENCY-MS.svg" alt="2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-LATENCY-MS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-THROUGHPUT.svg" alt="2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-THROUGHPUT">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-NON-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-CPU.svg" alt="2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-CPU">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VMRSS-MB.svg" alt="2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-VMRSS-MB">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-READS-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-READ-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-WRITES-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-SECTORS-WRITTEN-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-RECEIVE-BYTES-NUM-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/05-write-1M-keys-rate-limited/AVG-TRANSMIT-BYTES-NUM-DELTA">
<br><br><hr>
##### Write 1M keys, 256-byte key, 1KB value value (clients 1 to 1000)
- Packet Bare Metal
- 4 machines of 16 Physical Cores @ 2.6 GHz + 128 GB DDR4 RAM + 120 GB SSD + 20Gbps Bonded Network (1 for client)
- Ubuntu 16.04
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.2 (Go 1.7.4)
```
+----------------------------+-------------------+------------------------+-----------------------+
| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.2-go1.7.4 |
+----------------------------+-------------------+------------------------+-----------------------+
| READS-COMPLETED-DELTA | 308 | 216 | 532 |
| SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
| WRITES-COMPLETED-DELTA-SUM | 3480145 | 3471343 | 6597902 |
| SECTORS-WRITTEN-DELTA-SUM | 0 | 0 | 0 |
| RECEIVE-BYTES-SUM | 5.4 GB | 5.3 GB | 5.8 GB |
| TRANSMIT-BYTES-SUM | 4.2 GB | 4.3 GB | 4.5 GB |
| MAX-CPU-USAGE | 135.68 % | 116.33 % | 124.26 % |
| MAX-MEMORY-USAGE | 1328.39 MB | 6276.01 MB | 4790.06 MB |
| TOTAL-SECONDS | 276.4103 sec | 185.1561 sec | 582.4233 sec |
| AVG-THROUGHPUT | 3617.8096 req/sec | 5400.8493 req/sec | 1716.9642 req/sec |
| SLOWEST-LATENCY | 155.0781 ms | 2140.8240 ms | 5637.2541 ms |
| FASTEST-LATENCY | 0.6443 ms | 0.2915 ms | 1.3058 ms |
| AVG-LATENCY | 12.7328 ms | 9.5968 ms | 47.3448 ms |
| Latency p10 | 1.115963 ms | 0.706270 ms | 2.296140 ms |
| Latency p25 | 1.484697 ms | 0.890714 ms | 3.300920 ms |
| Latency p50 | 2.696072 ms | 1.594529 ms | 6.696194 ms |
| Latency p75 | 14.830030 ms | 10.053333 ms | 42.282100 ms |
| Latency p90 | 36.917286 ms | 18.814867 ms | 93.939972 ms |
| Latency p95 | 67.270709 ms | 24.070593 ms | 131.658011 ms |
| Latency p99 | 92.520682 ms | 38.044010 ms | 473.239177 ms |
| Latency p99.9 | 122.274461 ms | 1725.413184 ms | 4949.483214 ms |
+----------------------------+-------------------+------------------------+-----------------------+
```
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-LATENCY-MS.svg" alt="2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-LATENCY-MS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-THROUGHPUT.svg" alt="2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-THROUGHPUT">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-CPU.svg" alt="2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-CPU">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VMRSS-MB.svg" alt="2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-VMRSS-MB">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg" alt="2017Q1-01-etcd-zookeeper-consul/06-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

View File

@ -1,88 +0,0 @@
<br><br><hr>
##### Write 1M keys, 256-byte key, 1KB value value, clients 1 to 1,000
- Google Cloud Compute Engine
- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- Ubuntu 16.10
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.3 (Go 1.7.4)
```
+-----------------------------+-------------------+------------------------+-----------------------+
| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.3-go1.7.4 |
+-----------------------------+-------------------+------------------------+-----------------------+
| READS-COMPLETED-DELTA-SUM | 2 | 218 | 126 |
| SECTORS-READS-DELTA-SUM | 0 | 0 | 0 |
| WRITES-COMPLETED-DELTA-SUM | 1,217,752 | 955,419 | 2,183,202 |
| SECTORS-WRITTEN-DELTA-SUM | 702,780 | 11,846,404 | 3,991,232 |
| AVG-DATA-SIZE-ON-DISK | 2.5 GB | 7.4 GB | 3.1 GB |
| NETWORK-RECEIVE-DATA-SUM | 5.1 GB | 5.0 GB | 5.5 GB |
| NETWORK-TRANSMIT-DATA-SUM | 3.9 GB | 4.0 GB | 4.2 GB |
| MAX-CPU-USAGE | 451.00 % | 800.00 % | 409.33 % |
| MAX-MEMORY-USAGE | 1.3 GB | 3.7 GB | 4.7 GB |
| TOTAL-SECONDS | 324.5626 sec | 335.0999 sec | 667.9389 sec |
| MAX-THROUGHPUT | 36,479 req/sec | 41,799 req/sec | 15,969 req/sec |
| AVG-THROUGHPUT | 3,081 req/sec | 2,961 req/sec | 1,497 req/sec |
| MIN-THROUGHPUT | 79 req/sec | 0 req/sec | 49 req/sec |
| FASTEST-LATENCY | 1.0313 ms | 1.1256 ms | 2.9151 ms |
| AVG-LATENCY | 13.4807 ms | 25.5780 ms | 47.0926 ms |
| SLOWEST-LATENCY | 261.8235 ms | 4260.5699 ms | 22260.1112 ms |
| Latency p10 | 2.201212 ms | 2.528874 ms | 3.926152 ms |
| Latency p25 | 5.636563 ms | 3.821957 ms | 7.640734 ms |
| Latency p50 | 9.696159 ms | 6.656013 ms | 19.126381 ms |
| Latency p75 | 16.202583 ms | 11.576279 ms | 54.750630 ms |
| Latency p90 | 28.434395 ms | 14.472618 ms | 77.993718 ms |
| Latency p95 | 44.336815 ms | 16.786180 ms | 91.026490 ms |
| Latency p99 | 60.008762 ms | 479.797108 ms | 201.844359 ms |
| Latency p99.9 | 84.831886 ms | 2725.947720 ms | 1502.535463 ms |
| CLIENT-NETWORK-RECEIVE-SUM | 270 MB | 353 MB | 200 MB |
| CLIENT-NETWORK-TRANSMIT-SUM | 1.5 GB | 1.4 GB | 1.5 GB |
| CLIENT-MAX-CPU-USAGE | 577.00 % | 496.00 % | 210.00 % |
| CLIENT-MAX-MEMORY-USAGE | 355 MB | 3.3 GB | 227 MB |
| CLIENT-ERROR-COUNT | 0 | 7,495 | 0 |
+-----------------------------+-------------------+------------------------+-----------------------+
```
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA">
<img src="https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg" alt="2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA">

View File

@ -18,7 +18,7 @@
// dbtester [command]
//
// Available Commands:
// agent Database 'agent' in remote servers (runs database, upload logs).
// agent Database 'agent' in remote servers.
// analyze Analyzes test dbtester test results.
// control Controls tests.
//
@ -38,7 +38,7 @@ var (
rootCommand = &cobra.Command{
Use: "dbtester",
Short: "dbtester is distributed database tester.",
SuggestFor: []string{"dbtstetr", "dbtes"},
SuggestFor: []string{"dbtstetr", "dbtes", "dbtesters"},
}
)

View File

@ -0,0 +1 @@
test-key

View File

@ -12,5 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
// Package control controls distributed databases in remote servers.
package control
package dbtester
// Cetcd is cetcd-specific flags
// (https://github.com/coreos/cetcd).
type Cetcd struct {
// no options needed yet
}

21
config_consul.go Normal file
View File

@ -0,0 +1,21 @@
// Copyright 2017 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package dbtester
// Consul is Consul-specific flags
// (https://github.com/hashicorp/consul).
type Consul struct {
// no options needed yet
}

347
config_dbtester.go Normal file
View File

@ -0,0 +1,347 @@
// Copyright 2017 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package dbtester
import (
"fmt"
"io/ioutil"
"path/filepath"
"strings"
"github.com/coreos/dbtester/dbtesterpb"
"gopkg.in/yaml.v2"
)
// Config configures dbtester control clients.
type Config struct {
TestTitle string `yaml:"test_title"`
TestDescription string `yaml:"test_description"`
Control `yaml:"control"`
AllDatabaseIDList []string `yaml:"all_database_id_list"`
DatabaseIDToTestGroup map[string]TestGroup `yaml:"datatbase_id_to_test_group"`
DatabaseIDToTestData map[string]TestData `yaml:"datatbase_id_to_test_data"`
Analyze `yaml:"analyze"`
PlotPathPrefix string `yaml:"plot_path_prefix"`
PlotList []Plot `yaml:"plot_list"`
README `yaml:"readme"`
}
// Control represents common control options on client machine.
type Control struct {
PathPrefix string `yaml:"path_prefix"`
LogPath string `yaml:"log_path"`
ClientSystemMetricsPath string `yaml:"client_system_metrics_path"`
ClientSystemMetricsInterpolatedPath string `yaml:"client_system_metrics_interpolated_path"`
ClientLatencyThroughputTimeseriesPath string `yaml:"client_latency_throughput_timeseries_path"`
ClientLatencyDistributionAllPath string `yaml:"client_latency_distribution_all_path"`
ClientLatencyDistributionPercentilePath string `yaml:"client_latency_distribution_percentile_path"`
ClientLatencyDistributionSummaryPath string `yaml:"client_latency_distribution_summary_path"`
ClientLatencyByKeyNumberPath string `yaml:"client_latency_by_key_number_path"`
ServerDatasizeOnDiskSummaryPath string `yaml:"server_data_size_on_disk_summary_path"`
GoogleCloudProjectName string `yaml:"google_cloud_project_name"`
GoogleCloudStorageKeyPath string `yaml:"google_cloud_storage_key_path"`
GoogleCloudStorageKey string
GoogleCloudStorageBucketName string `yaml:"google_cloud_storage_bucket_name"`
GoogleCloudStorageSubDirectory string `yaml:"google_cloud_storage_sub_directory"`
}
// TestGroup specifies database test group.
type TestGroup struct {
DatabaseID string
DatabaseDescription string `yaml:"database_description"`
DatabaseTag string
PeerIPs []string `yaml:"peer_ips"`
PeerIPsString string
DatabasePortToConnect int `yaml:"database_port_to_connect"`
DatabaseEndpoints []string
AgentPortToConnect int `yaml:"agent_port_to_connect"`
AgentEndpoints []string
// database-specific flags to start
Etcdv2 `yaml:"etcdv2"`
Etcdv3 `yaml:"etcdv3"`
Zookeeper `yaml:"zookeeper"`
Consul `yaml:"consul"`
Zetcd `yaml:"zetcd"`
Cetcd `yaml:"cetcd"`
// benchmark options
BenchmarkOptions `yaml:"benchmark_options"`
BenchmarkSteps `yaml:"benchmark_steps"`
}
// BenchmarkOptions specifies the benchmark options.
type BenchmarkOptions struct {
Type string `yaml:"type"`
RequestNumber int64 `yaml:"request_number"`
ConnectionNumber int64 `yaml:"connection_number"`
ClientNumber int64 `yaml:"client_number"`
ConnectionClientNumbers []int64 `yaml:"connection_client_numbers"`
RateLimitRequestsPerSecond int64 `yaml:"rate_limit_requests_per_second"`
// for writes, reads
SameKey bool `yaml:"same_key"`
KeySizeBytes int64 `yaml:"key_size_bytes"`
ValueSizeBytes int64 `yaml:"value_size_bytes"`
// for reads
StaleRead bool `yaml:"stale_read"`
}
// BenchmarkSteps specifies the benchmark workflow.
type BenchmarkSteps struct {
Step1StartDatabase bool `yaml:"step1_start_database"`
Step2StressDatabase bool `yaml:"step2_stress_database"`
Step3StopDatabase bool `yaml:"step3_stop_database"`
Step4UploadLogs bool `yaml:"step4_upload_logs"`
}
// TestData defines raw data to import.
type TestData struct {
DatabaseID string
DatabaseTag string
DatabaseDescription string
PathPrefix string `yaml:"path_prefix"`
ClientSystemMetricsInterpolatedPath string `yaml:"client_system_metrics_interpolated_path"`
ClientLatencyThroughputTimeseriesPath string `yaml:"client_latency_throughput_timeseries_path"`
ClientLatencyDistributionAllPath string `yaml:"client_latency_distribution_all_path"`
ClientLatencyDistributionPercentilePath string `yaml:"client_latency_distribution_percentile_path"`
ClientLatencyDistributionSummaryPath string `yaml:"client_latency_distribution_summary_path"`
ClientLatencyByKeyNumberPath string `yaml:"client_latency_by_key_number_path"`
ServerDatasizeOnDiskSummaryPath string `yaml:"server_data_size_on_disk_summary_path"`
ServerMemoryByKeyNumberPath string `yaml:"server_memory_by_key_number_path"`
ServerSystemMetricsInterpolatedPathList []string `yaml:"server_system_metrics_interpolated_path_list"`
AllAggregatedOutputPath string `yaml:"all_aggregated_output_path"`
}
// Analyze defines analyze config.
type Analyze struct {
AllAggregatedOutputPathCSV string `yaml:"all_aggregated_output_path_csv"`
AllAggregatedOutputPathTXT string `yaml:"all_aggregated_output_path_txt"`
}
// Plot defines plot configuration.
type Plot struct {
Column string `yaml:"column"`
XAxis string `yaml:"x_axis"`
YAxis string `yaml:"y_axis"`
OutputPathCSV string `yaml:"output_path_csv"`
OutputPathList []string `yaml:"output_path_list"`
}
// README defines how to write README.
type README struct {
OutputPath string `yaml:"output_path"`
Images []Image `yaml:"images"`
}
// Image defines image data.
type Image struct {
Title string `yaml:"title"`
Path string `yaml:"path"`
Type string `yaml:"type"`
}
// ReadConfig reads control configuration file.
func ReadConfig(fpath string, analyze bool) (*Config, error) {
bts, err := ioutil.ReadFile(fpath)
if err != nil {
return nil, err
}
cfg := Config{}
if err := yaml.Unmarshal(bts, &cfg); err != nil {
return nil, err
}
if cfg.Control.PathPrefix != "" {
cfg.Control.LogPath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.LogPath)
cfg.Control.ClientSystemMetricsPath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.ClientSystemMetricsPath)
cfg.Control.ClientSystemMetricsInterpolatedPath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.ClientSystemMetricsInterpolatedPath)
cfg.Control.ClientLatencyThroughputTimeseriesPath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.ClientLatencyThroughputTimeseriesPath)
cfg.Control.ClientLatencyDistributionAllPath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.ClientLatencyDistributionAllPath)
cfg.Control.ClientLatencyDistributionPercentilePath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.ClientLatencyDistributionPercentilePath)
cfg.Control.ClientLatencyDistributionSummaryPath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.ClientLatencyDistributionSummaryPath)
cfg.Control.ClientLatencyByKeyNumberPath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.ClientLatencyByKeyNumberPath)
cfg.Control.ServerDatasizeOnDiskSummaryPath = filepath.Join(cfg.Control.PathPrefix, cfg.Control.ServerDatasizeOnDiskSummaryPath)
}
for databaseID, group := range cfg.DatabaseIDToTestGroup {
group.DatabaseID = databaseID
group.DatabaseTag = MakeTag(group.DatabaseDescription)
group.PeerIPsString = strings.Join(group.PeerIPs, "___")
group.DatabaseEndpoints = make([]string, len(group.PeerIPs))
group.AgentEndpoints = make([]string, len(group.PeerIPs))
for j := range group.PeerIPs {
group.DatabaseEndpoints[j] = fmt.Sprintf("%s:%d", group.PeerIPs[j], group.DatabasePortToConnect)
group.AgentEndpoints[j] = fmt.Sprintf("%s:%d", group.PeerIPs[j], group.AgentPortToConnect)
}
cfg.DatabaseIDToTestGroup[databaseID] = group
}
for databaseID, testdata := range cfg.DatabaseIDToTestData {
testdata.PathPrefix = strings.TrimSpace(testdata.PathPrefix)
testdata.DatabaseID = databaseID
testdata.DatabaseTag = cfg.DatabaseIDToTestGroup[databaseID].DatabaseTag
testdata.DatabaseDescription = cfg.DatabaseIDToTestGroup[databaseID].DatabaseDescription
if testdata.PathPrefix != "" {
testdata.ClientSystemMetricsInterpolatedPath = testdata.PathPrefix + "-" + testdata.ClientSystemMetricsInterpolatedPath
testdata.ClientLatencyThroughputTimeseriesPath = testdata.PathPrefix + "-" + testdata.ClientLatencyThroughputTimeseriesPath
testdata.ClientLatencyDistributionAllPath = testdata.PathPrefix + "-" + testdata.ClientLatencyDistributionAllPath
testdata.ClientLatencyDistributionPercentilePath = testdata.PathPrefix + "-" + testdata.ClientLatencyDistributionPercentilePath
testdata.ClientLatencyDistributionSummaryPath = testdata.PathPrefix + "-" + testdata.ClientLatencyDistributionSummaryPath
testdata.ClientLatencyByKeyNumberPath = testdata.PathPrefix + "-" + testdata.ClientLatencyByKeyNumberPath
testdata.ServerDatasizeOnDiskSummaryPath = testdata.PathPrefix + "-" + testdata.ServerDatasizeOnDiskSummaryPath
testdata.ServerMemoryByKeyNumberPath = testdata.PathPrefix + "-" + testdata.ServerMemoryByKeyNumberPath
for i := range testdata.ServerSystemMetricsInterpolatedPathList {
testdata.ServerSystemMetricsInterpolatedPathList[i] = testdata.PathPrefix + "-" + testdata.ServerSystemMetricsInterpolatedPathList[i]
}
testdata.AllAggregatedOutputPath = testdata.PathPrefix + "-" + testdata.AllAggregatedOutputPath
}
cfg.DatabaseIDToTestData[databaseID] = testdata
}
for databaseID, group := range cfg.DatabaseIDToTestGroup {
if databaseID != "etcdv3" && group.BenchmarkOptions.ConnectionNumber != group.BenchmarkOptions.ClientNumber {
return nil, fmt.Errorf("%q got connected %d != clients %d", databaseID, group.BenchmarkOptions.ConnectionNumber, group.BenchmarkOptions.ClientNumber)
}
}
var (
defaultEtcdSnapCount int64 = 100000
defaultZookeeperSnapCount int64 = 100000
defaultZookeeperTickTime int64 = 2000
defaultZookeeperInitLimit int64 = 5
defaultZookeeperSyncLimit int64 = 5
defaultZookeeperMaxClientConnections int64 = 5000
)
if v, ok := cfg.DatabaseIDToTestGroup["etcdv3"]; ok {
if v.Etcdv3.SnapCount == 0 {
v.Etcdv3.SnapCount = defaultEtcdSnapCount
}
cfg.DatabaseIDToTestGroup["etcdv3"] = v
}
if v, ok := cfg.DatabaseIDToTestGroup["zookeeper"]; ok {
if v.Zookeeper.TickTime == 0 {
v.Zookeeper.TickTime = defaultZookeeperTickTime
}
if v.Zookeeper.InitLimit == 0 {
v.Zookeeper.InitLimit = defaultZookeeperInitLimit
}
if v.Zookeeper.SyncLimit == 0 {
v.Zookeeper.SyncLimit = defaultZookeeperSyncLimit
}
if v.Zookeeper.SnapCount == 0 {
v.Zookeeper.SnapCount = defaultZookeeperSnapCount
}
if v.Zookeeper.MaxClientConnections == 0 {
v.Zookeeper.MaxClientConnections = defaultZookeeperMaxClientConnections
}
cfg.DatabaseIDToTestGroup["zookeeper"] = v
}
if cfg.Control.GoogleCloudStorageKeyPath != "" && !analyze {
bts, err = ioutil.ReadFile(cfg.Control.GoogleCloudStorageKeyPath)
if err != nil {
return nil, err
}
cfg.Control.GoogleCloudStorageKey = string(bts)
}
for i := range cfg.PlotList {
cfg.PlotList[i].OutputPathCSV = filepath.Join(cfg.PlotPathPrefix, cfg.PlotList[i].Column+".csv")
cfg.PlotList[i].OutputPathList = make([]string, 2)
cfg.PlotList[i].OutputPathList[0] = filepath.Join(cfg.PlotPathPrefix, cfg.PlotList[i].Column+".svg")
cfg.PlotList[i].OutputPathList[1] = filepath.Join(cfg.PlotPathPrefix, cfg.PlotList[i].Column+".png")
}
return &cfg, nil
}
// MakeTag converts database scription to database tag.
func MakeTag(desc string) string {
s := strings.ToLower(desc)
s = strings.Replace(s, "go ", "go", -1)
s = strings.Replace(s, "java ", "java", -1)
s = strings.Replace(s, "(", "", -1)
s = strings.Replace(s, ")", "", -1)
return strings.Replace(s, " ", "-", -1)
}
// ToRequest converts configuration to 'dbtesterpb.Request'.
func (cfg *Config) ToRequest(databaseID string, op dbtesterpb.Request_Operation, idx int) (req *dbtesterpb.Request, err error) {
gcfg, ok := cfg.DatabaseIDToTestGroup[databaseID]
if !ok {
err = fmt.Errorf("%q is not defined", databaseID)
return
}
req = &dbtesterpb.Request{
Operation: op,
TriggerLogUpload: gcfg.BenchmarkSteps.Step4UploadLogs,
DatabaseID: dbtesterpb.Request_Database(dbtesterpb.Request_Database_value[databaseID]),
DatabaseTag: gcfg.DatabaseTag,
PeerIPsString: gcfg.PeerIPsString,
IpIndex: uint32(idx),
CurrentClientNumber: gcfg.BenchmarkOptions.ClientNumber,
Control: &dbtesterpb.Request_Control{
GoogleCloudProjectName: cfg.Control.GoogleCloudProjectName,
GoogleCloudStorageKey: cfg.Control.GoogleCloudStorageKey,
GoogleCloudStorageBucketName: cfg.Control.GoogleCloudStorageBucketName,
GoogleCloudStorageSubDirectory: cfg.Control.GoogleCloudStorageSubDirectory,
},
}
switch req.DatabaseID {
case dbtesterpb.Request_etcdv2:
case dbtesterpb.Request_etcdv3:
req.Etcdv3Config = &dbtesterpb.Request_Etcdv3{
SnapCount: gcfg.Etcdv3.SnapCount,
QuotaSizeBytes: gcfg.Etcdv3.QuotaSizeBytes,
}
case dbtesterpb.Request_zookeeper:
req.ZookeeperConfig = &dbtesterpb.Request_Zookeeper{
MyID: uint32(idx + 1),
TickTime: gcfg.Zookeeper.TickTime,
ClientPort: int64(gcfg.DatabasePortToConnect),
InitLimit: gcfg.Zookeeper.InitLimit,
SyncLimit: gcfg.Zookeeper.SyncLimit,
SnapCount: gcfg.Zookeeper.SnapCount,
MaxClientConnections: gcfg.Zookeeper.MaxClientConnections,
}
case dbtesterpb.Request_consul:
case dbtesterpb.Request_zetcd:
case dbtesterpb.Request_cetcd:
default:
err = fmt.Errorf("unknown %v", req.DatabaseID)
return
}
return
}

501
config_dbtester_test.go Normal file
View File

@ -0,0 +1,501 @@
// Copyright 2017 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package dbtester
import (
"reflect"
"testing"
"github.com/coreos/dbtester/dbtesterpb"
)
func TestConfig(t *testing.T) {
cfg, err := ReadConfig("config_dbtester_test.yaml", false)
if err != nil {
t.Fatal(err)
}
expected := &Config{
TestTitle: "Write 1M keys, 256-byte key, 1KB value value, clients 1 to 1,000",
TestDescription: `- Google Cloud Compute Engine
- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- Ubuntu 16.10
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.3 (Go 1.7.4)
`,
Control: Control{
PathPrefix: "/home/gyuho",
LogPath: "/home/gyuho/client-control.log",
ClientSystemMetricsPath: "/home/gyuho/client-system-metrics.csv",
ClientSystemMetricsInterpolatedPath: "/home/gyuho/client-system-metrics-interpolated.csv",
ClientLatencyThroughputTimeseriesPath: "/home/gyuho/client-latency-throughput-timeseries.csv",
ClientLatencyDistributionAllPath: "/home/gyuho/client-latency-distribution-all.csv",
ClientLatencyDistributionPercentilePath: "/home/gyuho/client-latency-distribution-percentile.csv",
ClientLatencyDistributionSummaryPath: "/home/gyuho/client-latency-distribution-summary.csv",
ClientLatencyByKeyNumberPath: "/home/gyuho/client-latency-by-key-number.csv",
ServerDatasizeOnDiskSummaryPath: "/home/gyuho/server-data-size-on-disk-summary.csv",
GoogleCloudProjectName: "etcd-development",
GoogleCloudStorageKeyPath: "config-dbtester-gcloud-key.json",
GoogleCloudStorageKey: "test-key",
GoogleCloudStorageBucketName: "dbtester-results",
GoogleCloudStorageSubDirectory: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable",
},
AllDatabaseIDList: []string{"etcdv3", "zookeeper", "consul"},
DatabaseIDToTestGroup: map[string]TestGroup{
"etcdv3": {
DatabaseID: "etcdv3",
DatabaseTag: "etcd-v3.1-go1.7.4",
DatabaseDescription: "etcd v3.1 (Go 1.7.4)",
PeerIPs: []string{"10.240.0.20", "10.240.0.21", "10.240.0.22"},
PeerIPsString: "10.240.0.20___10.240.0.21___10.240.0.22",
DatabasePortToConnect: 2379,
DatabaseEndpoints: []string{"10.240.0.20:2379", "10.240.0.21:2379", "10.240.0.22:2379"},
AgentPortToConnect: 3500,
AgentEndpoints: []string{"10.240.0.20:3500", "10.240.0.21:3500", "10.240.0.22:3500"},
Etcdv3: Etcdv3{
SnapCount: 100000,
QuotaSizeBytes: 8000000000,
},
BenchmarkOptions: BenchmarkOptions{
Type: "write",
RequestNumber: 1000000,
ConnectionNumber: 0,
ClientNumber: 0,
ConnectionClientNumbers: []int64{1, 10, 50, 100, 300, 500, 700, 1000},
RateLimitRequestsPerSecond: 0,
SameKey: false,
KeySizeBytes: 256,
ValueSizeBytes: 1024,
StaleRead: false,
},
BenchmarkSteps: BenchmarkSteps{
Step1StartDatabase: true,
Step2StressDatabase: true,
Step3StopDatabase: true,
Step4UploadLogs: true,
},
},
"zookeeper": {
DatabaseID: "zookeeper",
DatabaseTag: "zookeeper-r3.4.9-java8",
DatabaseDescription: "Zookeeper r3.4.9 (Java 8)",
PeerIPs: []string{"10.240.0.25", "10.240.0.27", "10.240.0.28"},
PeerIPsString: "10.240.0.25___10.240.0.27___10.240.0.28",
DatabasePortToConnect: 2181,
DatabaseEndpoints: []string{"10.240.0.25:2181", "10.240.0.27:2181", "10.240.0.28:2181"},
AgentPortToConnect: 3500,
AgentEndpoints: []string{"10.240.0.25:3500", "10.240.0.27:3500", "10.240.0.28:3500"},
Zookeeper: Zookeeper{
TickTime: 2000,
InitLimit: 5,
SyncLimit: 5,
SnapCount: 100000,
MaxClientConnections: 5000,
},
BenchmarkOptions: BenchmarkOptions{
Type: "write",
RequestNumber: 1000000,
ConnectionNumber: 0,
ClientNumber: 0,
ConnectionClientNumbers: []int64{1, 10, 50, 100, 300, 500, 700, 1000},
RateLimitRequestsPerSecond: 0,
SameKey: false,
KeySizeBytes: 256,
ValueSizeBytes: 1024,
StaleRead: false,
},
BenchmarkSteps: BenchmarkSteps{
Step1StartDatabase: true,
Step2StressDatabase: true,
Step3StopDatabase: true,
Step4UploadLogs: true,
},
},
"consul": {
DatabaseID: "consul",
DatabaseTag: "consul-v0.7.3-go1.7.4",
DatabaseDescription: "Consul v0.7.3 (Go 1.7.4)",
PeerIPs: []string{"10.240.0.30", "10.240.0.31", "10.240.0.33"},
PeerIPsString: "10.240.0.30___10.240.0.31___10.240.0.33",
DatabasePortToConnect: 8500,
DatabaseEndpoints: []string{"10.240.0.30:8500", "10.240.0.31:8500", "10.240.0.33:8500"},
AgentPortToConnect: 3500,
AgentEndpoints: []string{"10.240.0.30:3500", "10.240.0.31:3500", "10.240.0.33:3500"},
BenchmarkOptions: BenchmarkOptions{
Type: "write",
RequestNumber: 1000000,
ConnectionNumber: 0,
ClientNumber: 0,
ConnectionClientNumbers: []int64{1, 10, 50, 100, 300, 500, 700, 1000},
RateLimitRequestsPerSecond: 0,
SameKey: false,
KeySizeBytes: 256,
ValueSizeBytes: 1024,
StaleRead: false,
},
BenchmarkSteps: BenchmarkSteps{
Step1StartDatabase: true,
Step2StressDatabase: true,
Step3StopDatabase: true,
Step4UploadLogs: true,
},
},
},
DatabaseIDToTestData: map[string]TestData{
"etcdv3": {
DatabaseID: "etcdv3",
DatabaseTag: "etcd-v3.1-go1.7.4",
DatabaseDescription: "etcd v3.1 (Go 1.7.4)",
PathPrefix: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4",
ClientSystemMetricsInterpolatedPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-client-system-metrics-interpolated.csv",
ClientLatencyThroughputTimeseriesPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-client-latency-throughput-timeseries.csv",
ClientLatencyDistributionAllPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-client-latency-distribution-all.csv",
ClientLatencyDistributionPercentilePath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-client-latency-distribution-percentile.csv",
ClientLatencyDistributionSummaryPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-client-latency-distribution-summary.csv",
ClientLatencyByKeyNumberPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-client-latency-by-key-number.csv",
ServerMemoryByKeyNumberPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-server-memory-by-key-number.csv",
ServerDatasizeOnDiskSummaryPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-server-data-size-on-disk-summary.csv",
ServerSystemMetricsInterpolatedPathList: []string{
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-1-server-system-metrics-interpolated.csv",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-2-server-system-metrics-interpolated.csv",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-3-server-system-metrics-interpolated.csv",
},
AllAggregatedOutputPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4-all-aggregated.csv",
},
"zookeeper": {
DatabaseID: "zookeeper",
DatabaseTag: "zookeeper-r3.4.9-java8",
DatabaseDescription: "Zookeeper r3.4.9 (Java 8)",
PathPrefix: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8",
ClientSystemMetricsInterpolatedPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-client-system-metrics-interpolated.csv",
ClientLatencyThroughputTimeseriesPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-client-latency-throughput-timeseries.csv",
ClientLatencyDistributionAllPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-client-latency-distribution-all.csv",
ClientLatencyDistributionPercentilePath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-client-latency-distribution-percentile.csv",
ClientLatencyDistributionSummaryPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-client-latency-distribution-summary.csv",
ClientLatencyByKeyNumberPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-client-latency-by-key-number.csv",
ServerMemoryByKeyNumberPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-server-memory-by-key-number.csv",
ServerDatasizeOnDiskSummaryPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-server-data-size-on-disk-summary.csv",
ServerSystemMetricsInterpolatedPathList: []string{
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-1-server-system-metrics-interpolated.csv",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-2-server-system-metrics-interpolated.csv",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-3-server-system-metrics-interpolated.csv",
},
AllAggregatedOutputPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8-all-aggregated.csv",
},
"consul": {
DatabaseID: "consul",
DatabaseTag: "consul-v0.7.3-go1.7.4",
DatabaseDescription: "Consul v0.7.3 (Go 1.7.4)",
PathPrefix: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4",
ClientSystemMetricsInterpolatedPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-client-system-metrics-interpolated.csv",
ClientLatencyThroughputTimeseriesPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-client-latency-throughput-timeseries.csv",
ClientLatencyDistributionAllPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-client-latency-distribution-all.csv",
ClientLatencyDistributionPercentilePath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-client-latency-distribution-percentile.csv",
ClientLatencyDistributionSummaryPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-client-latency-distribution-summary.csv",
ClientLatencyByKeyNumberPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-client-latency-by-key-number.csv",
ServerMemoryByKeyNumberPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-server-memory-by-key-number.csv",
ServerDatasizeOnDiskSummaryPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-server-data-size-on-disk-summary.csv",
ServerSystemMetricsInterpolatedPathList: []string{
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-1-server-system-metrics-interpolated.csv",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-2-server-system-metrics-interpolated.csv",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-3-server-system-metrics-interpolated.csv",
},
AllAggregatedOutputPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4-all-aggregated.csv",
},
},
Analyze: Analyze{
AllAggregatedOutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/all-aggregated.csv",
AllAggregatedOutputPathTXT: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/all-aggregated.txt",
},
PlotPathPrefix: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable",
PlotList: []Plot{
{
Column: "AVG-LATENCY-MS",
XAxis: "Second",
YAxis: "Latency(millisecond)",
OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.csv",
OutputPathList: []string{
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.svg",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.png",
},
},
{
Column: "AVG-THROUGHPUT",
XAxis: "Second",
YAxis: "Throughput(Requests/Second)",
OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.csv",
OutputPathList: []string{
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.svg",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.png",
},
},
{
Column: "AVG-VOLUNTARY-CTXT-SWITCHES",
XAxis: "Second",
YAxis: "Voluntary Context Switches",
OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.csv",
OutputPathList: []string{
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.png",
},
},
{
Column: "AVG-NON-VOLUNTARY-CTXT-SWITCHES",
XAxis: "Second",
YAxis: "Non-voluntary Context Switches",
OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.csv",
OutputPathList: []string{
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.png",
},
},
{
Column: "AVG-CPU",
XAxis: "Second",
YAxis: "CPU(%)",
OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.csv",
OutputPathList: []string{
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.svg",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.png",
},
},
{
Column: "AVG-VMRSS-MB",
XAxis: "Second",
YAxis: "Memory(MB)",
OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.csv",
OutputPathList: []string{
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.svg",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.png",
},
},
{
Column: "AVG-READS-COMPLETED-DELTA",
XAxis: "Second",
YAxis: "Disk Reads (Delta per Second)",
OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.csv",
OutputPathList: []string{
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.png",
},
},
{
Column: "AVG-SECTORS-READ-DELTA",
XAxis: "Second",
YAxis: "Sectors Read (Delta per Second)",
OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.csv",
OutputPathList: []string{
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.png",
},
},
{
Column: "AVG-WRITES-COMPLETED-DELTA",
XAxis: "Second",
YAxis: "Disk Writes (Delta per Second)",
OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.csv",
OutputPathList: []string{
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.png",
},
},
{
Column: "AVG-SECTORS-WRITTEN-DELTA",
XAxis: "Second",
YAxis: "Sectors Written (Delta per Second)",
OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.csv",
OutputPathList: []string{
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.png",
},
},
{
Column: "AVG-RECEIVE-BYTES-NUM-DELTA",
XAxis: "Second",
YAxis: "Network Receive(bytes) (Delta per Second)",
OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.csv",
OutputPathList: []string{
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.png",
},
},
{
Column: "AVG-TRANSMIT-BYTES-NUM-DELTA",
XAxis: "Second",
YAxis: "Network Transmit(bytes) (Delta per Second)",
OutputPathCSV: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.csv",
OutputPathList: []string{
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg",
"2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.png",
},
},
},
README: README{
OutputPath: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/README.md",
Images: []Image{
{
Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS",
Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.svg",
Type: "remote",
},
{
Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY",
Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY.svg",
Type: "remote",
},
{
Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS",
Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg",
Type: "remote",
},
{
Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT",
Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.svg",
Type: "remote",
},
{
Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES",
Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg",
Type: "remote",
},
{
Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES",
Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg",
Type: "remote",
},
{
Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU",
Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.svg",
Type: "remote",
},
{
Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB",
Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.svg",
Type: "remote",
},
{
Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY",
Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY.svg",
Type: "remote",
},
{
Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS",
Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg",
Type: "remote",
},
{
Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA",
Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg",
Type: "remote",
},
{
Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA",
Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg",
Type: "remote",
},
{
Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA",
Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg",
Type: "remote",
},
{
Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA",
Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg",
Type: "remote",
},
{
Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA",
Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg",
Type: "remote",
},
{
Title: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA",
Path: "https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg",
Type: "remote",
},
},
},
}
if !reflect.DeepEqual(cfg, expected) {
t.Fatalf("configuration expected\n%+v\n, got\n%+v\n", expected, cfg)
}
req1, err := cfg.ToRequest("etcdv3", dbtesterpb.Request_Start, 0)
if err != nil {
t.Fatal(err)
}
expected1 := &dbtesterpb.Request{
Operation: dbtesterpb.Request_Start,
TriggerLogUpload: true,
DatabaseID: dbtesterpb.Request_etcdv3,
DatabaseTag: "etcd-v3.1-go1.7.4",
PeerIPsString: "10.240.0.20___10.240.0.21___10.240.0.22",
IpIndex: 0,
CurrentClientNumber: 0,
Control: &dbtesterpb.Request_Control{
GoogleCloudProjectName: "etcd-development",
GoogleCloudStorageKey: "test-key",
GoogleCloudStorageBucketName: "dbtester-results",
GoogleCloudStorageSubDirectory: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable",
},
Etcdv3Config: &dbtesterpb.Request_Etcdv3{
SnapCount: 100000,
QuotaSizeBytes: 8000000000,
},
}
if !reflect.DeepEqual(req1, expected1) {
t.Fatalf("configuration expected\n%+v\n, got\n%+v\n", expected1, req1)
}
req2, err := cfg.ToRequest("zookeeper", dbtesterpb.Request_Start, 2)
if err != nil {
t.Fatal(err)
}
expected2 := &dbtesterpb.Request{
Operation: dbtesterpb.Request_Start,
TriggerLogUpload: true,
DatabaseID: dbtesterpb.Request_zookeeper,
DatabaseTag: "zookeeper-r3.4.9-java8",
PeerIPsString: "10.240.0.25___10.240.0.27___10.240.0.28",
IpIndex: 2,
CurrentClientNumber: 0,
Control: &dbtesterpb.Request_Control{
GoogleCloudProjectName: "etcd-development",
GoogleCloudStorageKey: "test-key",
GoogleCloudStorageBucketName: "dbtester-results",
GoogleCloudStorageSubDirectory: "2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable",
},
ZookeeperConfig: &dbtesterpb.Request_Zookeeper{
MyID: 3,
TickTime: 2000,
ClientPort: 2181,
InitLimit: 5,
SyncLimit: 5,
SnapCount: 100000,
MaxClientConnections: 5000,
},
}
if !reflect.DeepEqual(req2, expected2) {
t.Fatalf("configuration expected\n%+v\n, got\n%+v\n", expected2, req2)
}
}

340
config_dbtester_test.yaml Normal file
View File

@ -0,0 +1,340 @@
test_title: Write 1M keys, 256-byte key, 1KB value value, clients 1 to 1,000
test_description: |
- Google Cloud Compute Engine
- 4 machines of 16 vCPUs + 30 GB Memory + 150 GB SSD (1 for client)
- Ubuntu 16.10
- etcd v3.1 (Go 1.7.4)
- Zookeeper r3.4.9
- Java 8
- javac 1.8.0_121
- Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
- Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
- Consul v0.7.3 (Go 1.7.4)
# common control options for all client machines
control:
# if not empty, all test data paths are prefixed
path_prefix: /home/gyuho
log_path: client-control.log
client_system_metrics_path: client-system-metrics.csv
client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
client_latency_distribution_all_path: client-latency-distribution-all.csv
client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
client_latency_distribution_summary_path: client-latency-distribution-summary.csv
client_latency_by_key_number_path: client-latency-by-key-number.csv
server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
# (optional) to automatically upload all files in client machine
google_cloud_project_name: etcd-development
# set this in 'control' machine, to automate log uploading in remote 'agent' machines
# google_cloud_storage_key_path: /home/gyuho/gcloud-key.json
google_cloud_storage_key_path: config-dbtester-gcloud-key.json
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable
all_database_id_list: [etcdv3, zookeeper, consul]
datatbase_id_to_test_group:
etcdv3:
database_description: etcd v3.1 (Go 1.7.4)
peer_ips:
- 10.240.0.20
- 10.240.0.21
- 10.240.0.22
database_port_to_connect: 2379
agent_port_to_connect: 3500
etcdv3:
# --snapshot-count
snap_count: 100000
# --quota-backend-bytes; 8 GB
quota_size_bytes: 8000000000
benchmark_options:
type: write
request_number: 1000000
connection_number: 0
client_number: 0
# if specified, overwrite 'connection_number', 'connection_number'
connection_client_numbers: [1, 10, 50, 100, 300, 500, 700, 1000]
# 0, to not rate limit
rate_limit_requests_per_second: 0
# for 'write', 'read'
same_key: false
key_size_bytes: 256
value_size_bytes: 1024
stale_read: false
benchmark_steps:
step1_start_database: true
step2_stress_database: true
step3_stop_database: true
step4_upload_logs: true
zookeeper:
database_description: Zookeeper r3.4.9 (Java 8)
peer_ips:
- 10.240.0.25
- 10.240.0.27
- 10.240.0.28
database_port_to_connect: 2181
agent_port_to_connect: 3500
# http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
zookeeper:
# tickTime; the length of a single tick, which is the basic time unit used by ZooKeeper,
# as measured in milliseconds.
tick_time: 2000
# initLimit; Amount of time, in ticks to allow followers to connect and sync to a leader
# increased this value as needed, if the amount of data managed by ZooKeeper is large.
# (default 5)
init_limit: 5
# syncLimit; Amount of time, in ticks to allow followers to sync with ZooKeeper.
# (default 5)
sync_limit: 5
# snapCount; After snapCount transactions are written to a log file a snapshot
# is started and a new transaction log file is created. The default snapCount is 100,000.
snap_count: 100000
# maxClientCnxns; Limits the number of concurrent connections (at the socket level)
# that a single client, identified by IP address, may make to a single member of the ZooKeeper ensemble.
max_client_connections: 5000
benchmark_options:
type: write
request_number: 1000000
connection_number: 0
client_number: 0
# if specified, overwrite 'connection_number', 'connection_number'
connection_client_numbers: [1, 10, 50, 100, 300, 500, 700, 1000]
# 0, to not rate limit
rate_limit_requests_per_second: 0
# for 'write', 'read'
same_key: false
key_size_bytes: 256
value_size_bytes: 1024
stale_read: false
benchmark_steps:
step1_start_database: true
step2_stress_database: true
step3_stop_database: true
step4_upload_logs: true
consul:
database_description: Consul v0.7.3 (Go 1.7.4)
peer_ips:
- 10.240.0.30
- 10.240.0.31
- 10.240.0.33
database_port_to_connect: 8500
agent_port_to_connect: 3500
benchmark_options:
type: write
request_number: 1000000
connection_number: 0
client_number: 0
# if specified, overwrite 'connection_number', 'connection_number'
connection_client_numbers: [1, 10, 50, 100, 300, 500, 700, 1000]
# 0, to not rate limit
rate_limit_requests_per_second: 0
# for 'write', 'read'
same_key: false
key_size_bytes: 256
value_size_bytes: 1024
stale_read: false
benchmark_steps:
step1_start_database: true
step2_stress_database: true
step3_stop_database: true
step4_upload_logs: true
datatbase_id_to_test_data:
etcdv3:
# if not empty, all test data paths are prefixed
path_prefix: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/etcd-v3.1-go1.7.4
client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
client_latency_distribution_all_path: client-latency-distribution-all.csv
client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
client_latency_distribution_summary_path: client-latency-distribution-summary.csv
client_latency_by_key_number_path: client-latency-by-key-number.csv
server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
server_memory_by_key_number_path: server-memory-by-key-number.csv
server_system_metrics_interpolated_path_list:
- 1-server-system-metrics-interpolated.csv
- 2-server-system-metrics-interpolated.csv
- 3-server-system-metrics-interpolated.csv
all_aggregated_output_path: all-aggregated.csv
zookeeper:
# if not empty, all test data paths are prefixed
path_prefix: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/zookeeper-r3.4.9-java8
client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
client_latency_distribution_all_path: client-latency-distribution-all.csv
client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
client_latency_distribution_summary_path: client-latency-distribution-summary.csv
client_latency_by_key_number_path: client-latency-by-key-number.csv
server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
server_memory_by_key_number_path: server-memory-by-key-number.csv
server_system_metrics_interpolated_path_list:
- 1-server-system-metrics-interpolated.csv
- 2-server-system-metrics-interpolated.csv
- 3-server-system-metrics-interpolated.csv
all_aggregated_output_path: all-aggregated.csv
consul:
# if not empty, all test data paths are prefixed
path_prefix: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/consul-v0.7.3-go1.7.4
client_system_metrics_interpolated_path: client-system-metrics-interpolated.csv
client_latency_throughput_timeseries_path: client-latency-throughput-timeseries.csv
client_latency_distribution_all_path: client-latency-distribution-all.csv
client_latency_distribution_percentile_path: client-latency-distribution-percentile.csv
client_latency_distribution_summary_path: client-latency-distribution-summary.csv
client_latency_by_key_number_path: client-latency-by-key-number.csv
server_data_size_on_disk_summary_path: server-data-size-on-disk-summary.csv
server_memory_by_key_number_path: server-memory-by-key-number.csv
server_system_metrics_interpolated_path_list:
- 1-server-system-metrics-interpolated.csv
- 2-server-system-metrics-interpolated.csv
- 3-server-system-metrics-interpolated.csv
all_aggregated_output_path: all-aggregated.csv
analyze:
all_aggregated_output_path_csv: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/all-aggregated.csv
all_aggregated_output_path_txt: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/all-aggregated.txt
plot_path_prefix: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable
plot_list:
- column: AVG-LATENCY-MS
x_axis: Second
y_axis: Latency(millisecond)
- column: AVG-THROUGHPUT
x_axis: Second
y_axis: Throughput(Requests/Second)
- column: AVG-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Voluntary Context Switches
- column: AVG-NON-VOLUNTARY-CTXT-SWITCHES
x_axis: Second
y_axis: Non-voluntary Context Switches
- column: AVG-CPU
x_axis: Second
y_axis: CPU(%)
- column: AVG-VMRSS-MB
x_axis: Second
y_axis: Memory(MB)
- column: AVG-READS-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Reads (Delta per Second)
- column: AVG-SECTORS-READ-DELTA
x_axis: Second
y_axis: Sectors Read (Delta per Second)
- column: AVG-WRITES-COMPLETED-DELTA
x_axis: Second
y_axis: Disk Writes (Delta per Second)
- column: AVG-SECTORS-WRITTEN-DELTA
x_axis: Second
y_axis: Sectors Written (Delta per Second)
- column: AVG-RECEIVE-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Receive(bytes) (Delta per Second)
- column: AVG-TRANSMIT-BYTES-NUM-DELTA
x_axis: Second
y_axis: Network Transmit(bytes) (Delta per Second)
readme:
output_path: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/README.md
images:
- title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS
path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.svg
type: remote
- title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY
path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY.svg
type: remote
- title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS
path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY-ERROR-POINTS.svg
type: remote
- title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT
path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.svg
type: remote
- title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES
path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VOLUNTARY-CTXT-SWITCHES.svg
type: remote
- title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES
path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg
type: remote
- title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU
path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-CPU.svg
type: remote
- title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB
path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.svg
type: remote
- title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY
path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY.svg
type: remote
- title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS
path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY-ERROR-POINTS.svg
type: remote
- title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA
path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg
type: remote
- title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA
path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-READ-DELTA.svg
type: remote
- title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA
path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-WRITES-COMPLETED-DELTA.svg
type: remote
- title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA
path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-SECTORS-WRITTEN-DELTA.svg
type: remote
- title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA
path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-RECEIVE-BYTES-NUM-DELTA.svg
type: remote
- title: 2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA
path: https://storage.googleapis.com/dbtester-results/2017Q1-00-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-TRANSMIT-BYTES-NUM-DELTA.svg
type: remote

21
config_etcdv2.go Normal file
View File

@ -0,0 +1,21 @@
// Copyright 2017 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package dbtester
// Etcdv2 is etcdv2-specific flags
// (https://github.com/coreos/etcd/blob/master/etcdmain/help.go).
type Etcdv2 struct {
// no options needed yet
}

22
config_etcdv3.go Normal file
View File

@ -0,0 +1,22 @@
// Copyright 2017 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package dbtester
// Etcdv3 is etcdv3-specific flags
// (https://github.com/coreos/etcd/blob/master/etcdmain/help.go).
type Etcdv3 struct {
SnapCount int64 `yaml:"snap_count"`
QuotaSizeBytes int64 `yaml:"quota_size_bytes"`
}

21
config_zetcd.go Normal file
View File

@ -0,0 +1,21 @@
// Copyright 2017 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package dbtester
// Zetcd is zetcd-specific flags
// (https://github.com/coreos/zetcd).
type Zetcd struct {
// no options needed yet
}

25
config_zookeeper.go Normal file
View File

@ -0,0 +1,25 @@
// Copyright 2017 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package dbtester
// Zookeeper is Zookeeper-specific flags
// (http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html).
type Zookeeper struct {
TickTime int64 `yaml:"tick_time"`
InitLimit int64 `yaml:"init_limit"`
SyncLimit int64 `yaml:"sync_limit"`
SnapCount int64 `yaml:"snap_count"`
MaxClientConnections int64 `yaml:"max_client_connections"`
}

View File

@ -16,11 +16,11 @@ package control
import (
"fmt"
"io/ioutil"
"os"
"strings"
"time"
"github.com/coreos/dbtester"
"github.com/coreos/dbtester/dbtesterpb"
"github.com/coreos/dbtester/pkg/netutil"
"github.com/coreos/dbtester/pkg/ntp"
"github.com/gyuho/psn"
@ -34,6 +34,7 @@ var Command = &cobra.Command{
RunE: commandFunc,
}
var databaseID string
var configPath string
var diskDevice string
var networkInterface string
@ -52,17 +53,15 @@ func init() {
nt = k
break
}
Command.PersistentFlags().StringVar(&databaseID, "database-id", "etcdv3", "etcdv2, etcdv3, zookeeper, consul, zetcd, cetcd.")
Command.PersistentFlags().StringVarP(&configPath, "config", "c", "", "YAML configuration file path.")
Command.PersistentFlags().StringVar(&diskDevice, "disk-device", dn, "Disk device to collect disk statistics metrics from.")
Command.PersistentFlags().StringVar(&networkInterface, "network-interface", nt, "Network interface to record in/outgoing packets.")
}
func commandFunc(cmd *cobra.Command, args []string) error {
cfg, err := ReadConfig(configPath)
if err != nil {
return err
}
switch cfg.Database {
switch databaseID {
case "etcdv2":
case "etcdv3":
case "zookeeper":
@ -70,30 +69,32 @@ func commandFunc(cmd *cobra.Command, args []string) error {
case "consul":
case "cetcd":
default:
return fmt.Errorf("%q is not supported", cfg.Database)
return fmt.Errorf("%q is not supported", databaseID)
}
if !cfg.Step2.SkipStressDatabase {
switch cfg.Step2.BenchType {
cfg, err := dbtester.ReadConfig(configPath, false)
if err != nil {
return err
}
gcfg, ok := cfg.DatabaseIDToTestGroup[databaseID]
if !ok {
return fmt.Errorf("%q is not found", databaseID)
}
if gcfg.BenchmarkSteps.Step2StressDatabase {
switch gcfg.BenchmarkOptions.Type {
case "write":
case "read":
case "read-oneshot":
default:
return fmt.Errorf("%q is not supported", cfg.Step2.BenchType)
return fmt.Errorf("%q is not supported", gcfg.BenchmarkOptions.Type)
}
}
if cfg.Step4.UploadLogs {
bts, err := ioutil.ReadFile(cfg.Step4.GoogleCloudStorageKeyPath)
if err != nil {
return err
}
cfg.Step4.GoogleCloudStorageKey = string(bts)
}
pid := int64(os.Getpid())
plog.Infof("starting collecting system metrics at %q [disk device: %q | network interface: %q | PID: %d]", cfg.ClientSystemMetrics, diskDevice, networkInterface, pid)
if err = os.RemoveAll(cfg.ClientSystemMetrics); err != nil {
plog.Infof("starting collecting system metrics at %q [disk device: %q | network interface: %q | PID: %d]", cfg.Control.ClientSystemMetricsPath, diskDevice, networkInterface, pid)
if err = os.RemoveAll(cfg.Control.ClientSystemMetricsPath); err != nil {
return err
}
tcfg := &psn.TopConfig{
@ -103,7 +104,7 @@ func commandFunc(cmd *cobra.Command, args []string) error {
}
var metricsCSV *psn.CSV
metricsCSV, err = psn.NewCSV(
cfg.ClientSystemMetrics,
cfg.Control.ClientSystemMetricsPath,
pid,
diskDevice,
networkInterface,
@ -125,7 +126,7 @@ func commandFunc(cmd *cobra.Command, args []string) error {
}
case <-donec:
plog.Infof("finishing collecting system metrics; saving CSV at %q", cfg.ClientSystemMetrics)
plog.Infof("finishing collecting system metrics; saving CSV at %q", cfg.Control.ClientSystemMetricsPath)
if err := metricsCSV.Save(); err != nil {
plog.Errorf("psn.CSV.Save(%q) error %v", metricsCSV.FilePath, err)
@ -137,7 +138,7 @@ func commandFunc(cmd *cobra.Command, args []string) error {
if err != nil {
plog.Fatalf("psn.CSV.Interpolate(%q) failed with %v", metricsCSV.FilePath, err)
}
interpolated.FilePath = cfg.ClientSystemMetricsInterpolated
interpolated.FilePath = cfg.Control.ClientSystemMetricsInterpolatedPath
if err := interpolated.Save(); err != nil {
plog.Errorf("psn.CSV.Save(%q) error %v", interpolated.FilePath, err)
} else {
@ -151,60 +152,89 @@ func commandFunc(cmd *cobra.Command, args []string) error {
}
}()
// protoc sorts the 'repeated' type data
// encode in string to enforce ordering of IPs
cfg.PeerIPString = strings.Join(cfg.PeerIPs, "___")
cfg.AgentEndpoints = make([]string, len(cfg.PeerIPs))
cfg.DatabaseEndpoints = make([]string, len(cfg.PeerIPs))
for i := range cfg.PeerIPs {
cfg.AgentEndpoints[i] = fmt.Sprintf("%s:%d", cfg.PeerIPs[i], cfg.AgentPort)
}
for i := range cfg.PeerIPs {
cfg.DatabaseEndpoints[i] = fmt.Sprintf("%s:%d", cfg.PeerIPs[i], cfg.DatabasePort)
}
no, nerr := ntp.DefaultSync()
plog.Infof("npt update output: %q", no)
plog.Infof("npt update error: %v", nerr)
println()
if !cfg.Step1.SkipStartDatabase {
if gcfg.BenchmarkSteps.Step1StartDatabase {
plog.Info("step 1: starting databases...")
if err = step1StartDatabase(cfg); err != nil {
if _, err = cfg.BroadcaseRequest(databaseID, dbtesterpb.Request_Start); err != nil {
return err
}
}
if !cfg.Step2.SkipStressDatabase {
if gcfg.BenchmarkSteps.Step2StressDatabase {
println()
time.Sleep(5 * time.Second)
println()
plog.Info("step 2: starting tests...")
if err = step2StressDatabase(cfg); err != nil {
if err = cfg.Stress(databaseID); err != nil {
return err
}
}
if gcfg.BenchmarkSteps.Step3StopDatabase {
println()
time.Sleep(5 * time.Second)
idxToResponse, err := step3StopDatabase(cfg)
println()
plog.Info("step 3: stopping tests...")
var idxToResp map[int]dbtesterpb.Response
for i := 0; i < 5; i++ {
idxToResp, err = cfg.BroadcaseRequest(databaseID, dbtesterpb.Request_Stop)
if err != nil {
plog.Warning(err)
plog.Warningf("#%d: STOP failed at %v", i, err)
time.Sleep(300 * time.Millisecond)
continue
}
for idx := range cfg.AgentEndpoints {
plog.Infof("stop response: %+v", idxToResponse[idx])
break
}
for idx := range gcfg.AgentEndpoints {
plog.Infof("stop response: %+v", idxToResp[idx])
}
println()
time.Sleep(time.Second)
saveDatasizeSummary(cfg, idxToResponse)
println()
plog.Info("step 3: saving responses...")
if err = cfg.SaveDatasizeOnDiskSummary(databaseID, idxToResp); err != nil {
return err
}
}
close(donec)
<-sysdonec
if cfg.Step4.UploadLogs {
if gcfg.BenchmarkSteps.Step4UploadLogs {
println()
time.Sleep(3 * time.Second)
if err := step4UploadLogs(cfg); err != nil {
println()
plog.Info("step 4: uploading logs...")
if err = cfg.UploadToGoogle(databaseID, cfg.Control.LogPath); err != nil {
return err
}
if err = cfg.UploadToGoogle(databaseID, cfg.Control.ClientSystemMetricsPath); err != nil {
return err
}
if err = cfg.UploadToGoogle(databaseID, cfg.Control.ClientSystemMetricsInterpolatedPath); err != nil {
return err
}
if err = cfg.UploadToGoogle(databaseID, cfg.Control.ClientLatencyThroughputTimeseriesPath); err != nil {
return err
}
if err = cfg.UploadToGoogle(databaseID, cfg.Control.ClientLatencyDistributionAllPath); err != nil {
return err
}
if err = cfg.UploadToGoogle(databaseID, cfg.Control.ClientLatencyDistributionPercentilePath); err != nil {
return err
}
if err = cfg.UploadToGoogle(databaseID, cfg.Control.ClientLatencyDistributionSummaryPath); err != nil {
return err
}
if err = cfg.UploadToGoogle(databaseID, cfg.Control.ClientLatencyByKeyNumberPath); err != nil {
return err
}
if err = cfg.UploadToGoogle(databaseID, cfg.Control.ServerDatasizeOnDiskSummaryPath); err != nil {
return err
}
}

View File

@ -1,179 +0,0 @@
// Copyright 2017 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package control
import (
"fmt"
"io/ioutil"
"github.com/coreos/dbtester/agent/agentpb"
"gopkg.in/yaml.v2"
)
// Config configures dbtester control clients.
type Config struct {
Database string `yaml:"database"`
TestName string `yaml:"test_name"`
PeerIPs []string `yaml:"peer_ips"`
PeerIPString string
AgentPort int `yaml:"agent_port"`
DatabasePort int `yaml:"database_port"`
AgentEndpoints []string
DatabaseEndpoints []string
Log string `yaml:"log"`
DatasizeSummary string `yaml:"data_size_summary"`
DataLatencyDistributionSummary string `yaml:"data_latency_distribution_summary"`
DataLatencyDistributionPercentile string `yaml:"data_latency_distribution_percentile"`
DataLatencyDistributionAll string `yaml:"data_latency_distribution_all"`
DataLatencyThroughputTimeseries string `yaml:"data_latency_throughput_timeseries"`
DataLatencyByKeyNumber string `yaml:"data_latency_by_key_number"`
ClientSystemMetrics string `yaml:"client_system_metrics"`
ClientSystemMetricsInterpolated string `yaml:"client_system_metrics_interpolated"`
// https://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
Step1 struct {
SkipStartDatabase bool `yaml:"skip_start_database"`
EtcdSnapCount int64 `yaml:"etcd_snap_count"`
EtcdQuotaSizeBytes int64 `yaml:"etcd_quota_size_bytes"`
ZookeeperSnapCount int64 `yaml:"zookeeper_snap_count"`
ZookeeperMaxClientCnxns int64 `yaml:"zookeeper_max_client_connections"`
} `yaml:"step1"`
Step2 struct {
SkipStressDatabase bool `yaml:"skip_stress_database"`
BenchType string `yaml:"bench_type"`
StaleRead bool `yaml:"stale_read"`
Connections int `yaml:"connections"`
Clients int `yaml:"clients"`
ConnectionsClients []int `yaml:"connections_clients"`
KeySize int `yaml:"key_size"`
SameKey bool `yaml:"same_key"`
ValueSize int `yaml:"value_size"`
TotalRequests int `yaml:"total_requests"`
RequestsPerSecond int `yaml:"requests_per_second"`
} `yaml:"step2"`
Step3 struct {
Action string `yaml:"action"`
} `yaml:"step3"`
Step4 struct {
UploadLogs bool `yaml:"upload_logs"`
GoogleCloudProjectName string `yaml:"google_cloud_project_name"`
GoogleCloudStorageKey string
GoogleCloudStorageKeyPath string `yaml:"google_cloud_storage_key_path"`
GoogleCloudStorageBucketName string `yaml:"google_cloud_storage_bucket_name"`
GoogleCloudStorageSubDirectory string `yaml:"google_cloud_storage_sub_directory"`
} `yaml:"step4"`
}
var (
defaultEtcdSnapCount int64 = 100000
defaultZookeeperSnapCount int64 = 100000
defaultZookeeperMaxClientCnxns int64 = 5000
)
// ReadConfig reads control configuration file.
func ReadConfig(fpath string) (Config, error) {
bts, err := ioutil.ReadFile(fpath)
if err != nil {
return Config{}, err
}
rs := Config{}
if err := yaml.Unmarshal(bts, &rs); err != nil {
return Config{}, err
}
if rs.Step2.Connections != rs.Step2.Clients {
switch rs.Database {
case "etcdv2":
return Config{}, fmt.Errorf("connected %d != clients %d", rs.Step2.Connections, rs.Step2.Clients)
case "etcdv3":
case "zookeeper":
return Config{}, fmt.Errorf("connected %d != clients %d", rs.Step2.Connections, rs.Step2.Clients)
case "zetcd":
return Config{}, fmt.Errorf("connected %d != clients %d", rs.Step2.Connections, rs.Step2.Clients)
case "consul":
return Config{}, fmt.Errorf("connected %d != clients %d", rs.Step2.Connections, rs.Step2.Clients)
case "cetcd":
return Config{}, fmt.Errorf("connected %d != clients %d", rs.Step2.Connections, rs.Step2.Clients)
}
}
if rs.Step1.EtcdSnapCount == 0 {
rs.Step1.EtcdSnapCount = defaultEtcdSnapCount
}
if rs.Step1.ZookeeperSnapCount == 0 {
rs.Step1.ZookeeperSnapCount = defaultZookeeperSnapCount
}
if rs.Step1.ZookeeperMaxClientCnxns == 0 {
rs.Step1.ZookeeperMaxClientCnxns = defaultZookeeperMaxClientCnxns
}
return rs, nil
}
// ToRequest converts control configuration to agent RPC.
func (cfg *Config) ToRequest() agentpb.Request {
req := agentpb.Request{}
req.TestName = cfg.TestName
switch cfg.Database {
case "etcdv2":
req.Database = agentpb.Request_etcdv2
case "etcdv3":
req.Database = agentpb.Request_etcdv3
case "zookeeper":
req.Database = agentpb.Request_ZooKeeper
case "zetcd":
req.Database = agentpb.Request_zetcd
case "consul":
req.Database = agentpb.Request_Consul
case "cetcd":
req.Database = agentpb.Request_cetcd
}
req.PeerIPString = cfg.PeerIPString
req.EtcdSnapCount = cfg.Step1.EtcdSnapCount
req.EtcdQuotaSizeBytes = cfg.Step1.EtcdQuotaSizeBytes
req.ZookeeperSnapCount = cfg.Step1.ZookeeperSnapCount
req.ZookeeperMaxClientCnxns = cfg.Step1.ZookeeperMaxClientCnxns
req.ClientNum = int64(cfg.Step2.Clients)
req.UploadLogs = cfg.Step4.UploadLogs
req.GoogleCloudProjectName = cfg.Step4.GoogleCloudProjectName
req.GoogleCloudStorageKey = cfg.Step4.GoogleCloudStorageKey
req.GoogleCloudStorageBucketName = cfg.Step4.GoogleCloudStorageBucketName
req.GoogleCloudStorageSubDirectory = cfg.Step4.GoogleCloudStorageSubDirectory
return req
}

View File

@ -1,140 +0,0 @@
// Copyright 2017 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package control
import (
"reflect"
"testing"
)
func TestReadConfig(t *testing.T) {
c, err := ReadConfig("config_test.yaml")
if err != nil {
t.Fatal(err)
}
if c.Database != "etcdv3" {
t.Fatalf("unexpected %s", c.Database)
}
if c.TestName != "01-etcdv3" {
t.Fatalf("unexpected %s", c.TestName)
}
if !reflect.DeepEqual(c.PeerIPs, []string{"10.240.0.13", "10.240.0.14", "10.240.0.15"}) {
t.Fatalf("unexpected %s", c.PeerIPs)
}
if c.AgentPort != 3500 {
t.Fatalf("unexpected %d", c.AgentPort)
}
if c.DatabasePort != 2379 {
t.Fatalf("unexpected %d", c.DatabasePort)
}
if c.Log != "control.log" {
t.Fatalf("unexpected %v", c.Log)
}
if c.DatasizeSummary != "data-size-summary.csv" {
t.Fatalf("unexpected %s", c.DatasizeSummary)
}
if c.DataLatencyDistributionSummary != "data-latency-distribution-summary.csv" {
t.Fatalf("unexpected %s", c.DataLatencyDistributionSummary)
}
if c.DataLatencyDistributionPercentile != "data-latency-distribution-percentile.csv" {
t.Fatalf("unexpected %s", c.DataLatencyDistributionPercentile)
}
if c.DataLatencyDistributionAll != "data-latency-distribution-all.csv" {
t.Fatalf("unexpected %s", c.DataLatencyDistributionAll)
}
if c.DataLatencyThroughputTimeseries != "data-latency-throughput-timeseries.csv" {
t.Fatalf("unexpected %s", c.DataLatencyThroughputTimeseries)
}
if c.DataLatencyByKeyNumber != "data-latency-by-key-number.csv" {
t.Fatalf("unexpected %s", c.DataLatencyByKeyNumber)
}
if c.ClientSystemMetrics != "client-system-metrics.csv" {
t.Fatalf("unexpected %s", c.ClientSystemMetrics)
}
if c.ClientSystemMetricsInterpolated != "client-system-metrics-interpolated.csv" {
t.Fatalf("unexpected %s", c.ClientSystemMetricsInterpolated)
}
if c.Step1.SkipStartDatabase {
t.Fatalf("unexpected %v", c.Step1.SkipStartDatabase)
}
if c.Step1.EtcdSnapCount != 100000 {
t.Fatalf("unexpected %d", c.Step1.EtcdSnapCount)
}
if c.Step1.EtcdQuotaSizeBytes != 8000000000 {
t.Fatalf("unexpected %d", c.Step1.EtcdQuotaSizeBytes)
}
if c.Step1.ZookeeperSnapCount != 100000 {
t.Fatalf("unexpected %d", c.Step1.ZookeeperSnapCount)
}
if c.Step1.ZookeeperMaxClientCnxns != 5000 {
t.Fatalf("unexpected %d", c.Step1.ZookeeperMaxClientCnxns)
}
if c.Step2.SkipStressDatabase {
t.Fatalf("unexpected %v", c.Step2.SkipStressDatabase)
}
if c.Step2.BenchType != "write" {
t.Fatalf("unexpected %s", c.Step2.BenchType)
}
if c.Step2.Clients != 1 {
t.Fatalf("unexpected %d", c.Step2.Clients)
}
if c.Step2.Connections != 1 {
t.Fatalf("unexpected %d", c.Step2.Connections)
}
if !reflect.DeepEqual(c.Step2.ConnectionsClients, []int{1, 3, 5, 10, 50, 100, 500, 700, 1000}) {
t.Fatalf("unexpected %d", c.Step2.ConnectionsClients)
}
if c.Step2.KeySize != 256 {
t.Fatalf("unexpected %d", c.Step2.KeySize)
}
if c.Step2.SameKey {
t.Fatalf("unexpected %v", c.Step2.SameKey)
}
if c.Step2.ValueSize != 1024 {
t.Fatalf("unexpected %d", c.Step2.ValueSize)
}
if !c.Step2.StaleRead {
t.Fatalf("unexpected %v", c.Step2.StaleRead)
}
if c.Step2.TotalRequests != 100000 {
t.Fatalf("unexpected %d", c.Step2.TotalRequests)
}
if c.Step2.RequestsPerSecond != 100 {
t.Fatalf("unexpected %d", c.Step2.RequestsPerSecond)
}
if c.Step3.Action != "stop" {
t.Fatalf("unexpected %v", c.Step3.Action)
}
if !c.Step4.UploadLogs {
t.Fatalf("unexpected %v", c.Step4.UploadLogs)
}
if c.Step4.GoogleCloudProjectName != "etcd-development" {
t.Fatalf("unexpected %s", c.Step4.GoogleCloudProjectName)
}
if c.Step4.GoogleCloudStorageKeyPath != "$HOME/gcloud-key.json" {
t.Fatalf("unexpected %s", c.Step4.GoogleCloudStorageKeyPath)
}
if c.Step4.GoogleCloudStorageBucketName != "dbtester-results" {
t.Fatalf("unexpected %s", c.Step4.GoogleCloudStorageBucketName)
}
if c.Step4.GoogleCloudStorageSubDirectory != "2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable" {
t.Fatalf("unexpected %s", c.Step4.GoogleCloudStorageSubDirectory)
}
}

View File

@ -1,56 +0,0 @@
database: etcdv3
test_name: 01-etcdv3
peer_ips:
- 10.240.0.13
- 10.240.0.14
- 10.240.0.15
agent_port: 3500
database_port: 2379
log: control.log
data_size_summary: data-size-summary.csv
data_latency_distribution_summary: data-latency-distribution-summary.csv
data_latency_distribution_percentile: data-latency-distribution-percentile.csv
data_latency_distribution_all: data-latency-distribution-all.csv
data_latency_throughput_timeseries: data-latency-throughput-timeseries.csv
data_latency_by_key_number: data-latency-by-key-number.csv
# client machine's system metrics
client_system_metrics: client-system-metrics.csv
client_system_metrics_interpolated: client-system-metrics-interpolated.csv
# start database by sending RPC calls to agents
step1:
skip_start_database: false
etcd_snap_count: 100000
etcd_quota_size_bytes: 8000000000
zookeeper_snap_count: 100000
zookeeper_max_client_connections: 5000
# start benchmark
step2:
skip_stress_database: false
bench_type: write
stale_read: true
connections: 1
clients: 1
# if specified, connections, clients are overwritten
connections_clients: [1, 3, 5, 10, 50, 100, 500, 700, 1000]
key_size: 256
value_size: 1024
total_requests: 100000
requests_per_second: 100
# after benchmark
step3:
action: stop
# upload logs
step4:
upload_logs: true
google_cloud_project_name: etcd-development
google_cloud_storage_key_path: $HOME/gcloud-key.json
google_cloud_storage_bucket_name: dbtester-results
google_cloud_storage_sub_directory: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable

View File

@ -1,96 +0,0 @@
// Copyright 2017 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package control
import (
"context"
"time"
"github.com/coreos/dbtester/agent/agentpb"
"google.golang.org/grpc"
)
func bcastReq(cfg Config, op agentpb.Request_Operation) (map[int]agentpb.Response, error) {
req := cfg.ToRequest()
req.Operation = op
type result struct {
idx int
r agentpb.Response
}
donec, errc := make(chan result), make(chan error)
for i := range cfg.PeerIPs {
go func(i int) {
if resp, err := sendReq(cfg.AgentEndpoints[i], req, i); err != nil {
errc <- err
} else {
donec <- result{idx: i, r: *resp}
}
}(i)
time.Sleep(time.Second)
}
im := make(map[int]agentpb.Response)
var errs []error
for cnt := 0; cnt != len(cfg.PeerIPs); cnt++ {
select {
case rs := <-donec:
im[rs.idx] = rs.r
case err := <-errc:
errs = append(errs, err)
}
}
if len(errs) > 0 {
return nil, errs[0]
}
return im, nil
}
func sendReq(ep string, req agentpb.Request, i int) (*agentpb.Response, error) {
req.ServerIndex = uint32(i)
req.ZookeeperMyID = uint32(i + 1)
plog.Infof("sending message [index: %d | operation: %q | database: %q | endpoint: %q]", i, req.Operation, req.Database, ep)
conn, err := grpc.Dial(ep, grpc.WithInsecure())
if err != nil {
plog.Errorf("grpc.Dial connecting error (%v) [index: %d | endpoint: %q]", err, i, ep)
return nil, err
}
defer conn.Close()
cli := agentpb.NewTransporterClient(conn)
// give enough timeout
// e.g. uploading logs takes longer
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
resp, err := cli.Transfer(ctx, &req)
cancel()
if err != nil {
plog.Errorf("cli.Transfer error (%v) [index: %d | endpoint: %q]", err, i, ep)
return nil, err
}
plog.Infof("got response [index: %d | endpoint: %q | response: %+v]", i, ep, resp)
return resp, nil
}
func step1StartDatabase(cfg Config) error {
_, err := bcastReq(cfg, agentpb.Request_Start)
return err
}

View File

@ -1,234 +0,0 @@
// Copyright 2017 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package control
import (
"bufio"
"fmt"
"net"
"net/http"
"os"
"strconv"
"strings"
"time"
clientv2 "github.com/coreos/etcd/client"
"github.com/coreos/etcd/clientv3"
consulapi "github.com/hashicorp/consul/api"
"github.com/samuel/go-zookeeper/zk"
)
var (
zkCreateFlags = int32(0)
zkCreateAcl = zk.WorldACL(zk.PermAll)
)
type request struct {
etcdv2Op etcdv2Op
etcdv3Op clientv3.Op
zkOp zkOp
consulOp consulOp
}
type etcdv2Op struct {
key string
value string
}
type zkOp struct {
key string
value []byte
staleRead bool
}
type consulOp struct {
key string
value []byte
staleRead bool
}
var (
// dialTotal counts the number of mustCreateConn calls so that endpoint
// connections can be handed out in round-robin order
dialTotal int
)
func mustCreateConnEtcdv3(endpoints []string) *clientv3.Client {
endpoint := endpoints[dialTotal%len(endpoints)]
dialTotal++
cfg := clientv3.Config{
Endpoints: []string{endpoint},
}
client, err := clientv3.New(cfg)
if err != nil {
fmt.Fprintf(os.Stderr, "dial error: %v\n", err)
os.Exit(1)
}
return client
}
type etcdv3ClientCfg struct {
totalConns int
totalClients int
}
func mustCreateClientsEtcdv3(endpoints []string, cfg etcdv3ClientCfg) []*clientv3.Client {
conns := make([]*clientv3.Client, cfg.totalConns)
for i := range conns {
conns[i] = mustCreateConnEtcdv3(endpoints)
}
clients := make([]*clientv3.Client, cfg.totalClients)
for i := range clients {
clients[i] = conns[i%int(cfg.totalConns)]
}
return clients
}
func mustCreateClientsEtcdv2(endpoints []string, total int) []clientv2.KeysAPI {
cks := make([]clientv2.KeysAPI, total)
for i := range cks {
endpoint := endpoints[dialTotal%len(endpoints)]
dialTotal++
if !strings.HasPrefix(endpoint, "http://") {
endpoint = "http://" + endpoint
}
tr := &http.Transport{
Proxy: http.ProxyFromEnvironment,
Dial: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
}).Dial,
TLSHandshakeTimeout: 10 * time.Second,
}
cfg := clientv2.Config{
Endpoints: []string{endpoint},
Transport: tr,
HeaderTimeoutPerRequest: time.Second,
}
c, err := clientv2.New(cfg)
if err != nil {
plog.Fatal(err)
}
kapi := clientv2.NewKeysAPI(c)
cks[i] = kapi
}
return cks
}
func mustCreateConnsZk(endpoints []string, total int) []*zk.Conn {
zks := make([]*zk.Conn, total)
for i := range zks {
endpoint := endpoints[dialTotal%len(endpoints)]
dialTotal++
conn, _, err := zk.Connect([]string{endpoint}, time.Second)
if err != nil {
plog.Fatal(err)
}
zks[i] = conn
}
return zks
}
func mustCreateConnsConsul(endpoints []string, total int) []*consulapi.KV {
css := make([]*consulapi.KV, total)
for i := range css {
endpoint := endpoints[dialTotal%len(endpoints)]
dialTotal++
dcfg := consulapi.DefaultConfig()
dcfg.Address = endpoint // x.x.x.x:8500
cli, err := consulapi.NewClient(dcfg)
if err != nil {
plog.Fatal(err)
}
css[i] = cli.KV()
}
return css
}
func getTotalKeysEtcdv2(endpoints []string) map[string]int64 {
rs := make(map[string]int64)
for _, ep := range endpoints {
rs[ep] = 0 // not supported in metrics
}
return rs
}
func getTotalKeysEtcdv3(endpoints []string) map[string]int64 {
rs := make(map[string]int64)
for _, ep := range endpoints {
if !strings.HasPrefix(ep, "http://") {
ep = "http://" + ep
}
plog.Println("GET", ep+"/metrics")
resp, err := http.Get(ep + "/metrics")
if err != nil {
plog.Println(err)
rs[ep] = 0
}
scanner := bufio.NewScanner(resp.Body)
for scanner.Scan() {
txt := scanner.Text()
if strings.HasPrefix(txt, "#") {
continue
}
ts := strings.SplitN(txt, " ", 2)
fv := 0.0
if len(ts) == 2 {
v, err := strconv.ParseFloat(ts[1], 64)
if err == nil {
fv = v
}
}
if ts[0] == "etcd_debugging_mvcc_keys_total" {
rs[ep] = int64(fv)
break
}
}
gracefulClose(resp)
}
plog.Println("getTotalKeysEtcdv3", rs)
return rs
}
func getTotalKeysZk(endpoints []string) map[string]int64 {
rs := make(map[string]int64)
stats, ok := zk.FLWSrvr(endpoints, 5*time.Second)
if !ok {
plog.Printf("getTotalKeysZk failed with %+v", stats)
for _, ep := range endpoints {
rs[ep] = 0
}
return rs
}
for i, s := range stats {
rs[endpoints[i]] = s.NodeCount
}
return rs
}
func getTotalKeysConsul(endpoints []string) map[string]int64 {
rs := make(map[string]int64)
for _, ep := range endpoints {
rs[ep] = 0 // not supported in consul
}
return rs
}

View File

@ -1,57 +0,0 @@
// Copyright 2017 CoreOS, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package control
import (
"github.com/coreos/dbtester/agent/agentpb"
humanize "github.com/dustin/go-humanize"
"github.com/gyuho/dataframe"
)
var DataSummaryColumns = []string{
"INDEX",
"DATABASE-ENDPOINT",
"TOTAL-DATA-SIZE",
"TOTAL-DATA-SIZE-BYTES-NUM",
}
func saveDatasizeSummary(cfg Config, idxToResponse map[int]agentpb.Response) {
c1 := dataframe.NewColumn(DataSummaryColumns[0])
c2 := dataframe.NewColumn(DataSummaryColumns[1])
c3 := dataframe.NewColumn(DataSummaryColumns[2])
c4 := dataframe.NewColumn(DataSummaryColumns[3])
for i := range cfg.DatabaseEndpoints {
c1.PushBack(dataframe.NewStringValue(i))
c2.PushBack(dataframe.NewStringValue(cfg.DatabaseEndpoints[i]))
c3.PushBack(dataframe.NewStringValue(humanize.Bytes(uint64(idxToResponse[i].Datasize))))
c4.PushBack(dataframe.NewStringValue(idxToResponse[i].Datasize))
}
fr := dataframe.New()
if err := fr.AddColumn(c1); err != nil {
plog.Fatal(err)
}
if err := fr.AddColumn(c2); err != nil {
plog.Fatal(err)
}
if err := fr.AddColumn(c3); err != nil {
plog.Fatal(err)
}
if err := fr.AddColumn(c4); err != nil {
plog.Fatal(err)
}
if err := fr.CSV(cfg.DatasizeSummary); err != nil {
plog.Fatal(err)
}
}

Some files were not shown because too many files have changed in this diff Show More