Linux NVMe 多路径

本文档描述了 Linux NVMe 主机驱动程序支持的 NVMe 多路径及其路径选择策略。

介绍

Linux 中的 NVMe 多路径功能将具有相同标识符的命名空间集成到单个块设备中。 使用多路径可增强 I/O 访问的可靠性和稳定性,同时提高带宽性能。 当用户将 I/O 发送到此合并的块设备时,多路径机制会根据配置的策略选择其中一个底层块设备(路径)。 不同的策略会导致不同的路径选择。

策略

所有策略都遵循 ANA(非对称命名空间访问)机制,这意味着当优化路径可用时,将选择优化路径而不是非优化路径。 当前的 NVMe 多路径策略包括 numa(默认)、round-robin 和 queue-depth。

要设置所需的策略(例如,round-robin),请使用以下方法之一
  1. echo -n “round-robin” > /sys/module/nvme_core/parameters/iopolicy

  2. 或将 “nvme_core.iopolicy=round-robin” 添加到 cmdline。

NUMA

NUMA 策略选择最接近当前 CPU 的 NUMA 节点的路径以进行 I/O 分配。 此策略根据网络接口连接维护到每个 NUMA 节点的最短路径。

何时使用 NUMA 策略
  1. 多核系统:优化多核和多处理器系统中的内存访问,尤其是在 NUMA 架构下。

  2. 高亲和性工作负载:将 I/O 处理绑定到 CPU,以减少跨节点的通信和数据传输延迟。

轮询 (Round-Robin)

轮询策略在所有路径上均匀地分配 I/O 请求,以提高吞吐量和资源利用率。 每个 I/O 操作都按顺序发送到下一个路径。

何时使用轮询策略
  1. 平衡的工作负载:对于具有相似 I/O 大小和类型的平衡且可预测的工作负载有效。

  2. 同构路径性能:当性能特征(例如,延迟、带宽)相似时,有效地利用所有路径。

队列深度 (Queue-Depth)

队列深度策略根据每个路径的当前队列深度管理 I/O 请求,选择正在进行的 I/O 数量最少的路径。

何时使用队列深度策略
  1. 具有小 I/O 的高负载:当负载很高,并且 I/O 操作由小的、相对固定大小的请求组成时,有效地平衡跨路径的负载。