ifconfig 顯然為 InfiniBand HCA 顯示錯誤的 RX/TX 值
最近,我
watch -n 1 ipconfig
在我們的一個 Linux 集群計算節點上執行了一個 48 程序 MPI 執行,分佈在多個節點上。奇怪的是,雖然乙太網數據包的計數似乎正確(由於 SSH 會話,幾 kb/s),但看起來 IB 適配器保持空閒(RX/TX 數據包和字節沒有變化)。MPI over IB 肯定在我們的集群上工作(我們做了幾次檢查,如果沒有的話人們會注意到的),更奇怪的是,如果我從另一個節點 ping InfiniBand-HCA,突然數據包被計算在內。
誠然,我對 IB 的了解非常有限,但我知道使用 InfiniBand 提高性能的關鍵方面之一是通過將(核心)網路堆棧直接實現到硬體中來繞過(或者我認為 - 請糾正我)如果我錯了!)。
我的解釋是,由於數據包沒有到達核心,因此核心無法正確攔截流量,因為相應層中缺少資訊 - 這聽起來合理嗎?但是,我不確定ICMP 案中發生了什麼。也許通過 IPoIB 發送的數據會觸發相應的核心常式進行數據包計數,而“IB-native”協議(動詞、RDMA)不會?
不幸的是,我在網際網路上找不到任何關於這件事的資訊。
你的假設是正確的。在 Infiniband 上執行 MPI 時,您通常希望繞過網路堆棧並使用 RDMA/Verbs 介面來獲得完整的性能。通過該介面發送的所有通信都不會計入 IPoIB 介面,
ib0
例如要監控 Infiniband 卡的流量,您可以查看
/sys/class/infiniband/mlx4_0/ports/1/counters/
計數器。不幸的是,這些只是 32 位計數器,在 Infiniband 中會很快填滿,因此您應該安裝perfquery
可以使用 64 位計數器收集結構中的性能計數器。要
perfquery
在節點上本地進行簡單查詢並獲取 64 位計數器,您可以發出如下命令。perfquery -x
您還可以通過添加刪除 Infiniband 設備的 LID 來獲取遠端機器的性能計數器。
perfquery -x -a 2
-a
LID 2 的所有埠在哪裡。請注意,
PortXmitData
andPortRcvData
是每個通道號,您必須將它們通常乘以 4 才能獲得實際字節數。您還可以添加一個-r
以將計數器重置為您的perfquery
,這使得計算每秒數字變得更加容易。