NOVA
Conclusion:
Adapts conventional log-structured file system techniques to exploit the fast random access that NVMs provide.- separate logs for each inode to improve concurrency
- stores file data outside the log to minimize log size and reduce garbage collection costs
- based on hardware-based NVMM emulator
NOVA’s logs provide metadata, data, and mmap atomicity and focus on simplicity and reliability, keeping complex metadata structures in DRAM to accelerate lookup operations
Contributes:
- It extends existing log-structured file system techniques to exploit the characteristics of hybrid memory systems.
- It describes atomic mmap, a simplified interface for exposing NVMM directly to applications with a strong consistency guarantee.
- It demonstrates that NOVA outperforms existing journaling, shadow paging, and log-structured file systems running on hybrid memory systems.
- It shows that NOVA provides these benefits across a range of proposed NVMM technologies.
Challenges:
- Performance: NVMM has lower latency -> Direct Access (DAX) avoids extra copy between NVMM and DRAM.
- Write Reordering: cache hierarchies (modern processor) -> reorder store operations -> do not guarantee when update will reach NVMMs.
explicitly flushing caches and issuing memory barriers (fence) -> clflush instrument. - Atomicity: POSIX-style file system require operations to be atomic (e.g. Rename) -> Disk only provides 8-byte atomic operation
- three technologies to apply atomic: Journaling, Shadow Paging, Log-structuring
Three observations:
- Data structure which support fast search is hard to implement in NVMM
- Complexity if cleaning logs stems is unnecessary due to cheaper random access
- Using single log limits concurrency
Design Decisions:
- Keep logs in NVMM and indexes in DRAM (radix tree)
- persistent log is simple and efficient
- volatile tree structure has no consistency overhead
- Give each inode its own log: Allow concurrent updates across files without sync (high concurrency/scalability)
- Per-CPU NVMM free list, journal and inode table
- concurrent transactions and (de)allocation
- Use logging and lightweight journaling for complex atomic updates, making sure atomic
- append data to logs
- update the log tail to commit the updates (avoid duplicate writes)
Implement the log as a singly linked list (4 KB NVMM pages)
- allocate log space is easy
- perform log cleaning at fine grained (Page level)
- reclaiming log pages require a few pointer assignments
Do not log file data
- Copy-on-write for file data
- Log only contains meta-data
- Log is short
- Keep logs in NVMM and indexes in DRAM (radix tree)
Fast garbage collection
- Log is a linked list and only contains meta-data -> fast GC deletes dead log pages from list (No copying)
- Two different techs:
- Fast GC: deleting dead log page from linked list
- Through GC: valid log < 50% -> format a new log and atomically replace the old one -> only copy meta-data
NV-Tree
A consistent and cache-optimized B+Tree with reducing CPU cacheline flush
Motivations:
- Keeping consistency causes a high amplification of the CPU cacheline invalidation and flush with increasing cache misses significantly
- the consistency cost due to flush mostly comes from flushing shifted entries in order to keep LN sorted
- not all the data needs to be consistent to keep the entire data structure consistent
Overview:
- Design
- Selectively Enforce Data Consistency
- Keep Entries in LN Unsorted
- Organizing IN in Cache-optimized Format
- IN - PLN - LN
- Design