0009e17d4f
We were delegating too much work. The original algorithm description said that for each insert, "1" unit of merge work has to be done *at each level* … implying that if nothing needs doing at a level, that "not done work" does not add to work done elsewhere. This fix gets us back to that situation (by always subtracting at least 2^TOP_LEVEL from the presented work amount), while maintaining the (beneficial) effect of chunking merge work at at anything but the last level. Effectively, this reduces the maximum amount of merge work done, also reducing our worst case latency. Now that we understand this, we can refactor the algorithm to delegate "DoneWork", because then each level can determine the total work, and see if any work is left "for me". That's next. |
||
---|---|---|
.. | ||
basho_bench_driver_hanoi.erl | ||
hanoi.app.src | ||
hanoi.erl | ||
hanoi.hrl | ||
hanoi_app.erl | ||
hanoi_bbench.config | ||
hanoi_fold_worker.erl | ||
hanoi_level.erl | ||
hanoi_merger.erl | ||
hanoi_nursery.erl | ||
hanoi_reader.erl | ||
hanoi_sup.erl | ||
hanoi_temp_riak_kv_backend.erl | ||
hanoi_util.erl | ||
hanoi_writer.erl | ||
plain_rpc.erl | ||
riak_kv_hanoi_backend.erl |