NFSの書込み速度 (Ethernet 1000Base)

NFSは、Linuxでは標準的な共有ファイルシステムとなっています。
今回から数回に渡り、インターコネクトがNFSのパフォーマンスにどう影響が出るのか検証することにします。

■テスト環境
NFSサーバおよびNFSクライアント
MB: Supermicro X8DTi
Chipset: INTEL 5520
CPU: Xeon L5530 x2
MEM: 24GB (4GB DDR3-1333 Reg x 6)

インターコネクト
1000Base: オンボード (Intel 82576)

OS: CentOS 5.3 x86_64

■環境設定
NFSサーバ
kernelパラメータ ramdisk_size=20971520 で起動し、20GBのramdiskにext3ファイルシステムを構築して /mnt にマウントする。
/etc/exports 設定は以下とする。
/mnt   *(rw,sync,no_root_squash)

NFSクライアント
kernelパラメータ mem=1024m で起動し、OS上のメモリ容量を1GBとする。 (クライアント側のpagecache効果を少なくするため)

■テスト方法
200MBファイルを連続50回書出しをするスクリプトを用意する。

#!/bin/sh
LOOP=50
DIR=/mnt

COUNT=0
while [ $COUNT -lt $LOOP ]
do
dd if=/dev/zero of=$DIR/$COUNT bs=32768 count=6400
let COUNT=COUNT+1
done

このスクリプトをtimeコマンドの引数として実行しreal値から速度を算出する。

■事前テスト
NFSサーバ上でramdiskの書込み速度を計測する。
計測方法は同じスクリプトを使う。
[TABLE=3]
ディスク側の律速がこの値まではないことを前提とする。

■結果
[TABLE=2]

■評価
1000Base Ethernetは、ネットワーク性能測定ツール iperf では940Mbps程度となりbyteでは117.5MB/sとなる。
1000Base Ethernetでは、今回の結果は妥当と思われます。
次回は、IPoIB (infiniband) でテストをする予定です。

Infiniband の優位性

InfinibandがEthernetと比べてパフォーマンス向上には大変有利であることは以前の検証結果からも言えることです。
今回は、ホスト数が増えた場合にどの程度のシステムプロセス値の差が出るかを検証することにしました。

Intel Core i7は、Quad CoreですがIntel Hyper-Threading TechnologyによりOS上からは倍のCPUが認識できます。
今回のテストでは、分割数を多くすることでネットワーク負荷を高くすることを目的とするために、Intel Hyper-Threading Technologyで認識された論理CPUにもジョブを配分することにしました。

■テスト環境
計算ノード 10台
MB: Supermicro X8STi
Chipset: INTEL X58
CPU: Intel Core i7 920
MEM: 12GB (2GB DDR3-1066 x 6)

インターコネクト
1000Base: オンボード (Intel 82574L)
Infiniband: Mellanox MHGS18-XTC (DDR)

ベンチマーク
MPI: openMPI
Compiler: gcc 4.1.2
Benchmark: himenoBMTxp
Size: XL

■テスト方法
N=80で姫野ベンチを実行し、投入ホストにてtopコマンドでシステムプロセス値を比較

■結果
1000Base: 23-25%程度

Infiniband: 0-0.3%程度

評価
1000Base Ethernetでは、おおよそ23%のCPUリソースがシステムプロセスとして消費してしまう。
特に多計算ノードによるMPIな流体計算では、このCPUリソースを計算に使えることができるinfinibandを選択することは必須と感じた。