Commit Graph

273 Commits

Author SHA1 Message Date
andrew f38198a39d Amortize cost of pausing gc in setOldestVersion 2024-02-26 19:23:29 -08:00
andrew 5f7789128e Add RealDataBench.cpp 2024-02-26 17:17:07 -08:00
andrew 3f45535f89 Fix setOldestVersion
Tests / Release [gcc] total: 471, passed: 471
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap: Reference build: <a href="https://jenkins.weaselab.dev/job/weaselab/job/conflict-set/job/main/40//gcc">weaselab » conflict-set » main #40</a>
Tests / Coverage total: 469, passed: 469
weaselab/conflict-set/pipeline/head This commit looks good
We were not accumulating keyUpdates strictly faster than we were
spending them for a monotonically increasing workload.
2024-02-26 13:51:03 -08:00
andrew 2b0dbabb5c Add public showMemory symbol (when SHOW_MEMORY=1) 2024-02-26 13:48:20 -08:00
andrew be7f643f14 Add Node1 and SHOW_MEMORY 2024-02-26 12:25:06 -08:00
andrew 6a08bdd40e Add bitSet asserts for Node256 paths 2024-02-26 10:58:16 -08:00
andrew 333ac74d91 Use forEachInRange for overfill for Node48 2024-02-26 10:55:50 -08:00
andrew 17ac9b38fb Use forEachInRange in setChildrenParents 2024-02-26 10:37:28 -08:00
andrew 172dd40648 Check for full words on boundaries 2024-02-26 10:36:45 -08:00
andrew c97c7eee8e Speed up sparse queries
Tests / Release [gcc] total: 471, passed: 471
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap: Reference build: <a href="https://jenkins.weaselab.dev/job/weaselab/job/conflict-set/job/main/39//gcc">weaselab » conflict-set » main #39</a>
Tests / Coverage total: 469, passed: 469
weaselab/conflict-set/pipeline/head This commit looks good
2024-02-25 23:08:01 -08:00
andrew 9fcfc44dc3 Add forEachInRange 2024-02-25 21:04:39 -08:00
andrew 0d3475e229 Use uint64_t array and fewer branches in BitSet
Tests / Release [gcc] total: 471, passed: 471
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap: Reference build: <a href="https://jenkins.weaselab.dev/job/weaselab/job/conflict-set/job/main/38//gcc">weaselab » conflict-set » main #38</a>
Tests / Coverage total: 469, passed: 469
weaselab/conflict-set/pipeline/head This commit looks good
2024-02-24 18:20:00 -08:00
andrew 70e3377eac Update benchmark in README.md
Tests / Release [gcc] total: 471, passed: 471
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap: Reference build: <a href="https://jenkins.weaselab.dev/job/weaselab/job/conflict-set/job/main/37//gcc">weaselab » conflict-set » main #37</a>
Tests / Coverage total: 469, passed: 469
weaselab/conflict-set/pipeline/head This commit looks good
Don't try to make sense of the diff - the benchmark itself changed too
2024-02-23 17:31:48 -08:00
andrew adaa652d0d Remove Node::maxVersion 2024-02-23 17:27:19 -08:00
andrew 921005edb3 Add childMaxVersion 2024-02-23 17:02:46 -08:00
andrew d43a8a5907 Run benchmark in jenkins 2024-02-23 16:17:28 -08:00
andrew 588e8eb87f Add monotonic increasing point writes workload 2024-02-23 16:13:53 -08:00
andrew df8d092a84 Avoid some unnecessary work
Tests / Release [gcc] total: 471, passed: 471
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap: Reference build: <a href="https://jenkins.weaselab.dev/job/weaselab/job/conflict-set/job/main/36//gcc">weaselab » conflict-set » main #36</a>
Tests / Coverage total: 469, passed: 469
weaselab/conflict-set/pipeline/head This commit looks good
2024-02-23 14:49:42 -08:00
andrew 438a2e2abc Make sure setOldestVersion has work to do in bench 2024-02-23 14:41:05 -08:00
andrew 305c218888 Skip checking for partial key match if partial key len == 0
This saves instructions according to cachegrind
2024-02-23 14:27:20 -08:00
andrew db60782c48 Use **self directly in insert 2024-02-23 14:09:04 -08:00
andrew 4f32ecc26e Make "begin" a template parameter to insert
cachegrind says this saves instructions
2024-02-23 14:00:55 -08:00
andrew f84aa88202 Copy old node to new more efficiently
Presumably it's generating good code for the memcpy with a static size,
and hopefully also eliminating redundant stores
2024-02-23 13:31:05 -08:00
andrew 921da1cb3f Remove redundant code 2024-02-23 13:13:48 -08:00
andrew 14de4ee297 Specialize setChildrenParents for each node type
cachegrind says this increases the instruction count somehow. I'm not
sure what's going on there.
2024-02-23 13:09:42 -08:00
andrew 7136b5a450 Save more instructions in getOrCreateChild
Take advantage of the property that Node4 is a prefix of Node16
2024-02-23 12:39:24 -08:00
andrew 116c79d3de Optimize getOrCreateChild
Add fast path for if it exists

Avoid some unnecessary branches

Try to simplify some
2024-02-23 12:34:28 -08:00
andrew aaf0283f66 Prefer getChild to getChildGeq in happy path
Saves instructions according to cachegrind
2024-02-23 12:12:01 -08:00
andrew 259f47664a Save some instructions in getOrCreateChild
Tests / Release [gcc] total: 471, passed: 471
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap: Reference build: <a href="https://jenkins.weaselab.dev/job/weaselab/job/conflict-set/job/main/35//gcc">weaselab » conflict-set » main #35</a>
Tests / Coverage total: 469, passed: 469
weaselab/conflict-set/pipeline/head This commit looks good
2024-02-22 22:46:08 -08:00
andrew 9a47f2d03a Fixed missed usages of longestCommonPrefixPartialKey
Tests / Release [gcc] total: 471, passed: 471
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap: Reference build: <a href="https://jenkins.weaselab.dev/job/weaselab/job/conflict-set/job/main/34//gcc">weaselab » conflict-set » main #34</a>
Tests / Coverage total: 469, passed: 469
weaselab/conflict-set/pipeline/head This commit looks good
2024-02-22 16:24:26 -08:00
andrew b5d5085fd5 Add precondition back to firstNeqStride 2024-02-22 16:16:42 -08:00
andrew 40dca168ba Add precondition to longestCommonPrefixPartialKey
Tests / Release [gcc] total: 471, passed: 471
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap: Reference build: <a href="https://jenkins.weaselab.dev/job/weaselab/job/conflict-set/job/main/33//gcc">weaselab » conflict-set » main #33</a>
Tests / Coverage total: 469, passed: 469
weaselab/conflict-set/pipeline/head This commit looks good
2024-02-22 16:07:20 -08:00
andrew 7a8233ac61 More unnesting 2024-02-22 15:50:54 -08:00
andrew 3c93b9a3ce Unnest some in checkPointRead 2024-02-22 15:43:13 -08:00
andrew c16feda9f8 Use longestCommonPrefixPartialKey in SearchStepWise 2024-02-22 15:41:39 -08:00
andrew 4c3e7aef30 Save a few instructions in SearchStepWise 2024-02-22 15:30:24 -08:00
andrew 7f5598af2b Save a few instructions in addWriteRange 2024-02-22 15:25:50 -08:00
andrew 8016d44c04 Use simple loop for longestCommonPrefixPartialKey
The benchmark has this as faster
2024-02-22 14:49:04 -08:00
andrew 505c060a28 Use longestCommonPrefixPartialKey in insert 2024-02-22 14:46:52 -08:00
andrew 608b4fb6c7 Remove some branches 2024-02-22 14:29:24 -08:00
andrew 0fbc8b0190 Use longestCommonPrefix on partial keys 2024-02-22 13:57:00 -08:00
andrew 125ce88268 Suppress gcc warning
Accept that our usage is non-portable: https://stackoverflow.com/questions/3129916/what-is-wrong-with-this-use-of-offsetof
2024-02-22 12:37:14 -08:00
andrew 3a5db2d2ac Share some Node4/16 and Node48/256 implementations
This cuts down on the number of instructions (confirmed with
cachegrind). Also avoid initializing some memory unnecessarily.
2024-02-22 12:31:10 -08:00
andrew bd5d0259d9 Update corpus 2024-02-21 22:13:57 -08:00
andrew 09782ba833 Fix O(k^2) behavior when begin is a prefix of end
Tests / Release [gcc] total: 583, passed: 583
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap: Reference build: <a href="https://jenkins.weaselab.dev/job/weaselab/job/conflict-set/job/main/32//gcc">weaselab » conflict-set » main #32</a>
Tests / Coverage total: 581, passed: 581
weaselab/conflict-set/pipeline/head This commit looks good
2024-02-21 20:11:37 -08:00
andrew 0cb16c384f Fix include path 2024-02-21 16:48:33 -08:00
andrew 3750aa7b5b Vendor valgrind headers
Tests / Release [gcc] total: 583, passed: 583
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap: Reference build: <a href="https://jenkins.weaselab.dev/job/weaselab/job/conflict-set/job/main/31//gcc">weaselab » conflict-set » main #31</a>
Tests / Coverage total: 581, passed: 581
weaselab/conflict-set/pipeline/head This commit looks good
This is encouraged according to https://valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.clientreq
2024-02-21 16:15:40 -08:00
andrew 28e61340f4 Add valgrind annotations
Tests / Release [gcc] total: 583, passed: 583
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|0|:clap: Reference build: <a href="https://jenkins.weaselab.dev/job/weaselab/job/conflict-set/job/main/30//gcc">weaselab » conflict-set » main #30</a>
Tests / Coverage total: 581, passed: 581
weaselab/conflict-set/pipeline/head This commit looks good
This appears to affect the binary (how else could it possibly work??),
but the microbenchmarks don't show a difference
2024-02-21 15:58:01 -08:00
andrew 07839b4687 Fix class-memaccess warning
Tests / Release [gcc] total: 583, passed: 583
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |0|0|0|4|:clap: Reference build: <a href="https://jenkins.weaselab.dev/job/weaselab/job/conflict-set/job/main/29//gcc">weaselab » conflict-set » main #29</a>
Tests / Coverage total: 581, passed: 581
weaselab/conflict-set/pipeline/head This commit looks good
The lifetime of T ended, so it's appropriate to treat it as a void*
2024-02-21 15:27:46 -08:00
andrew ed29ea0e61 Fix fdb-patch.txt
Tests / Release [gcc] total: 583, passed: 583
GNU C Compiler (gcc) |Total|New|Outstanding|Fixed|Trend |:-:|:-:|:-:|:-:|:-: |4|0|4|0|:zzz: Reference build: <a href="https://jenkins.weaselab.dev/job/weaselab/job/conflict-set/job/main/28//gcc">weaselab » conflict-set » main #28</a>
Tests / Coverage total: 581, passed: 581
weaselab/conflict-set/pipeline/head This commit looks good
Turns out the include path was wrong it only worked before accidentally
2024-02-21 15:23:10 -08:00