Swapping Processes to Non-Volatile Memory in Linux

Non-volatile memory (NVM) is a new memory technolgy, which is like DRAM in speed and latency, but it will keep stored values even through power cycles. It is believed to become larger and cheaper as DRAM, while rivaling it in speed and power consumption. It can be accessed at byte granularity, the same way DRAM is, i.e. with normal mov instructions.

While NVM is still slower than regular DRAM, it is already larger in size and retains its values over power cycles. NVM can be used as a first layer of swapping, before a process hits the disk, when the system is under heavy load. The affected process or pages will pay with higher latency, however it can still be executed and the NVM-pages can still be used - in contrary to when processes are swapped to disk, where they have to be swapped back in. Clever algorithms can be developed on when a process needs to be swapped back to DRAM or which pages or processes to swap to NVM.

In this thesis you explore the Linux kernel and modify key parts of some system calls and the swapping-mechanisms. You will extend the Linux binary loader to load (parts of) programs into NVM memory, and alter mmap to map new NVM memory if needed. Also the swapping-mechanism needs to be altered to allow for swapping of pages and whole processes to NVM.

After the implementation is finished, you will evaluate your modifications in regards to performance of swapped-to-nvm'd processes against DRAM processes, the possibility to overprovision and the quality of service possible with processes swapped to NVM, against ones, which were swapped to disk.

Tasks

  • Extend the Linux ELF-loader to allow loading parts or complete programs to NVM (in case of high DRAM load)
  • Modify the swapping-mechanism of the Linux kernel to include NVM
  • Extend the mmap syscall to handle page faults for these processes
  • Evaluate
    • Performance losses due to NVM-latencies
    • Quality of service of NVM processes

Requirements

  • Experiences in C/C++
  • Experience with working with Linux as application developer