通過互連器訪問記憶體的延遲
我正在嘗試比較集群的不同節點互連的延遲。目標是最小化記憶體訪問延遲。
我已經獲得了一些關於具有許多 CPU 的 NUMA 架構的硬體實現之一的基準測試。這表明:
- 直接連接到 CPU 的 socket 的記憶體訪問延遲約為 90ns。
- 通過UPI連接到CPU套接字的其他CPU套接字的記憶體訪問延遲約為140ns(因此UPI的一“跳”增加了約50ns)。
- 通過所考慮的 NUMA 互連訪問記憶體的延遲為 370ns(因此該互連的一“跳”增加了大約 280ns)。
NUMA 互連是非常專業的解決方案,無法與大多數硬體供應商一起使用。“標準”互連器是 InfiniBand、乙太網和 FibreChannel。
我正在尋找這些互連器為記憶體訪問提供的延遲。
例如,在 EDR Infiniband 交換機之一的規範中,它聲明它提供“90ns埠到埠延遲”。如果我理解正確,埠到埠延遲是指交換機本身引入的延遲。對於這個延遲,我們應該加上大約 600ns 的 NIC 延遲(根據這個),所以這大約是 90+2x600=1290
$$ ns $$與互連器相關的延遲。(順便說一句,與 90ns 相比,600ns 的值似乎高得可疑。為什麼這麼高?) 我們還應該預期電纜(無源銅纜或光纖)會引入一些延遲。我想這取決於它的長度,但我不確定它的順序是什麼。光在 3ns 左右傳播 1 米,這是一個好的估計嗎?
缺少的部分是網卡訪問記憶體的時間。我想我們應該考慮使用 RDMA 和通過 CPU 的不同情況。我還缺少其他東西嗎?我的上述推理是否正確?
我的主要問題是:使用 InfiniBand、乙太網或 FibreChannel 等“標準”互連器訪問集群不同節點內的記憶體的預期延遲是多少?
我問的原因是我試圖將目前單一系統映像解決方案中描述的問題分解為較小的子問題。
您的 90 ns 本地與 370 ns 其他套接字的單節點數似乎是合理的。但是,我認為 600 ns 的 Infiniband 應該是端到端的,通過切換到不同的幀。
遠端數據報的 600 ns 非常快。本地儲存器訪問通常在 100 ns 左右。並且同一節點不同的套接字可能多 200 ns。
單映像多節點電腦通過軟體中的 RDMA 或通過 NUMA 系統中的硬體互連來訪問記憶體。
InfiniBand 是 RDMA 的一種傳輸方式。大約 2014 年 Mellanox 聲稱Infiband EDR 的端到端為 500 ns。在這裡猜測,但他們的行銷可能是混合數字。NIC 上引用的典型端到端 600 ns,加上路徑上每個額外交換機的 150 ns。
或者,是的,多節點系統的 NUMA 互連是一種專門的東西,但它們確實存在。對於 x86,有 SGI UV 系列。 NUMAlink 7 互連聲稱 500 ns 遠端節點訪問。在 POWER 平台上,IBM 可以使用 NVLink 連接節點,儘管我不知道它的延遲。
關於您選擇乙太網或 Infiniband 的商品傳輸,這可能會限制您使用 RDMA 感知應用程序。支持透明單圖像系統的 NUMA 硬體往往是定制的。