Linux NVMe 多路徑¶
本文件描述了 Linux NVMe 主機驅動程式支援的 NVMe 多路徑及其路徑選擇策略。
介紹¶
Linux 中的 NVMe 多路徑功能將具有相同識別符號的名稱空間整合到單個塊裝置中。 使用多路徑可增強 I/O 訪問的可靠性和穩定性,同時提高頻寬效能。 當用戶將 I/O 傳送到此合併的塊裝置時,多路徑機制會根據配置的策略選擇其中一個底層塊裝置(路徑)。 不同的策略會導致不同的路徑選擇。
策略¶
所有策略都遵循 ANA(非對稱名稱空間訪問)機制,這意味著當最佳化路徑可用時,將選擇最佳化路徑而不是非最佳化路徑。 當前的 NVMe 多路徑策略包括 numa(預設)、round-robin 和 queue-depth。
- 要設定所需的策略(例如,round-robin),請使用以下方法之一
echo -n “round-robin” > /sys/module/nvme_core/parameters/iopolicy
或將 “nvme_core.iopolicy=round-robin” 新增到 cmdline。
NUMA¶
NUMA 策略選擇最接近當前 CPU 的 NUMA 節點的路徑以進行 I/O 分配。 此策略根據網路介面連線維護到每個 NUMA 節點的最短路徑。
- 何時使用 NUMA 策略
多核系統:最佳化多核和多處理器系統中的記憶體訪問,尤其是在 NUMA 架構下。
高親和性工作負載:將 I/O 處理繫結到 CPU,以減少跨節點的通訊和資料傳輸延遲。
輪詢 (Round-Robin)¶
輪詢策略在所有路徑上均勻地分配 I/O 請求,以提高吞吐量和資源利用率。 每個 I/O 操作都按順序傳送到下一個路徑。
- 何時使用輪詢策略
平衡的工作負載:對於具有相似 I/O 大小和型別的平衡且可預測的工作負載有效。
同構路徑效能:當效能特徵(例如,延遲、頻寬)相似時,有效地利用所有路徑。
佇列深度 (Queue-Depth)¶
佇列深度策略根據每個路徑的當前佇列深度管理 I/O 請求,選擇正在進行的 I/O 數量最少的路徑。
- 何時使用佇列深度策略
具有小 I/O 的高負載:當負載很高,並且 I/O 操作由小的、相對固定大小的請求組成時,有效地平衡跨路徑的負載。