In Autumn 2020, I designed and gave a new course at VU Amsterdam for masters students - Storage Systems. The goal of the course is to teach students about the rise of Non-Volatile Memory (NVM) storage technologies in commodity computing, their impact on system design (architecture, operating system), distributed systems, storage services, and application designs.
Course project: The course has a project in which students design and implement an FTL with GC, and a KV store on top of their FTL for an Open-Channel SSD. We used LightNVM infrastructure inside QEMU to emulate an OCSSD. Giulia Frascaria and Sacheendra Talluri (PhD students in our group) helped to setup the project framework.
The course lectures cover:
1. Introduction: History, NAND flash, operations, internal organization. [PDF]
2. Host Interfacing and Software Implications: NVMe, storage and block-layer optimizations. [PDF]
3. Flash FTL and Garbage Collection: FTL and GC designs, concerns, and host-managed FTLs. [PDF]
4. Flash Filesystems: Log-structured file systems, F2FS, DFS, and Nameless writes. [PDF]
5. Flash Key-Value Stores: B+ Trees, Hash Tables, and LSM trees on flash. [PDF]
6. Byte-addressable Persistent Memories: Optane, NVHeap, and Pmem/PMDK project. [PDF]
7. Networked Flash: Disaggregated storage, NVMoF, and FlashNet. [PDF]
8. Programmable Storage: What is it, why, and recent works in the area. [PDF]
9. Distributed Storage - I: Distributed temporary data storage and formats (Crail and Albis). [PDF]
10. Distributed Storage - II: Talks about Corfu and Tango distributed transaction systems. [PDF]
All slides are available at https://github.com/animeshtrivedi/animeshtrivedi.github.io/tree/master/files/2020/stosys.