Andrew Noyes 12c2d5eb95
Some checks failed
Tests / Coverage total: 5315, passed: 5315
Code Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 97.74% (3066/3137) * Branch Coverage: 41.94% (18241/43494) * Complexity Density: 0.00 * Lines of Code: 3137 #### Quality Gates Summary Output truncated.
Tests / 64 bit versions total: 7949, passed: 7949
Tests / Debug total: 7947, passed: 7947
Tests / SIMD fallback total: 7949, passed: 7949
Tests / Release [clang] total: 7949, passed: 7949
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 7949, passed: 7949
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 5268, passed: 5268
weaselab/conflict-set/pipeline/head There was a failure building this commit
Try not logging ctest output to stdout
2024-11-04 15:36:50 -08:00
2024-03-06 21:22:30 -08:00
2024-11-04 14:30:12 -08:00
2024-08-21 14:00:00 -07:00
2024-08-05 12:20:38 -07:00
2024-04-04 16:29:26 -07:00
2024-10-15 17:47:01 -07:00
2024-02-20 13:22:22 -08:00
2024-01-30 10:39:43 -08:00
2024-08-30 16:06:43 -07:00
2024-09-09 20:10:55 -07:00
2024-11-04 14:33:43 -08:00
2024-07-12 13:22:02 -07:00
2024-08-30 16:06:43 -07:00
2024-10-15 17:47:36 -07:00

A data structure for optimistic concurrency control on ranges of bitwise-lexicographically-ordered keys.

Intended as an alternative to FoundationDB's skip list.

Hardware for all benchmarks is an AMD Ryzen 9 7900 with (2x32GB) 5600MT/s CL28-34-34-89 1.35V RAM.

Compiler is Ubuntu clang version 20.0.0 (++20241029082144+7544d3af0e28-1~exp1~20241029082307.506).

Microbenchmark

Skip list

ns/op op/s err% ins/op cyc/op IPC bra/op miss% total benchmark
159.65 6,263,576.52 1.6% 2,972.36 820.37 3.623 504.59 0.0% 0.01 point reads
156.32 6,397,320.65 0.7% 2,913.62 806.87 3.611 490.19 0.0% 0.01 prefix reads
229.18 4,363,293.65 1.2% 3,541.05 1,219.75 2.903 629.33 0.0% 0.01 range reads
363.37 2,752,026.30 0.3% 5,273.63 1,951.54 2.702 851.66 1.7% 0.01 point writes
364.99 2,739,787.02 0.3% 5,250.92 1,958.54 2.681 839.24 1.7% 0.01 prefix writes
242.26 4,127,796.58 2.9% 3,117.33 1,304.41 2.390 541.07 2.8% 0.02 range writes
562.48 1,777,855.27 0.8% 7,305.21 3,034.34 2.408 1,329.30 1.3% 0.01 monotonic increasing point writes
122,688.57 8,150.72 0.7% 798,766.00 666,842.00 1.198 144,584.50 0.1% 0.01 worst case for radix tree
41.71 23,976,459.34 1.7% 885.00 219.17 4.038 132.00 0.0% 0.01 create and destroy

Radix tree (this implementation)

ns/op op/s err% ins/op cyc/op IPC bra/op miss% total benchmark
12.63 79,186,868.18 1.4% 241.61 64.76 3.731 31.64 0.8% 0.01 point reads
14.48 69,078,073.40 0.3% 292.42 74.69 3.915 41.49 0.5% 0.01 prefix reads
34.37 29,094,694.11 0.2% 759.53 179.77 4.225 100.38 0.2% 0.01 range reads
19.34 51,713,896.36 0.7% 369.70 101.81 3.631 47.88 0.6% 0.01 point writes
39.16 25,538,968.61 0.2% 653.16 206.77 3.159 89.62 0.8% 0.01 prefix writes
40.58 24,642,681.12 4.7% 718.44 216.44 3.319 99.28 0.6% 0.01 range writes
78.77 12,694,520.69 3.8% 1,395.55 421.73 3.309 249.81 0.1% 0.01 monotonic increasing point writes
287,760.50 3,475.11 0.5% 3,929,266.50 1,550,225.50 2.535 639,064.00 0.0% 0.01 worst case for radix tree
104.76 9,545,250.65 3.1% 2,000.00 552.82 3.618 342.00 0.0% 0.01 create and destroy

"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: 4.39702 seconds, 370.83 MB/s, Add: 4.50025 seconds, 124.583 MB/s, Gc ratio: 29.1333%, Peak idle memory: 5.51852e+06

radix tree

Check: 0.987757 seconds, 1650.76 MB/s, Add: 1.24815 seconds, 449.186 MB/s, Gc ratio: 41.4675%, Peak idle memory: 2.02872e+06

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: 0.84256 seconds, 1935.23 MB/s, Add: 0.697204 seconds, 804.146 MB/s, Gc ratio: 35.4091%
Description
A data structure for optimistic concurrency control on ranges of bitwise-lexicographically-ordered keys.
Readme 25 MiB
v0.0.13 Latest
2024-08-26 21:24:21 +00:00
Languages
C++ 82.9%
TeX 8.1%
CMake 4.8%
Python 2.7%
Shell 0.9%
Other 0.6%