Multiple merge threads will be a big deal. For disk-based servers I
need more threads to get more IO throughput. For very fast flash I
still want multiple threads because merge with compression &
decompression needs more CPU.
Can you use the notion of debt for rate limits? I define amplification
as the amount of sequential IO (reads & writes) required to eventually
migrate a change from the in-memory table to the oldest file. For a
classic LSM with each level 10X larger than the previous, then the
amplification will be ~20X per level. The LSM style used by WT allows
for a tradeoff -- more files increases the cost for reads (at least
for range scans) and decreases the amplification for writes.
So there is the option for two types of tuning. The first is the
choice to favor faster range scans (few files to check in the worst
case) or write amplification. The second is to keep the amplification
debt from becoming too big. Assuming you estimate the amplification at
run time, and the estimate is X, then each a write of 100 bytes incurs
a debt of 100 * X. When the debt grows more CPU and IO can be devoted
to merges and in the worst case writes could be throttled.
--
Mark Callaghan
mdca...@gmail.com