Update benchmarks after fixing skip list bug in a9b3d3d
Some checks failed
Tests / Clang total: 932, passed: 932
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 932, passed: 932
Tests / Release [gcc,aarch64] total: 931, failed: 309, passed: 622
Tests / Coverage total: 930, passed: 930
weaselab/conflict-set/pipeline/head There was a failure building this commit

This commit is contained in:
2024-03-14 15:50:55 -07:00
parent 6f81580953
commit 9cafef8bbb

108
README.md
View File

@@ -2,54 +2,56 @@ A data structure for optimistic concurrency control on ranges of bitwise-lexicog
Intended to replace FoundationDB's skip list.
Hardware for all benchmarks is a mac m1 2020.
# FoundationDB's benchmark
## Skip list
```
New conflict set: 2.404 sec
0.520 Mtransactions/sec
2.080 Mkeys/sec
Detect only: 2.266 sec
0.552 Mtransactions/sec
2.207 Mkeys/sec
Skiplist only: 1.594 sec
0.784 Mtransactions/sec
3.137 Mkeys/sec
New conflict set: 1.962 sec
0.637 Mtransactions/sec
2.549 Mkeys/sec
Detect only: 1.853 sec
0.674 Mtransactions/sec
2.698 Mkeys/sec
Skiplist only: 1.269 sec
0.985 Mtransactions/sec
3.940 Mkeys/sec
Performance counters:
Build: 0.071
Add: 0.0641
Detect: 2.27
D.Sort: 0.44
D.Combine: 0.018
D.CheckRead: 0.855
D.CheckIntraBatch: 0.00903
D.MergeWrite: 0.739
D.RemoveBefore: 0.201
Build: 0.0526
Add: 0.054
Detect: 1.85
D.Sort: 0.413
D.Combine: 0.0148
D.CheckRead: 0.678
D.CheckIntraBatch: 0.00679
D.MergeWrite: 0.591
D.RemoveBefore: 0.147
```
## Radix tree (this implementation)
```
New conflict set: 1.743 sec
0.717 Mtransactions/sec
2.869 Mkeys/sec
Detect only: 1.611 sec
0.776 Mtransactions/sec
3.103 Mkeys/sec
Skiplist only: 0.919 sec
1.360 Mtransactions/sec
5.440 Mkeys/sec
New conflict set: 1.342 sec
0.931 Mtransactions/sec
3.726 Mkeys/sec
Detect only: 1.227 sec
1.018 Mtransactions/sec
4.074 Mkeys/sec
Skiplist only: 0.576 sec
2.169 Mtransactions/sec
8.676 Mkeys/sec
Performance counters:
Build: 0.0657
Add: 0.0628
Detect: 1.61
D.Sort: 0.442
D.Combine: 0.0178
D.CheckRead: 0.395
D.CheckIntraBatch: 0.00776
D.MergeWrite: 0.524
D.RemoveBefore: 0.221
Build: 0.0568
Add: 0.0564
Detect: 1.23
D.Sort: 0.414
D.Combine: 0.0162
D.CheckRead: 0.228
D.CheckIntraBatch: 0.00665
D.MergeWrite: 0.348
D.RemoveBefore: 0.211
```
# Our benchmark
@@ -58,25 +60,25 @@ Performance counters:
| ns/op | op/s | err% | total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
| 270.07 | 3,702,706.03 | 0.4% | 0.01 | `point reads`
| 285.76 | 3,499,437.03 | 1.5% | 0.01 | `prefix reads`
| 532.54 | 1,877,794.90 | 0.7% | 0.01 | `range reads`
| 528.50 | 1,892,132.94 | 0.7% | 0.01 | `point writes`
| 516.53 | 1,935,978.22 | 0.9% | 0.01 | `prefix writes`
| 303.34 | 3,296,630.84 | 3.6% | 0.05 | `range writes`
| 502.88 | 1,988,553.24 | 2.0% | 0.01 | `monotonic increasing point writes`
| 254.17 | 3,934,426.23 | 0.3% | 0.01 | `point reads`
| 275.58 | 3,628,769.92 | 2.1% | 0.01 | `prefix reads`
| 494.87 | 2,020,718.51 | 0.7% | 0.01 | `range reads`
| 495.91 | 2,016,512.61 | 1.7% | 0.01 | `point writes`
| 478.11 | 2,091,578.00 | 0.8% | 0.01 | `prefix writes`
| 307.08 | 3,256,480.40 | 1.9% | 0.04 | `range writes`
| 610.89 | 1,636,953.81 | 0.7% | 0.01 | `monotonic increasing point writes`
## Radix tree (this implementation)
| ns/op | op/s | err% | total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
| 14.52 | 68,850,842.99 | 1.2% | 0.01 | `point reads`
| 60.89 | 16,422,538.22 | 1.5% | 0.01 | `prefix reads`
| 226.89 | 4,407,362.98 | 0.5% | 0.01 | `range reads`
| 22.99 | 43,498,198.49 | 0.2% | 0.01 | `point writes`
| 50.51 | 19,799,864.54 | 1.0% | 0.01 | `prefix writes`
| 82.50 | 12,121,212.12 | 2.6% | 0.03 | `range writes`
| 119.94 | 8,337,354.54 | 2.1% | 0.01 | `monotonic increasing point writes`
| 22.39 | 44,667,832.17 | 0.2% | 0.01 | `point reads`
| 53.89 | 18,554,840.41 | 3.4% | 0.01 | `prefix reads`
| 217.71 | 4,593,220.24 | 0.2% | 0.01 | `range reads`
| 29.72 | 33,642,099.66 | 1.1% | 0.01 | `point writes`
| 44.86 | 22,294,037.02 | 0.8% | 0.01 | `prefix writes`
| 55.00 | 18,181,818.18 | 0.8% | 0.03 | `range writes`
| 109.21 | 9,156,917.53 | 2.9% | 0.01 | `monotonic increasing point writes`
# "Real data" test
@@ -85,13 +87,13 @@ Point queries only, best of three runs. Gc ratio is the ratio of time spent doin
## skip list
```
Check: 12.7863 seconds, 292.384 MB/s, Add: 19.8276 seconds, 35.4071 MB/s, Gc ratio: 23.5314%
Check: 11.7282 seconds, 318.763 MB/s, Add: 5.76499 seconds, 121.776 MB/s, Gc ratio: 48.0772%
```
## radix tree
```
Check: 3.60187 seconds, 1037.94 MB/s, Add: 3.03958 seconds, 230.966 MB/s, Gc ratio: 52.3876%
Check: 3.27475 seconds, 1141.62 MB/s, Add: 2.13594 seconds, 328.678 MB/s, Gc ratio: 50.1739%
```
## hash table
@@ -99,5 +101,5 @@ Check: 3.60187 seconds, 1037.94 MB/s, Add: 3.03958 seconds, 230.966 MB/s, Gc rat
(The hash table implementation doesn't work on range queries, and its purpose is to provide an idea of how fast point queries can be)
```
Check: 2.15925 seconds, 1731.4 MB/s, Add: 1.08519 seconds, 646.926 MB/s, Gc ratio: 52.1526%
Check: 1.86291 seconds, 2006.81 MB/s, Add: 0.923653 seconds, 760.067 MB/s, Gc ratio: 54.2605%
```