some of the basework for getting sto to run with ycsb/tpcc benchmarks. ycsb seems to work fine but tpcc not so much (also should probably move tpcc into sto repo instead of putting sto in silo)
working with all benchmarks finally, but slow for a few reasons
feeble attempt at using arenas
support max_bytes_read directly
one less copy
optimizations, some with incorrect behavior, for tpcc
s'more optimizations
try unlocked update before locked update, makes for a fairly significant speedup
don't malloc for non trivially copyable objects that only have sizeof() == void*, avoids a few mallocs (surprisingly few though) and gains some more performance for us
some more perf logging (malloc call distribution)
change around when we copy strings for a fairly significant speedup result
opts related to us not reading our own writes
don't read-my-writes for deletes either
avoid a string copy during inserts/deletes (taking advantage of str_arenas), pretty nice speedup (we're at 50-51k/s now)
use str_arena string for updates, then copy into existing buffer at commit time, reduces mallocs by quite a lot, and gets us another speedup
allocate many versioned_values all at once, doubling the size each time we run out. this reduces nmallocs by almost half, but also demonstrates that this isn't much of a perf diff :(. HOWEVER, removing a virtual method from versioned_value and thus reducing its size to 16 bytes (no vtable) DOES make a 2% or so difference (this is significant for us). Hopefully not having a versioned_value at all can make an even bigger difference
only check reads for a write if we need to. doesn't really gain any speedup though :( (except some for the delivery test))
add back in firstWrite_ optimization, but for purposes of sorting now, not read my writes perf. makes a fair difference (we're at 56k/s now)
trust in gcc and don't inline add_item (maybeeee has a perf improvement)
use permutation array to sort only writes (ignores even reads after first write). actually makes for a slowdown though, potentially because of: less sequential reads, checking our writes is quite a bit more expensive