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 操作由小的、相對固定大小的請求組成時,有效地平衡跨路徑的負載。