  The log-structured merge tree (LSM-tree) is widely employed to build
key-value (KV) stores. LSM-tree organizes multiple levels in memory and on
disk. The compaction of LSM-tree, which is used to redeploy KV pairs between
on-disk levels in the form of SST files, severely stalls its foreground
service. We overhaul and analyze the procedure of compaction. Writing and
persisting files with fsyncs for compacted KV pairs are time-consuming and,
more important, occur synchronously on the critical path of compaction. The
user-space compaction thread of LSM-tree stays waiting for completion signals
from a kernel-space thread that is processing file write and fsync I/Os.
  We accordingly design a new LSM-tree variant named AisLSM with an
asynchronous I/O model. In short, AisLSM conducts asynchronous writes and
fsyncs for SST files generated in a compaction and overlaps CPU computations
with disk I/Os for consecutive compactions. AisLSM tracks the generation
dependency between input and output files for each compaction and utilizes a
deferred check-up strategy to ensure the durability of compacted KV pairs. We
prototype AisLSM with RocksDB and io_uring. Experiments show that AisLSM boosts
the performance of RocksDB by up to 2.14x, without losing data accessibility
and consistency. It also outperforms state-of-the-art LSM-tree variants with
significantly higher throughput and lower tail latency.
