把 NVMe 命令搬到网络上
NVMe over Fabrics 把原本跑在本地 PCIe 上的 NVMe 协议搬到网络传输上,让主机通过网络访问远端固态存储,同时保留 NVMe 的队列模型:主机与存储之间以成对的提交队列与完成队列交互,命令开销比 SCSI 更小、并发队列更多。结构上包含主机侧发起端、提供存储的子系统、子系统内的控制器与命名空间,以及用于告知主机有哪些可用目标的发现服务。传输层可选 TCP、RDMA 与 FC。
基本信息
| 传输类型 | TCP、RDMA、FC |
|---|---|
| 协议基础 | NVMe 命令集 + 面向 fabric 的封装与发现服务 |
| 标识方式 | 主机与子系统用 NQN 命名,命名空间有全局标识 |
| 多路径机制 | 由 ANA 访问状态驱动的多路径选择 |
| 权限要求 | 主机侧 root/管理员,存储侧子系统与主机授权配置 |
典型使用场景
- 全闪存集中存储环境下追求更低延迟与更高并发
- 新建数据中心评估 NVMe over TCP 以复用现有以太网
- 已有 FC 投资的环境评估 NVMe over FC 以复用 fabric
- 高性能数据库与容器存储卷的块设备后端
- 替换既有 SCSI 块存储路径时的技术选型
概念与命令对照
概念与命令对照
# 1) 发现可用子系统(示例为 TCP 传输)
nvme discover -t tcp -a 10.0.20.11 -s 4420
# 2) 连接到指定子系统
nvme connect -t tcp -n nqn.2024-01.com.example:storage01 -a 10.0.20.11 -s 4420
# 3) 查看已连接子系统及其路径与访问状态
nvme list-subsys
# 4) 查看命名空间对应的块设备
nvme list关键概念对照
| NVMe-oF 概念 | 作用 | 对应传统概念 |
|---|---|---|
| 子系统(subsystem) | 对外提供存储的逻辑单元 | 接近阵列或目标端 |
| 控制器(controller) | 主机连接的通信端点 | 接近目标端口 |
| 命名空间(namespace) | 可被主机访问的存储单元 | 接近 LUN |
| NQN | 主机与子系统的全局名称 | 接近 WWN 或 IQN |
| 发现服务 | 告知主机有哪些可用目标 | 接近发现会话 |
传输类型的选择取决于既有网络与延迟要求:TCP 部署门槛最低,RDMA 需要无损或有相应拥塞控制支持,FC 依赖既有光纤通道环境,具体能力与限制以各自官方文档为准。
NVMe-oF 的授权模型以主机名称(NQN)为主,配置错误会让不该访问的主机连接到子系统;上线前应核对授权清单与网络边界,不要只依赖传输网络的隔离。