ad91fb36a59940e3ba94475cc8ee83b0f7d277cc
All checks were successful
Tests / Clang total: 1096, passed: 1096
Clang |Total|New|Outstanding|Fixed|Trend
|:-:|:-:|:-:|:-:|:-:
|0|0|0|0|:clap:
Tests / SIMD fallback total: 1096, passed: 1096
Tests / Release [gcc] total: 1096, passed: 1096
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend
|:-:|:-:|:-:|:-:|:-:
|0|0|0|0|:clap:
Tests / Release [gcc,aarch64] total: 824, passed: 824
Tests / Coverage total: 823, passed: 823
weaselab/conflict-set/pipeline/head This commit looks good
commit1ad8276100
Author: Andrew Noyes <andrew@weaselab.dev> Date: Wed Apr 3 12:44:35 2024 -0700 Add symbols for arm build commit058e4d5302
Author: Andrew Noyes <andrew@weaselab.dev> Date: Wed Apr 3 12:42:48 2024 -0700 Add _GLOBAL_OFFSET_TABLE_ commita201f3ada8
Author: Andrew Noyes <andrew@weaselab.dev> Date: Wed Apr 3 12:34:05 2024 -0700 Add memset to symbol imports commitc1129ed0e2
Author: Andrew Noyes <andrew@weaselab.dev> Date: Wed Apr 3 12:32:28 2024 -0700 Add symbol imports file commit618766ce2e
Author: Andrew Noyes <andrew@weaselab.dev> Date: Wed Apr 3 12:27:07 2024 -0700 Fix objcopy filepath commite774a90007
Author: Andrew Noyes <andrew@weaselab.dev> Date: Wed Apr 3 12:24:44 2024 -0700 Use shellcheck precommit without docker commitbaddea7f57
Author: Andrew Noyes <andrew@weaselab.dev> Date: Wed Apr 3 12:20:26 2024 -0700 Update and freeze pre-commit hooks commit2d3e7b9004
Author: Andrew Noyes <andrew@weaselab.dev> Date: Wed Apr 3 12:19:55 2024 -0700 Add shellcheck to pre-commit Closes #22 commitc4862fee9b
Author: Andrew Noyes <andrew@weaselab.dev> Date: Wed Apr 3 12:15:08 2024 -0700 Add symbol tests for apple closes #21
A data structure for optimistic concurrency control on ranges of bitwise-lexicographically-ordered keys.
Intended to replace FoundationDB's skip list.
Hardware for all benchmarks is a mac m1 2020.
FoundationDB's benchmark
Skip list
New conflict set: 1.957 sec
0.639 Mtransactions/sec
2.555 Mkeys/sec
Detect only: 1.845 sec
0.678 Mtransactions/sec
2.710 Mkeys/sec
Skiplist only: 1.263 sec
0.990 Mtransactions/sec
3.960 Mkeys/sec
Performance counters:
Build: 0.0546
Add: 0.0563
Detect: 1.84
D.Sort: 0.412
D.Combine: 0.0141
D.CheckRead: 0.671
D.CheckIntraBatch: 0.0068
D.MergeWrite: 0.592
D.RemoveBefore: 0.146
Radix tree (this implementation)
New conflict set: 1.366 sec
0.915 Mtransactions/sec
3.660 Mkeys/sec
Detect only: 1.248 sec
1.002 Mtransactions/sec
4.007 Mkeys/sec
Skiplist only: 0.573 sec
2.182 Mtransactions/sec
8.730 Mkeys/sec
Performance counters:
Build: 0.0594
Add: 0.0572
Detect: 1.25
D.Sort: 0.418
D.Combine: 0.0149
D.CheckRead: 0.232
D.CheckIntraBatch: 0.0067
D.MergeWrite: 0.341
D.RemoveBefore: 0.232
Our benchmark
Skip list
ns/op | op/s | err% | total | benchmark |
---|---|---|---|---|
246.99 | 4,048,700.59 | 0.2% | 0.01 | point reads |
260.16 | 3,843,784.65 | 0.1% | 0.01 | prefix reads |
493.35 | 2,026,953.19 | 0.1% | 0.01 | range reads |
462.05 | 2,164,289.23 | 0.6% | 0.01 | point writes |
448.19 | 2,231,205.25 | 0.9% | 0.01 | prefix writes |
255.83 | 3,908,845.72 | 1.5% | 0.02 | range writes |
582.63 | 1,716,349.02 | 1.3% | 0.01 | monotonic increasing point writes |
Radix tree (this implementation)
ns/op | op/s | err% | total | benchmark |
---|---|---|---|---|
19.42 | 51,483,206.67 | 0.3% | 0.01 | point reads |
58.43 | 17,115,612.57 | 0.1% | 0.01 | prefix reads |
216.09 | 4,627,766.60 | 0.2% | 0.01 | range reads |
28.35 | 35,267,567.72 | 0.2% | 0.01 | point writes |
43.43 | 23,026,226.17 | 0.2% | 0.01 | prefix writes |
50.00 | 20,000,000.00 | 0.0% | 0.01 | range writes |
92.38 | 10,824,863.69 | 4.1% | 0.01 | monotonic increasing point writes |
"Real data" test
Point queries only, best of three runs. Gc ratio is the ratio of time spent doing garbage collection to time spent adding writes or doing garbage collection. Lower is better.
skip list
Check: 11.3385 seconds, 329.718 MB/s, Add: 5.35612 seconds, 131.072 MB/s, Gc ratio: 45.7173%
radix tree
Check: 2.48583 seconds, 1503.93 MB/s, Add: 2.12768 seconds, 329.954 MB/s, Gc ratio: 41.7943%
hash table
(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: 1.83386 seconds, 2038.6 MB/s, Add: 0.601411 seconds, 1167.32 MB/s, Gc ratio: 48.9776%
v0.0.13
Latest
Languages
C++
82.9%
TeX
8.1%
CMake
4.8%
Python
2.7%
Shell
0.9%
Other
0.6%