Infiniband のスピード計測
Infiniband のスピードを計測しようと思い立って計測してみた。(以前にも測ってはいたんだけど結果を忘れたので。)マシンは Xeon 5650×2 に QDR のカードを挿してスイッチ1段経由で接続(メーカーは全部 Mellanox)、OS は Scientific Linux 6.1 です。
計測方法
まずは純粋に Infiniband のスピードを測るために {rc|uc}_pingpong を回してスピードを測ってみます。
node01$ ibv_rc_pingpong -n 1000 -s メッセージサイズ node02$ ibv_rc_pingpong -n 1000 -s メッセージサイズ node02 node01$ ibv_uc_pingpong -n 1000 -s メッセージサイズ node02$ ibv_uc_pingpong -n 1000 -s メッセージサイズ node02
次に、MPI で pingpong のスピードを測ります。MPI(片側Send/片側Recv), MPI-prepost(片側IRecv/Barrier/片側Send), MPI-prepost-bidirec(両側からIRecv/Barrier/両側からISend)の3種類を測りました。MPIの実装は OpenMPI 1.4.3 です。
結果
予想はしていましたがrcとucの違いはほとんどなくてrcでいいじゃん、という結論でした。
また、MPIは結構スピードのばらつきが激しくて、4MBぐらいのメッセージにしないと手法で結構バラつくなぁ、という感じでした。単位は全部 bps です。
メッセージサイズ | rc速度 | uc速度 | MPI | MPI(prepost) | MPI(prepost-bidirec) |
---|---|---|---|---|---|
32K | 18.9G | 18.7G | 3.2G | 13.8G | 5.4G |
64K | 21.4G | 21.4G | 5.2G | 16.1G | 11.9G |
128K | 22.9G | 23.0G | 3.4G | 18.7G | 15.0G |
256K | 23.8G | 23.8G | 8.0G | 19.7G | 17.1G |
512K | 24.2G | 24.2G | 14.0G | 20.6G | 17.6G |
1M | 24.4G | 24.4G | 15.9G | 21.0G | 18.4G |
2M | 24.6G | 24.6G | 17.0G | 21.3G | 13.8G |
4M | 24.6G | 24.6G | 17.8G | 21.1G | 18.4G |
おまけ1(IPoIBの速度測定)
iperf でIPoIB の速度測定をしてみました。パラメータは全部デフォルトで、5回の平均で13.6Gbits/secでした。(ばらつきほとんどなし)
おまけ2(SDPの速度測定)
iperf で SDP の速度測定をしてみました。パラメータは全部デフォルトで、5回の平均で9.2Gbits/secでした。(ばらつきほとんどなし) IPoIB より遅いじゃん!