New storage technologies such as Phase-Change Memory (PCM or PCRam), Memristors, and flash promise to change how programs and operating systems interact with storage. Our research focuses on new uses for these technologies outside traditional file storage.


FlashTier: Solid-State Caching

The availability of high-speed solid-state storage has introduced a new tier into the storage hierarchy. Low-latency and high-IOPS solid-state drives (SSDs) cache data in front of high-capacity disks. However, most existing SSDs are designed to be a drop-in disk replacement, and hence are mismatched for use as a cache.

This work proposes FlashTier, a system architecture built upon solid-state cache (SSC), a flash device with an interface designed for caching. Management software at the operating system block layer directs caching. The FlashTier design addresses three limitations of using traditional SSDs for caching. First, FlashTier provides a unified logical address space to reduce the cost of cache block management within both the OS and the SSD. Second, FlashTier provides cache consistency guarantees allowing the cached data to be used following a crash. Finally, FlashTier leverages cache behavior to silently evict data blocks during garbage collection to improve performance of the SSC.

We have implemented an SSC simulator and a cache manager in Linux. In trace-based experiments, we show that FlashTier reduces address translation space by 60% and silent eviction improves performance by up to 167%. Furthermore, FlashTier can recover from the crash of a 100GB cache in only 2.4 seconds.

Project website

FlashVM: Flash meets Virtual Memory

With the decreasing price of flash memory, systems will increasingly use solid-state storage for virtual-memory paging rather than disks. FlashVM is a system architecture and a core virtual memory subsystem built in the Linux kernel that uses dedicated flash for paging.

FlashVM focuses on three major design goals for memory management on flash: high performance, reduced flash wear out for improved reliability, and efficient garbage collection. FlashVM modifies the paging system along code paths for allocating, reading and writing back pages to optimize for the performance characteristics of flash. It also reduces the number of page writes using zero-page sharing and page sampling that prioritize the eviction of clean pages. In addition, we present the first comprehensive description of the usage of the discard command on a real flash device and show two enhancements to provide fast online garbage collection of free VM pages.

Overall, the FlashVM system provides up to 94% reduction in application execution time and is four times more responsive than swapping to disk. Furthermore, it improves reliability by writing up to 93% fewer pages than Linux, and provides a garbage collection mechanism that is up to 10 times faster than Linux with discard support.

Project website

Hathi: Durable Memory Transactions

Recent architectural trends - cheap, fast solid-state storage, inexpensive DRAM, and multi-core CPUs - provide an opportunity to rethink the interface between applications and persistent storage. To leverage these advances, we propose a new system architecture called Hathi that provides an in-memory transactional heap made persistent using high-speed flash drives. With Hathi, programmers can make consistent concurrent updates to in-memory data structures that survive system failures.

Hathi focuses on three major design goals: ACID semantics, a simple programming interface, and fine-grained programmer control. Hathi relies on software transactional memory to provide a simple concurrent interface to in-memory data structures, and extends it with persistent logs and checkpoints to add durability.

To reduce the cost of durability, Hathi uses two main techniques. First, it provides split-phase and partitioned commit interfaces, that allow programmers to overlap commit I/O with computation and to avoid unnecessary synchronization. Second, it uses partitioned logging, which reduces contention on in-memory log buffers and exploits internal SSD parallelism. We find that our implementation of Hathi can achieve 1.25 million txns/s with a single SSD.

Storage-Class Memory

Emerging storage-class memory (SCM) devices provide the interface of memory but the persistence of disks. SCM promises low-latency storage, which is becoming increasingly important in data-centric applications. However, existing OS interfaces fail to expose the full capabilities of SCM as they are designed for a strict bifurcation of devices into memory and storage.

Mnemosyne: Lightweight Persistent Memory

Mnemosyne provides programmers with direct access to the durability of SCM through the persistent memory abstraction. With persistent memory, programmers can make common in-memory data structures, such as lists and trees, persistent without having to convert them to a serialized format. Data structures can be made persistent at the speed of the device rather than the speed of the operating system.

Project website

Distributing File System Functionality for Direct Access

While persistent memory enables low-latency flexible storage, it sacrifices many of the features that make file system useful such as naming and secure sharing. Kiln is a new flexible file-system architecture that exposes SCM to user-mode programs so they can read and write data without kernel interaction but maintain the naming, sharing, and protection features of file systems.


This work is supported in part by National Science Foundation (NSF) grants CNS-0834473 and CNS-0720565, and grants from Google and Microsoft.