万人のためのハイパフォーマンスコンピューティング

HPC Do It Yourself Club

      HOMEE5-2600v3製品情報お役立ち情報購入案内お問い合わせ会社案内
      ムービーダウンロードドキュメント最新トピックスおもしろLinkHPCノウハウ

4 Node FDR Infiniband Cluster性能評価
OpenMPIとOpenMPのHybrid実行でのMustオプション
OpenMPIで別ノードの環境変数をセットするには

InfiniBand QDR vs. Gb Ethernet

その3の4:NFSでの速度比較 Readで

(最新のドライバーでの性能比較はコチラ

(FDR Infinibandでの性能評価はコチラ

前回の記事からの続き
 前置きが長くなったが、準備が整ったので、NFSでのファイルの読み書き速度を、InfiniBandとGigabit Ethernetで比較してみよう。書いていたら時間がなくなったので、この記事では、読み出し速度についてだけとし、書き込み速度は、次の記事で書く。

 NFSの前に、直接読み書きの速度を測定しておこう。
 まずハードディスクから測定する。10GBのファイルを書き込み、その時間を測定する。
[root@hpc01 hdd]# cd /hdd
[root@hpc01 hdd]# time dd if=/dev/zero of=zero1 bs=1G count=10
10+0 records in
10+0 records out
10737418240 bytes (11 GB) copied, 6.40759 s, 1.7 GB/s

real 0m6.425s
user 0m0.000s
sys 0m6.412s
非常に短時間で書き込みが終了してしまう。HDDへ実際に書き込まれたのではなく、メモリーがキャッシュとして使われ、そこに書き込まれるとコマンドが終了してしまうからだ。このコンピュータhpc01には、メモリーが256GB実装されている。何もプログラムを実行していない時、メモリーのほとんどが、キャッシュとして使われる。かなり大きなファイルでも、キャッシュに全部入ってしまう。HDDへの実際の書き込みはいつ行われるのだろうか。ディスクアクセスLEDを見ていると、上記のコマンドの終了直後に、HDDへの書き込みが始まることがわかる。直後にsyncコマンドを実行すれば、それが終わる時が、キャッシュをHDDに書き込み終わった時だ。
 別の10GBのファイルのキャッシュへの書き込み時間と、直後のsyncの時間を測定する。
[root@hpc01 hdd]# time dd if=/dev/zero of=zero2 bs=1G count=10; time sync
10+0 records in
10+0 records out
10737418240 bytes (11 GB) copied, 6.40273 s, 1.7 GB/s

real 0m6.406s
user 0m0.000s
sys 0m6.405s

real 1m14.895s
user 0m0.001s
sys 0m0.002s
6.4秒がキャッシュ書き込み時間で、1分15秒がsyncの時間だ。キャッシュ書き込みとsyncの合計時間と、syncのみの時間のどちらを、真の書き込み時間だろうか。サイズが大きなファイルの場合、キャッシュへの書き込みとsyncは同時並行して行われるだろう。その場合、トータル時間はより長いsyncの時間となる。従って、syncの時間で書き込み速度を算出することにする。HDD単体の書き込み速度は、10737418240 bytes/75 s = 約143MB/sになった。
 次にHDD単体での読み出し速度を測定する。そのまま行うとキャッシュから読み出されて、
[root@hpc01 hdd]# time dd if=zero2 of=/dev/null
20971520+0 records in
20971520+0 records out
10737418240 bytes (11 GB) copied, 6.05255 s, 1.8 GB/s

real 0m6.054s
user 0m1.225s
sys 0m4.828s
実際の速度にならない。キャッシュのクリアを行なってから、読み出さなければならない。キャッシュにどれだけ使われているかなどの情報は、freeコマンドで見ることが出来る。
[root@hpc01 hdd]# free
total used free shared buffers cached
Mem: 264511552 24311636 240199916 0 7564 21030084
-/+ buffers/cache: 3273988 261237564
Swap: 522072 0 522072
数字はKBだ。-mオプションでMBで表示される。
[root@hpc01 hdd]# free -m
total used free shared buffers cached
Mem: 258312 23741 234570 0 7 20537
-/+ buffers/cache: 3197 255114
Swap: 509 0 509
20GBほどキャッシュされていることがわかる。10GBのファイルを2個書き込んだので、それがそのままキャッシュされているのだろう。キャッシュをクリアするには、
[root@hpc01 hdd]# echo 3 >/proc/sys/vm/drop_caches 
を実行すればいい。free -mで結果を見ると、
[root@hpc01 hdd]# free -m
total used free shared buffers cached
Mem: 258312 2928 255383 0 1 51
-/+ buffers/cache: 2876 255436
Swap: 509 0 509
となり、先ほどのファイルはキャッシュされていないことがわかる。
 この状態で、再び読み出しの時間を測定すると、
[root@hpc01 hdd]# !time
time dd if=zero2 of=/dev/null
20971520+0 records in
20971520+0 records out
10737418240 bytes (11 GB) copied, 73.5986 s, 146 MB/s

real 1m13.709s
user 0m2.181s
sys 0m9.425s
となり、HDD単体の読み出し速度は146 MB/sとなった。
 同様にssdでの書き込み速度を測定する。
[root@hpc01 hdd]# cd /ssd
[root@hpc01 ssd]# time dd if=/dev/zero of=zero1 bs=1G count=10; time sync
10+0 records in
10+0 records out
10737418240 bytes (11 GB) copied, 6.35114 s, 1.7 GB/s

real 0m6.354s
user 0m0.000s
sys 0m6.353s

real 0m13.535s
user 0m0.000s
sys 0m0.004s
SSDの書き込み速度は、10737418240 bytes / 13.535s = 771MB/sになった。
 キャッシュをクリアして、読み出しを行う。
[root@hpc01 ssd]# !echo
echo 3 >/proc/sys/vm/drop_caches 
[root@hpc01 ssd]# time dd if=zero1 of=/dev/null
20971520+0 records in
20971520+0 records out
10737418240 bytes (11 GB) copied, 13.9063 s, 772 MB/s

real 0m14.017s
user 0m1.472s
sys 0m6.899s
SSDの読み出し速度は、772MB/sになった。

 さていよいよNFSでの速度比較だ。NFSのサーバーであるhpc01のキャッシュをクリアしておく。その後、hpc02に移り速度を計測する。
[root@hpc01 ssd]# echo 3 >/proc/sys/vm/drop_caches 
[root@hpc01 ssd]# ssh hpc02
[root@hpc02 ~]# cd /nfs
[root@hpc02 nfs]# ls
hdd hddib ssd ssdib
[root@hpc02 nfs]# cd hdd
[root@hpc02 hdd]# ls
zero1 zero2
hpc02にloginし、/nfs/hddに移る。このディレクトリは、hddがGigabit Ethernet経由でマウントされている。先ほど直接書き込んだ10GBのファイルを読み出し、速度を測定する。キャッシュは使ってないので、クリアする必要はない。
[root@hpc02 hdd]# time dd if=zero1 of=/dev/null
20971520+0 records in
20971520+0 records out
10737418240 bytes (11 GB) copied, 92.132 s, 117 MB/s

real 1m32.146s
user 0m1.620s
sys 0m7.385s
Gigabit Etherne経由のHDD読み出し速度は、117 MB/sになった。
 次に、/nfs/ssdに移る。先ほど直接書き込んだ10GBのファイルを読みだす。
[root@hpc02 hdd]# cd /nfs/ssd
[root@hpc02 ssd]# ls
zero1
[root@hpc02 ssd]# !time:p
time dd if=zero1 of=/dev/null
[root@hpc02 ssd]# time dd if=zero1 of=/dev/null
20971520+0 records in
20971520+0 records out
10737418240 bytes (11 GB) copied, 90.5389 s, 119 MB/s

real 1m30.554s
user 0m1.590s
sys 0m7.156s
Gigabit Etherne経由のSSD読み出し速度は、119 MB/sになった。
 上の2つの測定でわかることは、Gigabit Ethernetの速度は、HDD単体の速度よりも遅いということだ。HDD単体より速いファイルサーバーを使っているなら(ほとんどのファイルサーバーはそうだろうが)、Gigabit Ethernetではその高速性を殺してしまう。速いファイルサーバーを持っていても、宝の持ち腐れになってしまう。
 これに対し、IPOIBではどうなるだろうか。遅いHDDの速度を調べても意味が無いので、SSDのみを計測する。念のため、hpc01とhpc02のキャッシュをクリアする。
[root@hpc02 ssdib]# ssh hpc01 echo 3 >/proc/sys/vm/drop_caches 
[root@hpc02 ssdib]# echo 3 >/proc/sys/vm/drop_caches 
SSDがIPOIBでマウントされている、/nfs/ssdibに移る。
[root@hpc02 ~]# cd /nfs
[root@hpc02 nfs]# ls
hdd hddib ssd ssdib
[root@hpc02 nfs]# cd ssdib
直接書き込んだ、2つのファイルを読み出し、速度を測定する。
[root@hpc02 ssdib]# dd if=zero1 of=/dev/null
20971520+0 records in
20971520+0 records out
10737418240 bytes (11 GB) copied, 13.5754 s, 791 MB/s
[root@hpc02 ssdib]# dd if=zero2 of=/dev/null
20971520+0 records in
20971520+0 records out
10737418240 bytes (11 GB) copied, 13.3012 s, 807 MB/s
IPOIB経由のSSD読み出し速度は、平均799MB/sになった。この速度は、IPOIBより遅いSSDの速度で抑えられている。試しに、hpc01のキャッシュを読みだしてみる。それには、hpc02のキャッシュのみをクリアし、同じ読み出しを実行すればいい。
[root@hpc02 ssdib]# !echo
echo 3 >/proc/sys/vm/drop_caches 
[root@hpc02 ssdib]# !dd
dd if=zero2 of=/dev/null
20971520+0 records in
20971520+0 records out
10737418240 bytes (11 GB) copied, 9.7056 s, 1.1 GB/s
IPOIB経由のメモリーキャッシュの読み出し速度は、1.1GB/sになった。これくらい高速であれば、高級ファイルサーバーの機能を遺憾なく発揮できるのではないだろうか。InfiniBand製品については、コチラ
 もっと高速なファイルサーバーがあった場合、これ以上速くなるのかどうかは、私は試したことがないのでわからない。試す機会があったら、また記事を書こう。

書き込み速度については次の記事

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Copyright (C) HPCシステムズ株式会社. All Rights Reserved.