Non-volatile memory is an upcoming technology that fills the gap between fast, but expensive DRAM, and slower, but bigger SSD storage. It will come in two forms: a version that is attached to the PCIe bus where it is accessed similar to an SSD, and a version (NVRAM) that is directly attached to the CPU’s memory controller where it behaves like DRAM. For in-memory databases, this second type is of bigger interest as it could be used to build bigger systems at lower hardware costs.
For the foreseeable future, NVRAM will have a higher latency and lower bandwidth than DRAM, both for reads but even more so for writes. When we imagine a system in which both types of memory are used side-by-side, this means that we want frequently used data structures on fast DRAM and rarely used data on NVRAM. The access frequency is, however, not the only criteria that we want to optimize by. Additionally, access patterns (random vs. sequential), read/write ratio, and others come into play.
In this project, our goal is to write a library that can transparently manage data structures on a hybrid DRAM/NVRAM system and optimize the placement of the data structures so that the limited DRAM space is used efficiently.
In a previous project, we looked at exploiting the non-volatility of NVRAM to allow for faster database restarts. This project will focus on the higher capacity of NVRAM and will leave the question of persistence aside.