NVMKV
NVMKV is a research key-value store that maps keys into a sparse flash address space and relies on extended FTL primitives for persistence.
Hashing selects a virtual slot; the FTL supplies physical mapping and allocation. Unwritten virtual gaps consume address space without reserving flash capacity. This removes a separate key-to-location index, not the FTL map or every cache. [2]
The 2015 contract makes individual basic operations atomic and serializable, including operations submitted in a batch; the batch itself is not one transaction. Conditional primitives are emulated in that prototype. Its single-I/O goal is not a bound for every lookup or deletion. Pool deletion records invalidation before asynchronous reclamation. [1]
The published library requires sparse addressing, atomic writes and persistent TRIM from its lower layer. Those requirements are not implied by an ordinary block-device interface. The pinned API declares batch get and put calls without specifying whole-batch atomicity. [3] [4] In that revision, batch reads call individual gets in sequence; batch writes can split trimming and writing into separate atomic vector calls. [5] [6]
A b-bit sector offset addresses 2^b sectors. At 512 bytes per sector, 11 bits span 1 MiB and 12 bits span 2 MiB. This arithmetic describes virtual extent size, not a maximum accepted value or physical flash reservation. [7]
Relations
Limitations
- Hash-based iteration does not preserve key order, and small records can waste space through sector rounding. [1]
- The pinned API declares a 1,047,552-byte value ceiling (1 MiB minus 1 KiB). Its README specifies 1 MiB minus one block for 2 KiB or 4 KiB block configurations. [4, 3]
Citations
- Marmol et al. NVMKV: A Scalable, Lightweight, FTL-aware Key-Value Store. USENIX ATC 2015, sections 5, 7 and 9.
- Marmol et al. NVMKV: A Scalable and Lightweight Flash Aware Key-Value Store. HotStorage 2014, sections 2-3.
- OpenNVM NVMKV library README, revision 1cebb5d713aa9043a1cd9eb661bfbcdb73b7f006.
- OpenNVM API: value-size constant and batch declarations, revision 1cebb5d713aa9043a1cd9eb661bfbcdb73b7f006.
- OpenNVM store manager: batch read loop and split trim/write path, revision 1cebb5d713aa9043a1cd9eb661bfbcdb73b7f006.
- OpenNVM write wrapper: atomic vector dispatch, revision 1cebb5d713aa9043a1cd9eb661bfbcdb73b7f006.
- Hesela: exact virtual sector-address arithmetic, with executable checks.
Sources & caveats
- Source review of historical prototypes and a pinned API, not an executed NVMKV benchmark or crash-recovery test.
- ATC15 evaluated two ioMemory systems and omitted YCSB workload E. Its throughput comparisons are not forecasts for current SSDs. [1]
- ATC15 section 5.1 labels 11 sector-offset bits at 512 bytes as 2 MB; multiplication gives 1,048,576 bytes (1 MiB). This does not establish the implementation's value limit. [1] [7]