此篇是OpenChannelSSD之三_LightNVM子系统的进阶版。
对于OCSSD这类的设备,系统内核对于它的驱动架构是怎样的?
LightNVM 是主机端对OCSSD设备的驱动
Open-Channel SSD 是与主机分担责任以实现和维护典型 SSD 严格保留在固件中的功能的设备。
其中包括
- 闪存转换层 (FTL)、
- 坏块管理和
- 专用硬件单元,例如闪存控制器、接口控制器和大量闪存芯片。
将某些职责转移到主机背后的动机是使主机端的 I/O 数据命令可预测。 通过这种方式,设备使主机能够调整 FTL 算法和优化,以匹配其执行的适当用户工作负载。
OCSSD的Linux 主机端架构由四个基本组件组成:LightNVM 兼容的设备驱动程序、框架管理器、介质管理器和目标。如图所示:
LightNVM 设备驱动
设备驱动程序负责实现用于主机和 SSD 之间通信的存储协议。为每个连接的 Open-Channel SSD 创建一个设备驱动的实例。
它依赖 Linux 块管理器来处理命令提交/完成、超时和标记。目前,LightNVM 使用 NVMe,它扩展了
- 识别设备结构,主机使用它来发现设备的可用功能、扩展和特性;
- 以及一系列自定义命令,使主机能够发出直接作用于物理介质的 I/O 命令。
框架管理器
框架管理充当设备驱动程序、介质管理器和目标之间的一个中介。 它为设备初始化、卸载提供支持功能。
介质管理器
媒体管理器抽象了底层的物理设备通过隐藏其约束和访问细节来抽象。它负责:
- 命名供应商特定和通用寻址格式之间的映射
- 特定于设备的 SSD 状态管理
- 恢复——在操作与 SSD 状态管理相关的元数据时保证持久性。
每个介质管理器的实现都可以根据它所暴露的上层的需求而有很大差异。
LightNVM 的通用介质管理器实现了最小的块管理,并让目标或用户空间应用程序实现实际的 FTL。
尽管如此,介质管理器还是有可能实现整个 FTL 并管理用户空间界面。
比如:介质管理器可以暴露一个类似于传统块存储设备的块设备。 这样的介质管理器将管理诸如数据放置、垃圾收集和块管理之类的功能。
LightNVM目标
当使用通用介质管理器时,LightNVM目标来实现 FTL 功能(例如,逻辑地址的转换、数据放置或垃圾收集)。 它们暴露给用户空间一个存储接口。此类接口包括块设备、键值存储或对象存储。 也可以实现自定义接口。 目标和设备(介质管理器)的划分、分组和分配是灵活的,可以将一个设备拆分并分配为多个目标,或者多个设备可以属于一个目标。
此外,LightNVM 通过 liblightnvm 连接到用户空间,它公开了一个 get_block/put_block
接口供应用程序实现自己的 FTL。
本文档描述了与 Open-channel SSD 通信的接口。 此版本还引入了 NVMe 协议扩展,以支持基于 NVMe 修订版 1.2 规范的 Open-Channel SSD 接口。Open Channel Solid State Drives NVMe Specification Revision 1.2
共享责任配置的示例如下:主机管理数据放置、垃圾收集,并了解设备内的并行单元以调度和管理 I/O 流。 设备管理坏块并维护映射表。 该设备还实现了硬件扩展以支持原子 IO 和元数据持久性。 这些通过公共接口暴露给主机。
Open-Channel SSD 以公开对其物理闪存存储的直接访问为基准,同时保留传统 SSD 的一部分内部功能。 分配给主机的职责完全取决于设备功能。
目前,LightNVM 通过 null_blk
和 NVMe 驱动程序连接。 NVMe 扩展允许使用 LightNVM 扩展的 QEMU 实现进行开发,使用 Keith Busch 的 qemu-nvme 分支。
Open Channel SSD 的开发点击这里