80 Commits

Author SHA1 Message Date
c46f633dbf Skip sorting if already sorted for skip list
All checks were successful
Tests / 64 bit versions total: 7950, passed: 7950
Tests / Debug total: 7948, passed: 7948
Tests / SIMD fallback total: 7950, passed: 7950
Tests / Release [clang] total: 7950, passed: 7950
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 7950, passed: 7950
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 5268, passed: 5268
Tests / Coverage total: 5316, passed: 5316
Code Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 97.67% (3138/3213) * Branch Coverage: 42.05% (18734/44548) * Complexity Density: 0.00 * Lines of Code: 3213 #### Quality Gates Summary Output truncated.
weaselab/conflict-set/pipeline/head This commit looks good
2024-11-12 13:25:29 -08:00
400350946c Point read/write workload for server_bench 2024-11-12 10:50:03 -08:00
607a4ef6e2 Require musttail and preserve_none for interleaved 2024-11-11 21:40:05 -08:00
b0750772ec Don't do hardening check if cross compiling
All checks were successful
Tests / 64 bit versions total: 7950, passed: 7950
Tests / Debug total: 7948, passed: 7948
Tests / SIMD fallback total: 7950, passed: 7950
Tests / Release [clang] total: 7950, passed: 7950
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 7950, passed: 7950
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 5268, passed: 5268
Tests / Coverage total: 5316, passed: 5316
Code Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 97.67% (3139/3214) * Branch Coverage: 42.05% (18734/44548) * Complexity Density: 0.00 * Lines of Code: 3214 #### Quality Gates Summary Output truncated.
weaselab/conflict-set/pipeline/head This commit looks good
2024-11-11 16:56:28 -08:00
86abc02188 Build binaries compatible with cf-protection
Some checks failed
Tests / 64 bit versions total: 7950, passed: 7950
Tests / Debug total: 7948, passed: 7948
Tests / SIMD fallback total: 7950, passed: 7950
Tests / Release [clang] total: 7950, passed: 7950
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 7950, passed: 7950
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 5269, failed: 1, passed: 5268
Tests / Coverage total: 5316, passed: 5316
weaselab/conflict-set/pipeline/head There was a failure building this commit
2024-11-11 16:17:57 -08:00
a90e353fcd Use llvm-objcopy if using clang and it's available
This works around a weird error I was getting when trying to link a
translation unit that included Internal.h with libconflict-set-static.a
with clang + gnu objcopy
2024-11-11 12:09:36 -08:00
f85b92f8db Improve next{Physical,Logical} codegen
All checks were successful
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
Tests / Coverage total: 5315, passed: 5315
Code Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 97.67% (3139/3214) * Branch Coverage: 42.05% (18734/44548) * Complexity Density: 0.00 * Lines of Code: 3214 #### Quality Gates Summary Output truncated.
weaselab/conflict-set/pipeline/head This commit looks good
2024-11-09 13:21:36 -08:00
3c44614311 Allocate from freelist with min/max capacity constraints 2024-11-08 21:35:13 -08:00
9c1ac3702e Move index closer to start of Node{3,16}
This should slightly improve cache hit rate
2024-11-08 20:54:00 -08:00
224d21648a Make server_bench workload point writes of tuple-encoded keys 2024-11-08 20:50:54 -08:00
33f9c89328 Try reduceLog: true
All checks were successful
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
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.
weaselab/conflict-set/pipeline/head This commit looks good
2024-11-04 17:03:24 -08:00
12c2d5eb95 Try not logging ctest output to stdout
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
2024-11-04 15:36:50 -08:00
db357e747d Add __mem{cpy,set}_chk to allowed symbol imports
Some checks reported errors
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
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.
weaselab/conflict-set/pipeline/head Something is wrong with the build of this commit
2024-11-04 15:08:25 -08:00
4494359ca2 Make insert_iterations for interleaved writes more closely match
Some checks failed
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, failed: 2, passed: 7947
Tests / Release [clang,aarch64] total: 5268, passed: 5268
Tests / Coverage total: 5315, passed: 5315
weaselab/conflict-set/pipeline/head There was a failure building this commit
2024-11-04 14:46:30 -08:00
f079d84bda Update README 2024-11-04 14:33:43 -08:00
724ec09248 Add to corpus 2024-11-04 14:30:12 -08:00
4eaad39294 Maintain capacity invariant strictly 2024-11-04 13:43:02 -08:00
891100e649 Add to corpus
All checks were successful
Tests / 64 bit versions total: 7901, passed: 7901
Tests / Debug total: 7899, passed: 7899
Tests / SIMD fallback total: 7901, passed: 7901
Tests / Release [clang] total: 7901, passed: 7901
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 7901, passed: 7901
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 5236, passed: 5236
Tests / Coverage total: 5283, passed: 5283
Code Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 97.62% (3112/3188) * Branch Coverage: 42.08% (18883/44869) * Complexity Density: 0.00 * Lines of Code: 3188 #### Quality Gates Summary Output truncated.
weaselab/conflict-set/pipeline/head This commit looks good
2024-11-01 21:32:00 -07:00
22e55309be Update benchmarks 2024-11-01 17:50:03 -07:00
d6269c5b7c Use interleaved even if preserve_none is missing
All checks were successful
Tests / 64 bit versions total: 7157, passed: 7157
Tests / Debug total: 7155, passed: 7155
Tests / SIMD fallback total: 7157, passed: 7157
Tests / Release [clang] total: 7157, passed: 7157
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 7157, passed: 7157
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 4742, passed: 4742
Tests / Coverage total: 4786, passed: 4786
Code Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 97.62% (3112/3188) * Branch Coverage: 41.88% (18791/44869) * Complexity Density: 0.00 * Lines of Code: 3188 #### Quality Gates Summary Output truncated.
weaselab/conflict-set/pipeline/head This commit looks good
2024-11-01 15:12:59 -07:00
faacdff2d9 Add to corpus
All checks were successful
Tests / 64 bit versions total: 7157, passed: 7157
Tests / Debug total: 7155, passed: 7155
Tests / SIMD fallback total: 7157, passed: 7157
Tests / Release [clang] total: 7157, passed: 7157
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 7157, passed: 7157
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 4742, passed: 4742
Tests / Coverage total: 4786, passed: 4786
Code Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 97.62% (3112/3188) * Branch Coverage: 41.88% (18791/44869) * Complexity Density: 0.00 * Lines of Code: 3188 #### Quality Gates Summary Output truncated.
weaselab/conflict-set/pipeline/head This commit looks good
2024-11-01 14:11:43 -07:00
821179b8de Remove dead code 2024-11-01 13:48:32 -07:00
681a961289 Dispatch on type pairs for end iter 2024-11-01 13:45:41 -07:00
c73a3da14c Dispatch on type pairs for begin iter 2024-11-01 12:46:36 -07:00
5153d25cce Dispatch on type pairs for common prefix iter 2024-11-01 12:06:48 -07:00
d2ec4e7fae Fix use of wrong member in endIter 2024-11-01 11:17:26 -07:00
c7e2358746 Add memcmp to aarch64 imports
Some checks failed
Tests / 64 bit versions total: 6074, passed: 6074
Tests / Debug total: 6072, passed: 6072
Tests / SIMD fallback total: 6074, passed: 6074
Tests / Release [clang] total: 6074, passed: 6074
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 6074, passed: 6074
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 4022, passed: 4022
Tests / Coverage total: 4063, passed: 4063
Code Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 97.12% (3104/3196) * Branch Coverage: 46.76% (13216/28261) * Complexity Density: 0.00 * Lines of Code: 3196 #### Quality Gates Summary Output truncated.
weaselab/conflict-set/pipeline/head There was a failure building this commit
2024-10-31 15:36:19 -07:00
ec1c1cf43f Run gc less frequently
But still run it to account for the version potentially increasing
2024-10-31 15:35:00 -07:00
eaad0c69a7 Store Result* pointer instead of index
Some checks failed
Tests / 64 bit versions total: 6074, passed: 6074
Tests / Debug total: 6072, passed: 6072
Tests / SIMD fallback total: 6074, passed: 6074
Tests / Release [clang] total: 6074, passed: 6074
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 6074, passed: 6074
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 4022, failed: 2, passed: 4020
Tests / Coverage total: 4063, passed: 4063
weaselab/conflict-set/pipeline/head There was a failure building this commit
2024-10-31 12:59:36 -07:00
309e6ab816 Dispatch on pair of types 2024-10-30 22:59:00 -07:00
12b82c1be5 Fix accidentally-checked-in debug change 2024-10-30 16:44:00 -07:00
0cce9df8a8 Use constexpr int instead of sizeof 2024-10-30 15:36:46 -07:00
0df09743da Don't assign to nextRangeWrite twice 2024-10-30 15:33:40 -07:00
c4b0aa1085 Skip over point writes in phase 3 2024-10-30 15:08:27 -07:00
051bfb05fe Fix up DEBUG_VERBOSE 2024-10-30 14:50:34 -07:00
7e1bcbf9be Follow forwarding pointers for end before addWriteRange 2024-10-30 14:26:37 -07:00
4e685bbc3b Use deferred release instead of hacky dontInvalidate logic 2024-10-30 14:16:36 -07:00
b6bfc6f48d Remove redundant int conversions 2024-10-30 11:48:55 -07:00
3b858551f3 Switch std::span<const uint8_t> to TrivialSpan 2024-10-30 11:45:56 -07:00
2c1c26bc88 Enable interleaved range writes 2024-10-30 11:01:23 -07:00
958ee15cfc Use forwarding pointers instead of beginIsPrefix 2024-10-29 20:43:58 -07:00
9015b555de Allow passing two roots to addWriteRange 2024-10-29 17:24:10 -07:00
7aac73ee80 Process acceptable subranges interleaved 2024-10-29 14:41:42 -07:00
c06afeb81e Add to corpus
Some checks failed
Tests / 64 bit versions total: 6074, passed: 6074
Tests / Debug total: 6072, passed: 6072
Tests / SIMD fallback total: 6074, passed: 6074
Tests / Release [clang] total: 6074, passed: 6074
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 6074, passed: 6074
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 4022, passed: 4022
Tests / Coverage total: 4063, passed: 4063
Code Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 96.84% (2878/2972) * Branch Coverage: 48.98% (10647/21739) * Complexity Density: 0.00 * Lines of Code: 2972 #### Quality Gates Summary Output truncated.
weaselab/conflict-set/pipeline/head There was a failure building this commit
2024-10-29 11:59:36 -07:00
b015711b7c Fix write metrics for interleaved implementation 2024-10-29 10:42:22 -07:00
f27ca6d6af Better support a lack of musttail and preserve_none
Some checks failed
Tests / 64 bit versions total: 5794, passed: 5794
Tests / Debug total: 5792, passed: 5792
Tests / SIMD fallback total: 5794, passed: 5794
Tests / Release [clang] total: 5794, passed: 5794
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 5794, passed: 5794
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 3836, passed: 3836
Tests / Coverage total: 3876, passed: 3876
Code Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 96.83% (2871/2965) * Branch Coverage: 48.98% (10630/21703) * Complexity Density: 0.00 * Lines of Code: 2965 #### Quality Gates Summary Output truncated.
weaselab/conflict-set/pipeline/head There was a failure building this commit
2024-10-28 22:40:52 -07:00
c0bb175b7e Remove interleaved_insert::begin 2024-10-28 22:17:52 -07:00
6a6fe5738a Improve "complete" codegen for interleaved state machines 2024-10-28 22:15:05 -07:00
dc16eccf06 Use stack allocation for small counts 2024-10-28 21:51:20 -07:00
3f15db7e82 Avoid longestCommonPrefix if partialKeyLen == 0 2024-10-28 21:44:16 -07:00
e8a8b5aef1 Implement phase 2 2024-10-28 16:30:06 -07:00
b8fefff3ba Remove accidentally-checked-in debug print 2024-10-28 16:20:51 -07:00
2706b2f65e Implement "phase 1" of interleaved point writes 2024-10-28 16:02:56 -07:00
f1292efe41 Add getChildUpdatingMaxVersion 2024-10-28 15:31:00 -07:00
a2d3d269ec Add check namespace
Prepare to add write namespace
2024-10-28 13:57:56 -07:00
8ff7a112b7 Add forwarding pointers + deferred release 2024-10-28 12:34:20 -07:00
cf25b8626c Change server bench to point write heavy workload
All checks were successful
Tests / 64 bit versions total: 5794, passed: 5794
Tests / Debug total: 5792, passed: 5792
Tests / SIMD fallback total: 5794, passed: 5794
Tests / Release [clang] total: 5794, passed: 5794
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 5794, passed: 5794
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 3836, passed: 3836
Tests / Coverage total: 3876, passed: 3876
Code Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 97.23% (2667/2743) * Branch Coverage: 48.95% (9913/20253) * Complexity Density: 0.00 * Lines of Code: 2743 #### Quality Gates Summary Output truncated.
weaselab/conflict-set/pipeline/head This commit looks good
2024-10-27 22:28:03 -07:00
e025f934d8 Fix gc-too-slow issue
Previously, with a finite set of keys, latest_extant_version could fall all the way behind so that a call to addWrites would have to do O(n) work eventually.
2024-10-27 21:13:27 -07:00
e5452c0f7d Only check against sequential if we interleaved
All checks were successful
Tests / 64 bit versions total: 5794, passed: 5794
Tests / Debug total: 5792, passed: 5792
Tests / SIMD fallback total: 5794, passed: 5794
Tests / Release [clang] total: 5794, passed: 5794
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 5794, passed: 5794
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 3836, passed: 3836
Tests / Coverage total: 3876, passed: 3876
Code Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 97.23% (2666/2742) * Branch Coverage: 48.95% (9912/20251) * Complexity Density: 0.00 * Lines of Code: 2742 #### Quality Gates Summary Output truncated.
weaselab/conflict-set/pipeline/head This commit looks good
2024-10-17 16:17:21 -07:00
66fc526a55 Add to corpus 2024-10-17 16:07:15 -07:00
21f08b9f88 Avoid assigning to continuation where unnecessary 2024-10-17 13:16:29 -07:00
10c2f06199 Mix type dispatch and interleaving for down left spine 2024-10-17 13:13:16 -07:00
5cf04e9718 Add to corpus 2024-10-17 10:58:02 -07:00
707b220fbc Improve next{Physical,Logical} codegen more 2024-10-17 09:52:03 -07:00
fd39065498 Add to corpus
All checks were successful
Tests / 64 bit versions total: 5601, passed: 5601
Tests / Debug total: 5599, passed: 5599
Tests / SIMD fallback total: 5601, passed: 5601
Tests / Release [clang] total: 5601, passed: 5601
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 5601, passed: 5601
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 3708, passed: 3708
Tests / Coverage total: 3747, passed: 3747
Code Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 97.32% (2648/2721) * Branch Coverage: 48.99% (9942/20293) * Complexity Density: 0.00 * Lines of Code: 2721 #### Quality Gates Summary Output truncated.
weaselab/conflict-set/pipeline/head This commit looks good
2024-10-16 16:38:56 -07:00
b963d481c9 Improve codegen for nextLogical 2024-10-16 15:54:05 -07:00
e7ed47e288 Assert that interleaved and sequential report same metrics
All checks were successful
Tests / 64 bit versions total: 5514, passed: 5514
Tests / Debug total: 5512, passed: 5512
Tests / SIMD fallback total: 5514, passed: 5514
Tests / Release [clang] total: 5514, passed: 5514
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 5514, passed: 5514
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 3650, passed: 3650
Tests / Coverage total: 3689, passed: 3689
Code Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 97.31% (2637/2710) * Branch Coverage: 48.98% (9933/20279) * Complexity Density: 0.00 * Lines of Code: 2710 #### Quality Gates Summary Output truncated.
weaselab/conflict-set/pipeline/head This commit looks good
2024-10-15 20:58:13 -07:00
04f138109b Rename variables from tls 2024-10-15 20:45:11 -07:00
a0d07dd40c Remove no-longer-necessary GCOVR_EXCL_LINE
Now that we exclude noncode lines (why isn't that the default?)
2024-10-15 18:33:40 -07:00
7fb408b466 Remove tailcall test
All checks were successful
Tests / 64 bit versions total: 5514, passed: 5514
Tests / Debug total: 5512, passed: 5512
Tests / SIMD fallback total: 5514, passed: 5514
Tests / Release [clang] total: 5514, passed: 5514
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 5514, passed: 5514
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 3650, passed: 3650
Tests / Coverage total: 3689, passed: 3689
Code Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 97.27% (2604/2677) * Branch Coverage: 48.98% (9897/20207) * Complexity Density: 0.00 * Lines of Code: 2677 #### Quality Gates Summary Output truncated.
weaselab/conflict-set/pipeline/head This commit looks good
We no longer rely on tail call optimization happening where musttail is
not supported
2024-10-15 17:47:36 -07:00
6d265acfc7 Install llvm-cov 2024-10-15 17:47:01 -07:00
67a61513b8 Use clang for coverage build
Some checks failed
Tests / 64 bit versions total: 5516, passed: 5516
Tests / Debug total: 5514, passed: 5514
Tests / SIMD fallback total: 5516, passed: 5516
Tests / Release [clang] total: 5516, passed: 5516
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 5516, passed: 5516
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 3650, passed: 3650
Tests / Coverage total: 3691, passed: 3691
weaselab/conflict-set/pipeline/head There was a failure building this commit
2024-10-15 17:34:30 -07:00
583f2e7612 Check interleaved and sequential in debug mode 2024-10-15 17:31:06 -07:00
66e5b033c0 Fix control flow reaches end of non-void function warning 2024-10-15 17:27:36 -07:00
1d705cd4b7 Add to corpus 2024-10-15 17:12:45 -07:00
769cf8de9a Bring back sequential read implementation
This will be used if there's only one check to perform or if the
compiler does not support musttail and preserve_none
2024-10-15 17:12:11 -07:00
84942a5bf8 Try clang 20
All checks were successful
Tests / 64 bit versions total: 5052, passed: 5052
Tests / Debug total: 5050, passed: 5050
Tests / SIMD fallback total: 5052, passed: 5052
Tests / Release [clang] total: 5052, passed: 5052
Clang |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [gcc] total: 5052, passed: 5052
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap:
Tests / Release [clang,aarch64] total: 3342, passed: 3342
Tests / Coverage total: 3381, passed: 3381
Code Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 94.64% (2066/2183) * Branch Coverage: 60.82% (1678/2759) * Complexity Density: 0.00 * Lines of Code: 2183 #### Quality Gates Summary Output truncated.
weaselab/conflict-set/pipeline/head This commit looks good
2024-10-15 15:59:58 -07:00
7ad6872ee8 Use clang-19 in jenkins
Some checks failed
weaselab/conflict-set/pipeline/head There was a failure building this commit
2024-10-15 15:55:33 -07:00
9db5eb960d Suppress some unhelpful warnings 2024-10-15 15:06:10 -07:00
5df25a138a Don't initialize max version if child doesn't exist 2024-10-15 12:55:28 -07:00
976 changed files with 2280 additions and 724 deletions

View File

@@ -17,26 +17,26 @@ constexpr int kPrefixLen = 0;
constexpr int kMvccWindow = 100000; constexpr int kMvccWindow = 100000;
std::span<const uint8_t> makeKey(Arena &arena, int index) { TrivialSpan makeKey(Arena &arena, int index) {
auto result = uint8_t *buf = new (arena) uint8_t[4 + kPrefixLen];
std::span<uint8_t>{new (arena) uint8_t[4 + kPrefixLen], 4 + kPrefixLen}; auto result = TrivialSpan{buf, 4 + kPrefixLen};
index = __builtin_bswap32(index); index = __builtin_bswap32(index);
memset(result.data(), 0, kPrefixLen); memset(buf, 0, kPrefixLen);
memcpy(result.data() + kPrefixLen, &index, 4); memcpy(buf, &index, 4);
return result; return result;
} }
ConflictSet::ReadRange singleton(Arena &arena, std::span<const uint8_t> key) { ConflictSet::ReadRange singleton(Arena &arena, TrivialSpan key) {
auto r = uint8_t *buf = new (arena) uint8_t[key.size() + 1];
std::span<uint8_t>(new (arena) uint8_t[key.size() + 1], key.size() + 1); auto r = TrivialSpan(buf, key.size() + 1);
memcpy(r.data(), key.data(), key.size()); memcpy(buf, key.data(), key.size());
r[key.size()] = 0; buf[key.size()] = 0;
return {{key.data(), int(key.size())}, {r.data(), int(r.size())}, 0}; return {{key.data(), int(key.size())}, {r.data(), int(r.size())}, 0};
} }
ConflictSet::ReadRange prefixRange(Arena &arena, std::span<const uint8_t> key) { ConflictSet::ReadRange prefixRange(Arena &arena, TrivialSpan key) {
int index; int index;
for (index = key.size() - 1; index >= 0; index--) for (index = key.size() - 1; index >= 0; index--)
if ((key[index]) != 255) if ((key[index]) != 255)
@@ -48,9 +48,10 @@ ConflictSet::ReadRange prefixRange(Arena &arena, std::span<const uint8_t> key) {
assert(false); assert(false);
} }
auto r = std::span<uint8_t>(new (arena) uint8_t[index + 1], index + 1); uint8_t *buf = new (arena) uint8_t[index + 1];
memcpy(r.data(), key.data(), index + 1); auto r = TrivialSpan(buf, index + 1);
r[r.size() - 1]++; memcpy(buf, key.data(), index + 1);
buf[r.size() - 1]++;
return {{key.data(), int(key.size())}, {r.data(), int(r.size())}, 0}; return {{key.data(), int(key.size())}, {r.data(), int(r.size())}, 0};
} }
@@ -81,14 +82,7 @@ void benchConflictSet() {
++version; ++version;
} }
// I don't know why std::less didn't work /shrug auto points = set<TrivialSpan, std::less<>>(arena);
struct Less {
bool operator()(const std::span<const uint8_t> &lhs,
const std::span<const uint8_t> &rhs) const {
return lhs < rhs;
}
};
auto points = set<std::span<const uint8_t>, Less>(arena);
while (points.size() < kOpsPerTx * 2 + 1) { while (points.size() < kOpsPerTx * 2 + 1) {
// TODO don't use rand? // TODO don't use rand?

View File

@@ -31,8 +31,25 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
"MinSizeRel" "RelWithDebInfo") "MinSizeRel" "RelWithDebInfo")
endif() endif()
add_compile_options(-fdata-sections -ffunction-sections -Wswitch-enum add_compile_options(
-Werror=switch-enum -fPIC) -Werror=switch-enum -Wswitch-enum -fPIC -fdata-sections -ffunction-sections
-fno-jump-tables # https://github.com/llvm/llvm-project/issues/54247
)
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
add_link_options("-Wno-unused-command-line-argument")
find_program(LLVM_OBJCOPY llvm-objcopy)
if(LLVM_OBJCOPY)
set(CMAKE_OBJCOPY
${LLVM_OBJCOPY}
CACHE FILEPATH "path to objcopy binary" FORCE)
endif()
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
add_compile_options("-Wno-maybe-uninitialized")
endif()
if(NOT APPLE) if(NOT APPLE)
# This causes some versions of clang to crash on macos # This causes some versions of clang to crash on macos
add_compile_options(-g -fno-omit-frame-pointer) add_compile_options(-g -fno-omit-frame-pointer)
@@ -47,6 +64,21 @@ if(HAS_FULL_RELRO)
endif() endif()
cmake_pop_check_state() cmake_pop_check_state()
if(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64)
add_compile_options(-mbranch-protection=standard)
else()
add_compile_options(-fcf-protection)
set(rewrite_endbr_flags "-fuse-ld=mold;LINKER:-z,rewrite-endbr")
cmake_push_check_state()
list(APPEND CMAKE_REQUIRED_LINK_OPTIONS ${rewrite_endbr_flags})
check_cxx_source_compiles("int main(){}" HAS_REWRITE_ENDBR FAIL_REGEX
"warning:")
if(HAS_REWRITE_ENDBR)
add_link_options(${rewrite_endbr_flags})
endif()
cmake_pop_check_state()
endif()
set(version_script_flags set(version_script_flags
LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/linker.map) LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/linker.map)
cmake_push_check_state() cmake_push_check_state()
@@ -314,7 +346,8 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR AND BUILD_TESTING)
# c++98 # c++98
add_executable(conflict_set_cxx_api_test conflict_set_cxx_api_test.cpp) add_executable(conflict_set_cxx_api_test conflict_set_cxx_api_test.cpp)
target_compile_options(conflict_set_cxx_api_test PRIVATE ${TEST_FLAGS}) target_compile_options(conflict_set_cxx_api_test PRIVATE ${TEST_FLAGS})
target_link_libraries(conflict_set_cxx_api_test PRIVATE ${PROJECT_NAME}) target_link_libraries(conflict_set_cxx_api_test
PRIVATE ${PROJECT_NAME}-static)
set_target_properties(conflict_set_cxx_api_test PROPERTIES CXX_STANDARD 98) set_target_properties(conflict_set_cxx_api_test PROPERTIES CXX_STANDARD 98)
set_target_properties(conflict_set_cxx_api_test set_target_properties(conflict_set_cxx_api_test
PROPERTIES CXX_STANDARD_REQUIRED ON) PROPERTIES CXX_STANDARD_REQUIRED ON)
@@ -347,6 +380,15 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR AND BUILD_TESTING)
${symbol_imports}) ${symbol_imports})
endif() endif()
if(NOT CMAKE_CROSSCOMPILING)
find_program(HARDENING_CHECK hardening-check)
if(HARDENING_CHECK)
add_test(NAME hardening_check
COMMAND ${HARDENING_CHECK} $<TARGET_FILE:${PROJECT_NAME}>
--nofortify --nostackprotector)
endif()
endif()
# bench # bench
add_executable(conflict_set_bench Bench.cpp) add_executable(conflict_set_bench Bench.cpp)
target_link_libraries(conflict_set_bench PRIVATE ${PROJECT_NAME} nanobench) target_link_libraries(conflict_set_bench PRIVATE ${PROJECT_NAME} nanobench)

File diff suppressed because it is too large Load Diff

View File

@@ -11,23 +11,24 @@ RUN TZ=America/Los_Angeles DEBIAN_FRONTEND=noninteractive apt-get install -y \
binutils-aarch64-linux-gnu \ binutils-aarch64-linux-gnu \
build-essential \ build-essential \
ccache \ ccache \
clang \
cmake \ cmake \
curl \ curl \
doxygen \ devscripts \
file \
g++-aarch64-linux-gnu \ g++-aarch64-linux-gnu \
gcovr \ gcovr \
git \ git \
gperf \ gnupg \
graphviz \
libc6-dbg \ libc6-dbg \
lsb-release \
mold \
ninja-build \ ninja-build \
pre-commit \ pre-commit \
python3-requests \ python3-requests \
qemu-user \ qemu-user \
rpm \ rpm \
software-properties-common \
texlive-full \ texlive-full \
wget \
zstd zstd
# Install recent valgrind from source # Install recent valgrind from source
@@ -43,6 +44,11 @@ RUN curl -Ls https://sourceware.org/pub/valgrind/valgrind-3.22.0.tar.bz2 -o valg
cd .. && \ cd .. && \
rm -rf /tmp/* rm -rf /tmp/*
# Recent clang
RUN wget https://apt.llvm.org/llvm.sh && chmod +x ./llvm.sh && ./llvm.sh 20
RUN apt-get -y install clang llvm
# Set after building valgrind, which doesn't build with clang for some reason # Set after building valgrind, which doesn't build with clang for some reason
ENV CC=clang ENV CC=clang
ENV CXX=clang++ ENV CXX=clang++

View File

@@ -26,9 +26,38 @@ using namespace weaselab;
#define DEBUG_VERBOSE 0 #define DEBUG_VERBOSE 0
#define SHOW_MEMORY 0 #define SHOW_MEMORY 0
[[nodiscard]] inline auto // std::span is not trivially constructible. We want a span that leaves its
operator<=>(const std::span<const uint8_t> &lhs, // members uninitialized for performance reasons.
const std::span<const uint8_t> &rhs) noexcept { struct TrivialSpan {
TrivialSpan() = default;
TrivialSpan(const uint8_t *begin, int len) : begin(begin), len(len) {}
uint8_t back() const {
assert(len > 0);
return begin[len - 1];
}
uint8_t front() const {
assert(len > 0);
return begin[0];
}
uint8_t operator[](int i) const {
assert(0 <= i);
assert(i < len);
return begin[i];
}
int size() const { return len; }
TrivialSpan subspan(int offset, int len) { return {begin + offset, len}; }
const uint8_t *data() const { return begin; }
private:
const uint8_t *begin;
int len;
};
static_assert(std::is_trivial_v<TrivialSpan>);
[[nodiscard]] inline auto operator<=>(const TrivialSpan &lhs,
const TrivialSpan &rhs) noexcept {
int cl = std::min<int>(lhs.size(), rhs.size()); int cl = std::min<int>(lhs.size(), rhs.size());
if (cl > 0) { if (cl > 0) {
if (auto c = memcmp(lhs.data(), rhs.data(), cl) <=> 0; c != 0) { if (auto c = memcmp(lhs.data(), rhs.data(), cl) <=> 0; c != 0) {
@@ -38,7 +67,7 @@ operator<=>(const std::span<const uint8_t> &lhs,
return lhs.size() <=> rhs.size(); return lhs.size() <=> rhs.size();
} }
[[nodiscard]] inline auto operator<=>(const std::span<const uint8_t> &lhs, [[nodiscard]] inline auto operator<=>(const TrivialSpan &lhs,
const ConflictSet::Key &rhs) noexcept { const ConflictSet::Key &rhs) noexcept {
int cl = std::min<int>(lhs.size(), rhs.len); int cl = std::min<int>(lhs.size(), rhs.len);
if (cl > 0) { if (cl > 0) {
@@ -46,7 +75,18 @@ operator<=>(const std::span<const uint8_t> &lhs,
return c; return c;
} }
} }
return lhs.size() <=> size_t(rhs.len); return lhs.size() <=> rhs.len;
}
[[nodiscard]] inline auto operator<=>(const ConflictSet::Key &lhs,
const ConflictSet::Key &rhs) noexcept {
int cl = std::min<int>(lhs.len, rhs.len);
if (cl > 0) {
if (auto c = memcmp(lhs.p, rhs.p, cl) <=> 0; c != 0) {
return c;
}
}
return lhs.len <=> rhs.len;
} }
// This header contains code that we want to reuse outside of ConflictSet.cpp or // This header contains code that we want to reuse outside of ConflictSet.cpp or
@@ -569,7 +609,7 @@ inline std::string printable(const Key &key) {
return printable(std::string_view((const char *)key.p, key.len)); return printable(std::string_view((const char *)key.p, key.len));
} }
inline std::string printable(std::span<const uint8_t> key) { inline std::string printable(TrivialSpan key) {
return printable(std::string_view((const char *)key.data(), key.size())); return printable(std::string_view((const char *)key.data(), key.size()));
} }
@@ -677,10 +717,8 @@ struct TestDriver {
arbitrary->randomBytes(begin + prefixLen, keyLen - prefixLen); arbitrary->randomBytes(begin + prefixLen, keyLen - prefixLen);
writes[i].end.len = keyLen; writes[i].end.len = keyLen;
writes[i].end.p = begin; writes[i].end.p = begin;
auto c = auto c = TrivialSpan(writes[i].begin.p, writes[i].begin.len) <=>
std::span<const uint8_t>(writes[i].begin.p, TrivialSpan(writes[i].end.p, writes[i].end.len);
writes[i].begin.len) <=>
std::span<const uint8_t>(writes[i].end.p, writes[i].end.len);
if (c > 0) { if (c > 0) {
using std::swap; using std::swap;
swap(writes[i].begin, writes[i].end); swap(writes[i].begin, writes[i].end);

14
Jenkinsfile vendored
View File

@@ -11,11 +11,11 @@ def CleanBuildAndTest(String cmakeArgs) {
catchError { catchError {
sh ''' sh '''
cd build cd build
ctest --no-compress-output --test-output-size-passed 100000 --test-output-size-failed 100000 -T Test -j `nproc` --timeout 90 ctest --no-compress-output --test-output-size-passed 100000 --test-output-size-failed 100000 -T Test -j `nproc` --timeout 90 > /dev/null
zstd Testing/*/Test.xml zstd Testing/*/Test.xml
''' '''
} }
xunit tools: [CTest(pattern: 'build/Testing/*/Test.xml')], reduceLog: false, skipPublishingChecks: false xunit tools: [CTest(pattern: 'build/Testing/*/Test.xml')], skipPublishingChecks: false
minio bucket: 'jenkins', credentialsId: 'jenkins-minio', excludes: '', host: 'minio.weaselab.dev', includes: 'build/Testing/*/Test.xml.zst', targetFolder: '${JOB_NAME}/${BUILD_NUMBER}/${STAGE_NAME}/' minio bucket: 'jenkins', credentialsId: 'jenkins-minio', excludes: '', host: 'minio.weaselab.dev', includes: 'build/Testing/*/Test.xml.zst', targetFolder: '${JOB_NAME}/${BUILD_NUMBER}/${STAGE_NAME}/'
} }
@@ -129,16 +129,16 @@ pipeline {
} }
steps { steps {
script { script {
filter_args = "-f ConflictSet.cpp -f LongestCommonPrefix.h -f Metrics.h" gcov_args = "-f ConflictSet.cpp -f LongestCommonPrefix.h -f Metrics.h --gcov-executable 'llvm-cov gcov' --exclude-noncode-lines"
} }
CleanBuildAndTest("-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_C_FLAGS=--coverage -DCMAKE_CXX_FLAGS=--coverage -DCMAKE_BUILD_TYPE=Debug -DDISABLE_TSAN=ON") CleanBuildAndTest("-DCMAKE_C_FLAGS=--coverage -DCMAKE_CXX_FLAGS=--coverage -DCMAKE_BUILD_TYPE=Debug -DDISABLE_TSAN=ON")
sh """ sh """
gcovr ${filter_args} --cobertura > build/coverage.xml gcovr ${gcov_args} --cobertura > build/coverage.xml
""" """
recordCoverage qualityGates: [[criticality: 'NOTE', metric: 'MODULE']], tools: [[parser: 'COBERTURA', pattern: 'build/coverage.xml']] recordCoverage qualityGates: [[criticality: 'NOTE', metric: 'MODULE']], tools: [[parser: 'COBERTURA', pattern: 'build/coverage.xml']]
sh """ sh """
gcovr ${filter_args} gcovr ${gcov_args}
gcovr ${filter_args} --fail-under-line 100 > /dev/null gcovr ${gcov_args} --fail-under-line 100 > /dev/null
""" """
} }
} }

View File

@@ -129,7 +129,7 @@ longestCommonPrefix(const uint8_t *ap, const uint8_t *bp, int cl) {
} }
int i = 0; int i = 0;
int end; int end; // GCOVR_EXCL_LINE
// kStride * kUnrollCount at a time // kStride * kUnrollCount at a time
end = cl & ~(kStride * kUnrollFactor - 1); end = cl & ~(kStride * kUnrollFactor - 1);

View File

@@ -2,7 +2,9 @@ A data structure for optimistic concurrency control on ranges of bitwise-lexicog
Intended as an alternative to FoundationDB's skip list. 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 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 # Microbenchmark
@@ -10,29 +12,29 @@ Hardware for all benchmarks is an AMD Ryzen 9 7900 with (2x32GB) 5600MT/s CL28-3
| ns/op | op/s | err% | ins/op | cyc/op | IPC | bra/op | miss% | total | benchmark | ns/op | op/s | err% | ins/op | cyc/op | IPC | bra/op | miss% | total | benchmark
|--------------------:|--------------------:|--------:|----------------:|----------------:|-------:|---------------:|--------:|----------:|:---------- |--------------------:|--------------------:|--------:|----------------:|----------------:|-------:|---------------:|--------:|----------:|:----------
| 172.03 | 5,812,791.77 | 0.4% | 3,130.62 | 879.00 | 3.562 | 509.23 | 0.0% | 0.01 | `point reads` | 159.65 | 6,263,576.52 | 1.6% | 2,972.36 | 820.37 | 3.623 | 504.59 | 0.0% | 0.01 | `point reads`
| 167.44 | 5,972,130.71 | 0.2% | 3,065.14 | 862.27 | 3.555 | 494.30 | 0.0% | 0.01 | `prefix reads` | 156.32 | 6,397,320.65 | 0.7% | 2,913.62 | 806.87 | 3.611 | 490.19 | 0.0% | 0.01 | `prefix reads`
| 238.77 | 4,188,130.84 | 0.9% | 3,589.93 | 1,259.30 | 2.851 | 637.12 | 0.0% | 0.01 | `range 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`
| 424.01 | 2,358,426.70 | 0.2% | 5,620.05 | 2,242.35 | 2.506 | 854.80 | 1.7% | 0.01 | `point writes` | 363.37 | 2,752,026.30 | 0.3% | 5,273.63 | 1,951.54 | 2.702 | 851.66 | 1.7% | 0.01 | `point writes`
| 418.45 | 2,389,780.56 | 0.4% | 5,525.07 | 2,211.05 | 2.499 | 831.71 | 1.7% | 0.01 | `prefix 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`
| 254.87 | 3,923,568.88 | 2.6% | 3,187.01 | 1,366.50 | 2.332 | 529.11 | 2.7% | 0.02 | `range 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`
| 675.96 | 1,479,374.50 | 3.3% | 7,735.41 | 3,468.60 | 2.230 | 1,386.02 | 1.8% | 0.01 | `monotonic increasing point 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`
| 137,986.20 | 7,247.10 | 0.6% | 789,752.33 | 699,462.00 | 1.129 | 144,824.14 | 0.0% | 0.01 | `worst case for radix tree` | 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`
| 21.63 | 46,231,564.03 | 1.0% | 448.00 | 107.14 | 4.181 | 84.00 | 0.0% | 0.01 | `create and destroy` | 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) ## Radix tree (this implementation)
| ns/op | op/s | err% | ins/op | cyc/op | IPC | bra/op | miss% | total | benchmark | ns/op | op/s | err% | ins/op | cyc/op | IPC | bra/op | miss% | total | benchmark
|--------------------:|--------------------:|--------:|----------------:|----------------:|-------:|---------------:|--------:|----------:|:---------- |--------------------:|--------------------:|--------:|----------------:|----------------:|-------:|---------------:|--------:|----------:|:----------
| 12.88 | 77,653,350.77 | 0.5% | 185.37 | 64.45 | 2.876 | 41.51 | 0.4% | 0.01 | `point reads` | 12.63 | 79,186,868.18 | 1.4% | 241.61 | 64.76 | 3.731 | 31.64 | 0.8% | 0.01 | `point reads`
| 14.67 | 68,179,354.49 | 0.1% | 271.44 | 73.40 | 3.698 | 53.70 | 0.3% | 0.01 | `prefix reads` | 14.48 | 69,078,073.40 | 0.3% | 292.42 | 74.69 | 3.915 | 41.49 | 0.5% | 0.01 | `prefix reads`
| 34.84 | 28,701,444.36 | 0.3% | 715.74 | 175.27 | 4.084 | 127.30 | 0.2% | 0.01 | `range reads` | 34.37 | 29,094,694.11 | 0.2% | 759.53 | 179.77 | 4.225 | 100.38 | 0.2% | 0.01 | `range reads`
| 17.12 | 58,422,988.28 | 0.2% | 314.30 | 86.11 | 3.650 | 39.82 | 0.4% | 0.01 | `point writes` | 19.34 | 51,713,896.36 | 0.7% | 369.70 | 101.81 | 3.631 | 47.88 | 0.6% | 0.01 | `point writes`
| 31.42 | 31,830,804.65 | 0.1% | 591.06 | 158.07 | 3.739 | 82.67 | 0.2% | 0.01 | `prefix writes` | 39.16 | 25,538,968.61 | 0.2% | 653.16 | 206.77 | 3.159 | 89.62 | 0.8% | 0.01 | `prefix writes`
| 37.37 | 26,759,432.70 | 2.2% | 681.98 | 188.95 | 3.609 | 96.10 | 0.1% | 0.01 | `range writes` | 40.58 | 24,642,681.12 | 4.7% | 718.44 | 216.44 | 3.319 | 99.28 | 0.6% | 0.01 | `range writes`
| 76.72 | 13,035,140.63 | 2.3% | 1,421.28 | 387.17 | 3.671 | 257.76 | 0.1% | 0.01 | `monotonic increasing point 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`
| 297,452.00 | 3,361.89 | 0.9% | 3,508,083.00 | 1,500,834.67 | 2.337 | 727,525.33 | 0.1% | 0.01 | `worst case for radix tree` | 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`
| 87.70 | 11,402,490.60 | 1.0% | 1,795.00 | 442.09 | 4.060 | 297.00 | 0.0% | 0.01 | `create and destroy` | 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 # "Real data" test
@@ -41,13 +43,13 @@ Point queries only, best of three runs. Gc ratio is the ratio of time spent doin
## skip list ## skip list
``` ```
Check: 4.47891 seconds, 364.05 MB/s, Add: 4.55599 seconds, 123.058 MB/s, Gc ratio: 37.1145% 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 ## radix tree
``` ```
Check: 0.953012 seconds, 1710.94 MB/s, Add: 1.30025 seconds, 431.188 MB/s, Gc ratio: 43.9816%, Peak idle memory: 2.28375e+06 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 ## hash table
@@ -55,5 +57,5 @@ Check: 0.953012 seconds, 1710.94 MB/s, Add: 1.30025 seconds, 431.188 MB/s, Gc ra
(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) (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.804094 seconds, 2027.81 MB/s, Add: 0.652952 seconds, 858.645 MB/s, Gc ratio: 35.3885% Check: 0.84256 seconds, 1935.23 MB/s, Add: 0.697204 seconds, 804.146 MB/s, Gc ratio: 35.4091%
``` ```

View File

@@ -1,5 +1,7 @@
#include <algorithm>
#include <atomic> #include <atomic>
#include <cstdint> #include <cstdint>
#include <cstdlib>
#include <errno.h> #include <errno.h>
#include <netdb.h> #include <netdb.h>
#include <stdio.h> #include <stdio.h>
@@ -18,60 +20,93 @@
#include <vector> #include <vector>
#include "ConflictSet.h" #include "ConflictSet.h"
#include "Internal.h"
#include "third_party/nadeau.h" #include "third_party/nadeau.h"
std::atomic<int64_t> transactions; std::atomic<int64_t> transactions;
constexpr int kWindowSize = 10000000; int64_t safeUnaryMinus(int64_t x) {
return x == std::numeric_limits<int64_t>::min() ? x : -x;
}
constexpr int kNumPrefixes = 250000; void tupleAppend(std::string &output, int64_t value) {
if (value == 0) {
output.push_back(0x14);
return;
}
uint32_t size = 8 - __builtin_clrsbll(value) / 8;
int typeCode = 0x14 + (value < 0 ? -1 : 1) * size;
output.push_back(typeCode);
if (value < 0) {
value = ~safeUnaryMinus(value);
}
uint64_t swap = __builtin_bswap64(value);
output.insert(output.end(), (uint8_t *)&swap + 8 - size,
(uint8_t *)&swap + 8);
}
std::string makeKey(int64_t num, int suffixLen) { void tupleAppend(std::string &output, std::string_view value) {
output.push_back('\x02');
for (auto c : value) {
if (c == '\x00') {
output.push_back('\x00');
output.push_back('\xff');
} else {
output.push_back(c);
}
}
output.push_back('\x00');
}
template <class... Ts> std::string tupleKey(const Ts &...ts) {
std::string result; std::string result;
result.resize(sizeof(int64_t) + suffixLen); (tupleAppend(result, ts), ...);
int64_t be = __builtin_bswap64(num);
memcpy(result.data(), &be, sizeof(int64_t));
memset(result.data() + sizeof(int64_t), 0, suffixLen);
return result; return result;
} }
constexpr int kTotalKeyRange = 1'000'000'000;
constexpr int kWindowSize = 1'000'000;
constexpr int kNumKeys = 10;
void workload(weaselab::ConflictSet *cs) { void workload(weaselab::ConflictSet *cs) {
int64_t version = kWindowSize; int64_t version = kWindowSize;
for (int i = 0; i < kNumPrefixes; ++i) {
for (int j = 0; j < 50; ++j) {
weaselab::ConflictSet::WriteRange wr;
auto k = makeKey(i, j);
wr.begin.p = (const uint8_t *)k.data();
wr.begin.len = k.size();
wr.end.len = 0;
cs->addWrites(&wr, 1, version);
}
}
++version;
for (int i = 0; i < kNumPrefixes; ++i) {
weaselab::ConflictSet::WriteRange wr;
auto k = makeKey(i, 50);
wr.begin.p = (const uint8_t *)k.data();
wr.begin.len = k.size();
wr.end.len = 0;
cs->addWrites(&wr, 1, version);
}
constexpr int kNumReads = 1;
std::vector<weaselab::ConflictSet::Result> results(kNumReads);
for (;; transactions.fetch_add(1, std::memory_order_relaxed)) { for (;; transactions.fetch_add(1, std::memory_order_relaxed)) {
std::vector<std::string> keys(kNumReads); std::vector<int64_t> keyIndices;
for (auto &k : keys) { for (int i = 0; i < kNumKeys; ++i) {
k = makeKey(rand() % kNumPrefixes, 49); keyIndices.push_back(rand() % kTotalKeyRange);
} }
std::vector<weaselab::ConflictSet::ReadRange> reads(kNumReads); std::sort(keyIndices.begin(), keyIndices.end());
for (int i = 0; i < reads.size(); ++i) { std::vector<std::string> keys;
reads[i].begin.p = (const uint8_t *)(keys[i].data()); constexpr std::string_view fullString =
reads[i].begin.len = keys[i].size(); "this is a string, where a prefix of it is used as an element of the "
reads[i].end.len = 0; "tuple forming the key";
reads[i].readVersion = version - 1; for (int i = 0; i < kNumKeys; ++i) {
keys.push_back(
tupleKey(0x100, keyIndices[i] / fullString.size(),
fullString.substr(0, keyIndices[i] % fullString.size())));
// printf("%s\n", printable(keys.back()).c_str());
} }
cs->check(reads.data(), results.data(), kNumReads);
std::vector<weaselab::ConflictSet::ReadRange> reads;
std::vector<weaselab::ConflictSet::WriteRange> writes;
std::vector<weaselab::ConflictSet::Result> results;
for (int i = 0; i < kNumKeys; ++i) {
writes.push_back({{(const uint8_t *)keys[i].data(), int(keys[i].size())},
{nullptr, 0}});
reads.push_back({{(const uint8_t *)keys[i].data(), int(keys[i].size())},
{nullptr, 0},
version - kWindowSize});
}
results.resize(reads.size());
cs->check(reads.data(), results.data(), reads.size());
bool ok = true;
for (auto result : results) {
ok &= result == weaselab::ConflictSet::Commit;
}
cs->addWrites(writes.data(), ok ? writes.size() : 0, version);
cs->setOldestVersion(version - kWindowSize);
++version;
} }
} }

View File

@@ -767,7 +767,9 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl {
false, true); false, true);
} }
sortPoints(points); if (!std::is_sorted(points.begin(), points.end())) {
sortPoints(points);
}
int activeWriteCount = 0; int activeWriteCount = 0;
std::vector<std::pair<StringRef, StringRef>> combinedWriteConflictRanges; std::vector<std::pair<StringRef, StringRef>> combinedWriteConflictRanges;

View File

@@ -5,6 +5,7 @@ __stack_chk_guard@GLIBC_2.17
abort@GLIBC_2.17 abort@GLIBC_2.17
free@GLIBC_2.17 free@GLIBC_2.17
malloc@GLIBC_2.17 malloc@GLIBC_2.17
memcmp@GLIBC_2.17
memcpy@GLIBC_2.17 memcpy@GLIBC_2.17
memmove@GLIBC_2.17 memmove@GLIBC_2.17
memset@GLIBC_2.17 memset@GLIBC_2.17

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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