Commit Graph
828 Commits
Author SHA1 Message Date
andrew 68bd39e130 Put skip list in its own shared lib
Now we can right benchmarks against one api, and just change the library
path
2024-02-27 12:02:01 -08:00
andrew 25a1226667 Fix setOldestVersion bug
We should update the oldest version even if we don't have enough
keyUpdates to do
2024-02-27 10:59:59 -08:00
andrew d4d2dbcbda Strip off leading {P,L}<tab> 2024-02-27 10:29:59 -08:00
andrew 6d9b35396f Rename to real_data_bench 2024-02-26 19:37:15 -08:00
andrew 0c177fb40f Measure throughput in RealDataBench 2024-02-26 19:34:28 -08:00
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
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 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 2024-02-24 18:20:00 -08:00
andrew 70e3377eac Update benchmark in README.md
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 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 2024-02-22 22:46:08 -08:00
andrew 9a47f2d03a Fixed missed usages of longestCommonPrefixPartialKey 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 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 2024-02-21 20:11:37 -08:00