  For a write request, today flash storage cannot distinguish the logical
object it comes from. In such object-oblivious flash devices, concurrent writes
from different objects are simply packed in their arrival order to flash memory
blocks; hence objects with different lifetimes are multiplexed onto the same
flash blocks. This multiplexing incurs write amplification, worsening the
performance. Tackling the multiplexing problem, we propose a novel interface
for flash storage, FlashAlloc. It is used to pass the logical address ranges of
logical objects to the flash storage and thus enlighten the storage to stream
writes by objects. The object-aware flash storage can de-multiplex writes from
different objects with distinct deathtimes into per-object dedicated flash
blocks. Given that popular data stores separate writes using objects (e.g.,
SSTables in RocksDB), we can achieve, unlike the existing solutions,
transparent write streaming just by calling FlashAlloc upon object creation.
Our experimental results using an open-source SSD prototype demonstrate that
FlashAlloc can reduce write amplification factor (WAF) in RocksDB, F2FS, and
MySQL by 1.5, 2.5, and 0.3, respectively and thus improve throughput by 2x,
1.8x, and 1.2x, respectively. In particular, FlashAlloc will mitigate the
interference among multitenants. When RocksDB and MySQL were run together on
the same SSD, FlashAlloc decreased WAF from 4.2 to 2.5 and doubled their
throughputs.
