Merge pull request #269 from gyuho/all-cleanup
*: clean up and new test results
|
|
@ -1,2 +0,0 @@
|
|||
# binary file
|
||||
dbtester
|
||||
536
README.md
|
|
@ -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 |
|
||||
+-----------------------------+-------------------+------------------------+-----------------------+
|
||||
+----------------------------------------+-------------------+------------------------+-----------------------+
|
||||
| | etcd-v3.1-go1.7.4 | zookeeper-r3.4.9-java8 | consul-v0.7.3-go1.7.4 |
|
||||
+----------------------------------------+-------------------+------------------------+-----------------------+
|
||||
| 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">
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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, " ")
|
||||
|
||||
|
|
|
|||
|
|
@ -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],
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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, ","),
|
||||
|
|
|
|||
|
|
@ -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, " ")
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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("\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)
|
||||
}
|
||||
|
|
@ -21,51 +21,54 @@ 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"
|
||||
)
|
||||
|
||||
type allAggregatedData struct {
|
||||
title string
|
||||
data []*analyzeData
|
||||
databaseTags []string
|
||||
headerToLegend map[string]string
|
||||
title string
|
||||
data []*analyzeData
|
||||
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
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
row29ErrorCount = append(row29ErrorCount, humanize.Comma(totalErrCnt))
|
||||
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 {
|
||||
return err
|
||||
// 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,84 +874,73 @@ 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
|
||||
}
|
||||
|
||||
plog.Printf("aggregating data for %q of all database (by client number)", plotConfig.Column)
|
||||
nf3 := dataframe.New()
|
||||
var firstKeys []int
|
||||
for i := range clientNumColumns {
|
||||
n := clientNumColumns[i].Count()
|
||||
allData := make(map[int]float64)
|
||||
for j := 0; j < n; j++ {
|
||||
v1, err := clientNumColumns[i].Value(j)
|
||||
if 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
|
||||
for i := range clientNumColumns {
|
||||
n := clientNumColumns[i].Count()
|
||||
allData := make(map[int]float64)
|
||||
for j := 0; j < n; j++ {
|
||||
v1, err := clientNumColumns[i].Value(j)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
num, _ := v1.Int64()
|
||||
|
||||
v2, err := dataColumns[i].Value(j)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
data, _ := v2.Float64()
|
||||
|
||||
if v, ok := allData[int(num)]; ok {
|
||||
allData[int(num)] = (v + data) / 2
|
||||
} else {
|
||||
allData[int(num)] = data
|
||||
}
|
||||
}
|
||||
num, _ := v1.Int64()
|
||||
|
||||
v2, err := dataColumns[i].Value(j)
|
||||
if err != nil {
|
||||
return err
|
||||
var allKeys []int
|
||||
for k := range allData {
|
||||
allKeys = append(allKeys, k)
|
||||
}
|
||||
data, _ := v2.Float64()
|
||||
sort.Ints(allKeys)
|
||||
|
||||
if v, ok := allData[int(num)]; ok {
|
||||
allData[int(num)] = (v + data) / 2
|
||||
} else {
|
||||
allData[int(num)] = data
|
||||
if i == 0 {
|
||||
firstKeys = allKeys
|
||||
}
|
||||
if !reflect.DeepEqual(firstKeys, allKeys) {
|
||||
return fmt.Errorf("all keys must be %+v, got %+v", firstKeys, allKeys)
|
||||
}
|
||||
}
|
||||
var allKeys []int
|
||||
for k := range allData {
|
||||
allKeys = append(allKeys, k)
|
||||
}
|
||||
sort.Ints(allKeys)
|
||||
|
||||
if i == 0 {
|
||||
firstKeys = allKeys
|
||||
}
|
||||
if !reflect.DeepEqual(firstKeys, allKeys) {
|
||||
return fmt.Errorf("all keys must be %+v, got %+v", firstKeys, allKeys)
|
||||
}
|
||||
|
||||
if i == 0 {
|
||||
col1 := dataframe.NewColumn("CONTROL-CLIENT-NUM")
|
||||
if i == 0 {
|
||||
col1 := dataframe.NewColumn("CONTROL-CLIENT-NUM")
|
||||
for j := range allKeys {
|
||||
col1.PushBack(dataframe.NewStringValue(allKeys[j]))
|
||||
}
|
||||
if err := nf3.AddColumn(col1); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
col2 := dataframe.NewColumn(dataColumns[i].Header())
|
||||
for j := range allKeys {
|
||||
col1.PushBack(dataframe.NewStringValue(allKeys[j]))
|
||||
col2.PushBack(dataframe.NewStringValue(fmt.Sprintf("%.4f", allData[allKeys[j]])))
|
||||
}
|
||||
if err := nf3.AddColumn(col1); err != nil {
|
||||
if err := nf3.AddColumn(col2); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
col2 := dataframe.NewColumn(dataColumns[i].Header())
|
||||
for j := range allKeys {
|
||||
col2.PushBack(dataframe.NewStringValue(fmt.Sprintf("%.4f", allData[allKeys[j]])))
|
||||
}
|
||||
if err := nf3.AddColumn(col2); err != nil {
|
||||
if err = nf3.CSV(filepath.Join(filepath.Dir(plotConfig.OutputPathCSV), plotConfig.Column+"-BY-CLIENT-NUM-aggregated"+".csv")); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if err = nf3.CSV(filepath.Join(cfg.WorkDir, 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 {
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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">
|
||||
|
Before Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 57 KiB |
|
|
@ -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">
|
||||
|
||||
|
||||
|
||||
|
|
@ -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"},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
@ -0,0 +1 @@
|
|||
test-key
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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"`
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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"`
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
println()
|
||||
time.Sleep(5 * time.Second)
|
||||
idxToResponse, err := step3StopDatabase(cfg)
|
||||
if err != nil {
|
||||
plog.Warning(err)
|
||||
}
|
||||
for idx := range cfg.AgentEndpoints {
|
||||
plog.Infof("stop response: %+v", idxToResponse[idx])
|
||||
}
|
||||
if gcfg.BenchmarkSteps.Step3StopDatabase {
|
||||
println()
|
||||
time.Sleep(5 * time.Second)
|
||||
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.Warningf("#%d: STOP failed at %v", i, err)
|
||||
time.Sleep(300 * time.Millisecond)
|
||||
continue
|
||||
}
|
||||
break
|
||||
}
|
||||
for idx := range gcfg.AgentEndpoints {
|
||||
plog.Infof("stop response: %+v", idxToResp[idx])
|
||||
}
|
||||
|
||||
println()
|
||||
time.Sleep(time.Second)
|
||||
saveDatasizeSummary(cfg, idxToResponse)
|
||||
println()
|
||||
time.Sleep(time.Second)
|
||||
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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||