Linux内核中Open-Channel SSD 子系统:LightNVM
它是为Open-Channel SSD 的管理设计和实现的Linux子系统。
下图描述了用于Openchannel SSD(LightNVM)的Linux主机体系结构。
它包含三层组件,每个都为open-channel SSD提供了抽象层:与LightNVM兼容的NVMe Device Driver, media manager和 target。
NVMe Device drivers:
- 检测open-channel SSD
- 实行PPA接口
启用LightNVM的NVMe设备驱动程序使内核模块可以通过PPA I/O接口访问open-channel SSD。设备驱动程序将设备作为传统的Linux设备公开给用户空间,从而允许应用程序通过ioctl与设备进行交互。 如果PPA接口通过LBA公开,它也可能相应地发出I/O。
存储设备驱动程序的实现支持OpenChannel的Physical Page Address command set。
该命令集包括
- ID结构,主机能用来发现open-channel设备的可用功能,扩展和特性
- Physical data command能与存储非易失性介质进行有效通信。
LightNVM Subsystem (Media Manager):
- 通用层
- 核心功能
- Target管理(例如pblk)
子系统的一个实例在PPA I/O支持的块设备的顶部初始化。该实例使内核可以通过内部nvm_dev数据结构和sysfs公开设备的几何结构。这样,FTL和用户空间的应用程序可以在使用前了解设备的几何特征。它还使用blk-mq设备驱动程序专用的I/O接口公开了vector接口,从而可以通过设备驱动程序有效地发布vector I/Os。
介质管理器抽象化底层物理介质通过隐藏其约束和访问详细信息,主要负责:
- 具体地址和通用地址格式之间的名称映射
- 设备具体的SSD状态管理
- 恢复–保证持久性在处理与SSD状态管理关联的元数据时
介质管理器充当了用户和物理介质之间的调解器,从而消除了介质的复杂性。LightNVM通用介质管理器实现最少的块管理,并允许目标或用户空间应用程序执行实际的FTL。它可以实现整个FTL并管理用户空间接口。例如,它可以暴露类似于传统块存储设备的块设备。这样它将管理诸如data placement, garbage collection, and block management之类的功能。
High-level I/O Interface (Targets):
- 使用pblk的块设备
- 整合Liblightnvm的应用
一个target可通过高级I/O接口比如pblk提供的块I/O接口之类的标准接口,或自定义target提供的特定于应用程序的接口为内核空间模块或用户空间应用程序访问open-channel SSD。
具体来说,使用通用介质管理器时,目标将实现FTL的功能(逻辑转换,数据放置,垃圾回收)。它们还将暴露存储接口给用户空间。此类接口包括块设备,键值存储或对象存储。目标和设备(介质管理器)的划分,分组和分配非常灵活,可以将一个设备拆分并分配给多个目标,或者多个设备可以属于一个目标。
基于host端的Flash Translation Layer 叫做pblk, 它将open-channel SSD 公开为传统的block I/O 设备。
此外,LightNVM通过liblightnvm连接到用户空间,该库公开了一个get / put块接口,供应用程序实现自己的应用程序托管FTL。
Flash Translation Layer
- Data Placement
- 物理地址到逻辑地址的映射(L2P)
- Host端的映射表
- 其他元数据
- I/O Scheduling
- Error handling
- 擦除&写入错误
- 如今Target
- Pblk (Kernel 4.17)
Libghtnvm-RocksDB (kernel 4.11)