Friday, October 28, 2016

CESM on 10GbE vs Infiniband

CESM是一個大氣科學的計算模型, 不過我不會假裝我知道裡面在幹嘛XD
這裡主要紀錄一下最近遇到的狀況: 在10GbE上面跑超慢的.

這是我第一次在10GbE的系統上裝CESM 1.0.6
測試用的case是 -res 1.9x2.5_gx1v6 -compset B_2000.
幾個發現:

1. 會挑Compiler跟MPI版本.
這邊試了 Intel compiler 17.0跟13.1, 還有分別用兩種compiler編的OpenMPI 1.8.8 與 MPICH 3.2.
NetCDF都是用4.4.1 + Fortran 4.4.4.
在沒有使用pNetCDF的情形下, 4種組合只有Intel 13.1 + OpenMPI可以跑multi-node.
MPICH 3.2搭兩種Intel compiler, 跑multi-node會卡住, 但是跑single-node的話沒有問題.
OpenMPI 1.8.8 搭 Intel 17.0的話, 編譯階段會失敗.
(補充: 後來嘗試用舊一點的MPICH 3.1.2, 結果搭兩個版本的Intel compiler, 都可以正常跑multi-node沒問題.)

2. 10GbE慢到爆炸
用3個node+10GbE的話, 只有1個node的1.48倍速度orz
換算效率不到50%... 悲劇

3. 瓶頸分析
本來以為是檔案I/O, 因為scratch是放在一台GbE(不是10GbE)的NFS主機上.
但是仔細看可以發現, CESM MPI運算中的傳輸量只有約50MB/s, 算完尾巴在寫檔案的時候有到100MB/s. 這兩個都離10GbE的極限還有很大的差距...
右邊是dd via NFS寫入, 不過這速度要考慮到cache就是了, 至少表示網路可以跑到那個速度.
然後CPU的system使用率(紅色)很高, 表示CPU都在等網路.
妙的是, 用HPL下去測沒有這個現象 (MPI 500MB/s+), 所以這是CESM的特性.

4. 對照組
另一套機器雖然比較舊一點, 但是是用Infiniband 40Gb/s.
相同的CESM版本, 相同的Intel compiler, 稍舊一點的OpenMPI 1.6.3, 相同的case
用3個node跑的速度, 是1個node的2.6倍, 換算效率86%
然後算完時的檔案I/O約100MB/s... 所以很明顯, 瓶頸是在MPI上.

5. 結論
要算multi-node的CESM請用Inifniband = =

No comments: