Gluster ベンチマーク

Gluster

分散ファイルシステムが注目されています。
複数の実装がありますが、今回はGlusterを動かしてみました。
Glusterは、クラウド環境やHPC環境にも使える分散ファイルシステムです。
ローカルファイルシステムをエクスポートし、メタデータサーバが存在しないのも大きな特徴です。
今回は、かなりリッチな環境なので、参考程度にしかならないかも。。。

■テスト環境
●Glusterサーバ 3台
CPU: x5675 2個
MEM: 72GB
RAID: Areca 1280
HDD: 3TB 24台 RAID6
Infinband: Mellanox_QDR
Ethernet: Intel 82574L

OS: Centos 5.5 x86_64
Local Filesystem: XFS
DFS: Gluster 3.2.4

●Glusterクライアント 3台
CPU: x5675 2個
MEM: 72GB
HDD: 2TB 1台 OS用
Infinband: Mellanox_QDR
Ethernet: Intel 82574L

OS: Centos 5.5 x86_64
MPI: mpich2, mvapich2
Benchmark: IOR

ベンチマークは、IORを使いました。
IORは、分散ファイルシステム向けのベンチマークプログラムです。
特徴としては、MPIを使った並列プロセスからのI/O測定ができます。
測定結果は最大値で出てくるようです。(Max Write, Max Read)
IORのパラメータが妥当かどうか?の問題がありますが、ネット上にあった情報を元にして実行しました。
使ってみてわかったのですが、IORは実行側ホストのキャッシュをほとんど使わないようです。
比較は以下としました。

Gigabit ストライプ型(72GBメモリ) VS infiniband ストライプ型(72GBメモリ)
infiniband ストライプ型(2GBメモリ) VS infiniband ストライプ型(72GBメモリ)
infiniband ストライプ型(72GBメモリ) VS infiniband 分散型(72GBメモリ)
infiniband ストライプ型(2GBメモリ) VS infiniband 分散型(2GBメモリ)
infiniband ストライプ型(72GBメモリ 36プロセス) VS infiniband ストライプ型(72GBメモリ 72プロセス)
infiniband ストライプ型 3台(72GBメモリ 36プロセス実行) VS infiniband ストライプ型 2台(72GBメモリ 36プロセス実行)

■fuseについて
Glusterはfuseを使いマウントをしている。
fuseはOS標準を使うことができるが、glusterからチューニングされたfuseが入手できる。

72プロセスにすると、infinbandでもMax Writeの値がだいぶ落ちてくる。
これでfuseの差が出るかを見てみる。

●fuseは、centos標準
# mpiexec -launcher rsh -f mvapich2host -n 72 /home/work/bin/IOR -a MPIIO -b 4g -t 4m -i 1 -F -o /gluster/output
結果(Infinband)
Operation Max (MiB) Min (MiB) Mean (MiB) Std Dev Max (OPs) Min (OPs) Mean (OPs) Std Dev Mean (s)Op grep #Tasks tPN reps fPP reord reordoff reordrand seed segcnt blksiz xsize aggsize
——— ——— ——— ———- ——- ——— ——— ———- ——- ——-
write 233.77 233.77 233.77 0.00 58.44 58.44 58.44 0.001261.54440 72 24 1 1 0 1 0 0 1 0 4194304 309237645312 -1 MPIIO EXCEL
read 2829.12 2829.12 2829.12 0.00 707.28 707.28 707.28 0.00 104.24172 72 24 1 1 0 1 0 0 1 0 4194304 309237645312 -1 MPIIO EXCEL

Max Write: 233.77 MiB/sec (245.13 MB/sec)
Max Read: 2829.12 MiB/sec (2966.54 MB/sec)

●fuseは、gluster-fuse
# mpiexec -launcher rsh -f mvapich2host -n 72 /home/work/bin/IOR -a MPIIO -b 4g -t 4m -i 1 -F -o /gluster/output
peration Max (MiB) Min (MiB) Mean (MiB) Std Dev Max (OPs) Min (OPs) Mean (OPs) Std Dev Mean (s)Op grep #Tasks tPN reps fPP reord reordoff reordrand seed segcnt blksiz xsize aggsize
——— ——— ——— ———- ——- ——— ——— ———- ——- ——-
write 262.79 262.79 262.79 0.00 65.70 65.70 65.70 0.001122.22525 72 24 1 1 0 1 0 0 1 0 4194304 309237645312 -1 MPIIO EXCEL
read 2814.13 2814.13 2814.13 0.00 703.53 703.53 703.53 0.00 104.79704 72 24 1 1 0 1 0 0 1 0 4194304 309237645312 -1 MPIIO EXCEL

Max Write: 262.79 MiB/sec (275.56 MB/sec)
Max Read: 2814.13 MiB/sec (2950.82 MB/sec)

Max Writeが12%程度上がった。
fuseはOS標準のfuseよりGlusterからダウンロードしたものを使うのが良い。

■ベンチマーク
———-
Gluster ストライプ型 (ethernet gigabit)
ファイルサーバ メモリ72GB
MPIライブラリ mpich2

[work@gluster5 ~]$ mpiexec -launcher rsh -iface eth0 -f mpich2host -n 36 /home/work/bin/IOR -a MPIIO -b 4g -t 4m -i 1 -F -o /gluster/output
IOR-2.10.2: MPI Coordinated Test of Parallel I/O

Run began: Mon Dec 19 12:49:50 2011
Command line used: /home/work/bin/IOR -a MPIIO -b 4g -t 4m -i 1 -F -o /gluster/outputMachine: Linux gluster5

Summary:
api = MPIIO (version=2, subversion=2)
test filename = /gluster/output
access = file-per-process
ordering in a file = sequential offsets
ordering inter file= no tasks offsets
clients = 36 (12 per node)
repetitions = 1
xfersize = 4 MiB
blocksize = 4 GiB
aggregate filesize = 144 GiB

Operation Max (MiB) Min (MiB) Mean (MiB) Std Dev Max (OPs) Min (OPs) Mean (OPs) Std Dev Mean (s)Op grep #Tasks tPN reps fPP reord reordoff reordrand seed segcnt blksiz xsize aggsize
——— ——— ——— ———- ——- ——— ——— ———- ——- ——-
write 203.89 203.89 203.89 0.00 50.97 50.97 50.97 0.00 723.22218 36 12 1 1 0 1 0 0 1 0 4194304 154618822656 -1 MPIIO EXCEL
read 209.22 209.22 209.22 0.00 52.30 52.30 52.30 0.00 704.80554 36 12 1 1 0 1 0 0 1 0 4194304 154618822656 -1 MPIIO EXCEL

Max Write: 203.89 MiB/sec (213.79 MB/sec)
Max Read: 209.22 MiB/sec (219.38 MB/sec)

Run finished: Mon Dec 19 13:13:56 2011

———-
Gluster ストライプ型 (infiniband QDR)
ファイルサーバ メモリ72GB
MPIライブラリ mvapich2

[work@gluster5 ~]$ mpiexec -launcher rsh -f mvapich2host -n 36 /home/work/bin/IOR -a MPIIO -b 4g -t 4m -i 1 -F -o /gluster/output
IOR-2.10.2: MPI Coordinated Test of Parallel I/O

Run began: Mon Dec 19 12:18:54 2011
Command line used: /home/work/bin/IOR -a MPIIO -b 4g -t 4m -i 1 -F -o /gluster/outputMachine: Linux gluster5

Summary:
api = MPIIO (version=2, subversion=2)
test filename = /gluster/output
access = file-per-process
ordering in a file = sequential offsets
ordering inter file= no tasks offsets
clients = 36 (12 per node)
repetitions = 1
xfersize = 4 MiB
blocksize = 4 GiB
aggregate filesize = 144 GiB

Operation Max (MiB) Min (MiB) Mean (MiB) Std Dev Max (OPs) Min (OPs) Mean (OPs) Std Dev Mean (s)Op grep #Tasks tPN reps fPP reord reordoff reordrand seed segcnt blksiz xsize aggsize
——— ——— ——— ———- ——- ——— ——— ———- ——- ——-
write 2475.39 2475.39 2475.39 0.00 618.85 618.85 618.85 0.00 59.56869 36 12 1 1 0 1 0 0 1 0 4194304 154618822656 -1 MPIIO EXCEL
read 2701.51 2701.51 2701.51 0.00 675.38 675.38 675.38 0.00 54.58275 36 12 1 1 0 1 0 0 1 0 4194304 154618822656 -1 MPIIO EXCEL

Max Write: 2475.39 MiB/sec (2595.64 MB/sec)
Max Read: 2701.51 MiB/sec (2832.74 MB/sec)

Run finished: Mon Dec 19 12:20:56 2011

———-
Gluster ストライプ型 (infiniband QDR)
ファイルサーバ メモリ2GB
MPIライブラリ mvapich2

[work@gluster5 ~]$ mpiexec -launcher rsh -f mvapich2host -n 36 /home/work/bin/IOR -a MPIIO -b 4g -t 4m -i 1 -F -o /gluster/output
IOR-2.10.2: MPI Coordinated Test of Parallel I/O

Run began: Mon Dec 19 16:29:59 2011
Command line used: /home/work/bin/IOR -a MPIIO -b 4g -t 4m -i 1 -F -o /gluster/outputMachine: Linux gluster5

Summary:
api = MPIIO (version=2, subversion=2)
test filename = /gluster/output
access = file-per-process
ordering in a file = sequential offsets
ordering inter file= no tasks offsets
clients = 36 (12 per node)
repetitions = 1
xfersize = 4 MiB
blocksize = 4 GiB
aggregate filesize = 144 GiB

Operation Max (MiB) Min (MiB) Mean (MiB) Std Dev Max (OPs) Min (OPs) Mean (OPs) Std Dev Mean (s)Op grep #Tasks tPN reps fPP reord reordoff reordrand seed segcnt blksiz xsize aggsize
——— ——— ——— ———- ——- ——— ——— ———- ——- ——-
write 205.71 205.71 205.71 0.00 51.43 51.43 51.43 0.00 716.80098 36 12 1 1 0 1 0 0 1 0 4194304 154618822656 -1 MPIIO EXCEL
read 275.65 275.65 275.65 0.00 68.91 68.91 68.91 0.00 534.94492 36 12 1 1 0 1 0 0 1 0 4194304 154618822656 -1 MPIIO EXCEL

Max Write: 205.71 MiB/sec (215.71 MB/sec)
Max Read: 275.65 MiB/sec (289.04 MB/sec)

Run finished: Mon Dec 19 16:51:30 2011

———-
Gluster 分散型 (infiniband QDR)
ファイルサーバ メモリ72GB
MPIライブラリ mvapich2

[work@gluster5 ~]$ mpiexec -launcher rsh -f mvapich2host -n 36 /home/work/bin/IOR -a MPIIO -b 4g -t 4m -i 1 -F -o /gluster/output
IOR-2.10.2: MPI Coordinated Test of Parallel I/O

Run began: Mon Dec 19 15:58:29 2011
Command line used: /home/work/bin/IOR -a MPIIO -b 4g -t 4m -i 1 -F -o /gluster/outputMachine: Linux gluster5

Summary:
api = MPIIO (version=2, subversion=2)
test filename = /gluster/output
access = file-per-process
ordering in a file = sequential offsets
ordering inter file= no tasks offsets
clients = 36 (12 per node)
repetitions = 1
xfersize = 4 MiB
blocksize = 4 GiB
aggregate filesize = 144 GiB

Operation Max (MiB) Min (MiB) Mean (MiB) Std Dev Max (OPs) Min (OPs) Mean (OPs) Std Dev Mean (s)Op grep #Tasks tPN reps fPP reord reordoff reordrand seed segcnt blksiz xsize aggsize
——— ——— ——— ———- ——- ——— ——— ———- ——- ——-
write 1936.59 1936.59 1936.59 0.00 484.15 484.15 484.15 0.00 76.14225 36 12 1 1 0 1 0 0 1 0 4194304 154618822656 -1 MPIIO EXCEL
read 2008.95 2008.95 2008.95 0.00 502.24 502.24 502.24 0.00 73.39951 36 12 1 1 0 1 0 0 1 0 4194304 154618822656 -1 MPIIO EXCEL

Max Write: 1936.59 MiB/sec (2030.66 MB/sec)
Max Read: 2008.95 MiB/sec (2106.54 MB/sec)

Run finished: Mon Dec 19 16:01:05 2011

———-
Gluster 分散型 (infiniband QDR)
ファイルサーバ メモリ2GB
MPIライブラリ mvapich2

[work@gluster5 ~]$ mpiexec -launcher rsh -f mvapich2host -n 36 /home/work/bin/IOR -a MPIIO -b 4g -t 4m -i 1 -F -o /gluster/output
IOR-2.10.2: MPI Coordinated Test of Parallel I/O

Run began: Mon Dec 19 16:16:12 2011
Command line used: /home/work/bin/IOR -a MPIIO -b 4g -t 4m -i 1 -F -o /gluster/outputMachine: Linux gluster5

Summary:
api = MPIIO (version=2, subversion=2)
test filename = /gluster/output
access = file-per-process
ordering in a file = sequential offsets
ordering inter file= no tasks offsets
clients = 36 (12 per node)
repetitions = 1
xfersize = 4 MiB
blocksize = 4 GiB
aggregate filesize = 144 GiB

Operation Max (MiB) Min (MiB) Mean (MiB) Std Dev Max (OPs) Min (OPs) Mean (OPs) Std Dev Mean (s)Op grep #Tasks tPN reps fPP reord reordoff reordrand seed segcnt blksiz xsize aggsize
——— ——— ——— ———- ——- ——— ——— ———- ——- ——-
write 1102.60 1102.60 1102.60 0.00 275.65 275.65 275.65 0.00 133.73433 36 12 1 1 0 1 0 0 1 0 4194304 154618822656 -1 MPIIO EXCEL
read 447.15 447.15 447.15 0.00 111.79 111.79 111.79 0.00 329.76871 36 12 1 1 0 1 0 0 1 0 4194304 154618822656 -1 MPIIO EXCEL

Max Write: 1102.60 MiB/sec (1156.16 MB/sec)
Max Read: 447.15 MiB/sec (468.87 MB/sec)

Run finished: Mon Dec 19 16:23:57 2011

———-
Gluster ストライプ型 2台(infiniband QDR)
ファイルサーバ メモリ72GB
MPIライブラリ mvapich2

[work@gluster5 ~]$ mpiexec -launcher rsh -f mvapich2host -n 36 /home/work/bin/IOR -a MPIIO -b 4g -t 4m -i 1 -F -o /gluster/output
IOR-2.10.2: MPI Coordinated Test of Parallel I/O

Run began: Mon Dec 19 21:11:29 2011
Command line used: /home/work/bin/IOR -a MPIIO -b 4g -t 4m -i 1 -F -o /gluster/outputMachine: Linux gluster5

Summary:
api = MPIIO (version=2, subversion=2)
test filename = /gluster/output
access = file-per-process
ordering in a file = sequential offsets
ordering inter file= no tasks offsets
clients = 36 (12 per node)
repetitions = 1
xfersize = 4 MiB
blocksize = 4 GiB
aggregate filesize = 144 GiB

Operation Max (MiB) Min (MiB) Mean (MiB) Std Dev Max (OPs) Min (OPs) Mean (OPs) Std Dev Mean (s)Op grep #Tasks tPN reps fPP reord reordoff reordrand seed segcnt blksiz xsize aggsize
——— ——— ——— ———- ——- ——— ——— ———- ——- ——-
write 968.56 968.56 968.56 0.00 242.14 242.14 242.14 0.00 152.24190 36 12 1 1 0 1 0 0 1 0 4194304 154618822656 -1 MPIIO EXCEL
read 1940.63 1940.63 1940.63 0.00 485.16 485.16 485.16 0.00 75.98366 36 12 1 1 0 1 0 0 1 0 4194304 154618822656 -1 MPIIO EXCEL

Max Write: 968.56 MiB/sec (1015.61 MB/sec)
Max Read: 1940.63 MiB/sec (2034.90 MB/sec)

Run finished: Mon Dec 19 20:32:40 2011

■比較と評価
●Gigabit ストライプ型(72GBメモリ) VS infiniband ストライプ型(72GBメモリ)

・Gigabit ストライプ型(72GBメモリ)
Max Write: 203.89 MiB/sec (213.79 MB/sec)
Max Read: 209.22 MiB/sec (219.38 MB/sec)

・infiniband ストライプ型(72GBメモリ)
Max Write: 2475.39 MiB/sec (2595.64 MB/sec)
Max Read: 2701.51 MiB/sec (2832.74 MB/sec)

gigabitとinfinibandの差は言うまでもありません。
infinbandで10倍以上の向上です。
しかしgigabitでも、200MB/s以上になっているのは、Glusterサーバ側のキャッシュ効果が出ているのではないか?

●infiniband ストライプ型(2GBメモリ) VS infiniband ストライプ型(72GBメモリ)

・infiniband ストライプ型(2GBメモリ)
Max Write: 205.71 MiB/sec (215.71 MB/sec)
Max Read: 275.65 MiB/sec (289.04 MB/sec)

・infiniband ストライプ型(72GBメモリ)
Max Write: 2475.39 MiB/sec (2595.64 MB/sec)
Max Read: 2701.51 MiB/sec (2832.74 MB/sec)

infinibandでも、Glusterサーバ側のメモリが少ないと大きくスコアが落ちた。
Glusterサーバ側のキャッシュ効果はローカルファイルシステムの部分で重要な要素となっている。

●infiniband ストライプ型(72GBメモリ) VS infiniband 分散型(72GBメモリ)

・infiniband ストライプ型(72GBメモリ)
Max Write: 2475.39 MiB/sec (2595.64 MB/sec)
Max Read: 2701.51 MiB/sec (2832.74 MB/sec)

・infiniband 分散型(72GBメモリ)
Max Write: 1936.59 MiB/sec (2030.66 MB/sec)
Max Read: 2008.95 MiB/sec (2106.54 MB/sec)

ストライブ型のほうが25%~33%くらい速い。

●infiniband ストライプ型(2GBメモリ) VS infiniband 分散型(2GBメモリ)

・infiniband ストライプ型(2GBメモリ)
Max Write: 205.71 MiB/sec (215.71 MB/sec)
Max Read: 275.65 MiB/sec (289.04 MB/sec)

・infiniband 分散型(2GBメモリ)
Max Write: 1102.60 MiB/sec (1156.16 MB/sec)
Max Read: 447.15 MiB/sec (468.87 MB/sec)

Glusterサーバ側のメモリが少ないと分散型のほうが良いスコアが出た。
Max Writeが大きく向上している。

●infiniband ストライプ型(72GBメモリ 36プロセス) VS infiniband ストライプ型(72GBメモリ 72プロセス)

・infiniband ストライプ型(72GBメモリ 36プロセス)
Max Write: 2475.39 MiB/sec (2595.64 MB/sec)
Max Read: 2701.51 MiB/sec (2832.74 MB/sec)

・infiniband ストライプ型(72GBメモリ 72プロセス)
Max Write: 262.79 MiB/sec (275.56 MB/sec)
Max Read: 2814.13 MiB/sec (2950.82 MB/sec)

プロセス数 36と72では、Max Writeが下がった。並列数が多くなれば負荷が上がり影響が出ている。

●infiniband ストライプ型 3台(72GBメモリ 36プロセス実行) VS infiniband ストライプ型 2台(72GBメモリ 36プロセス実行)

・infiniband ストライプ型 3台(72GBメモリ 36プロセス実行)
Max Write: 2475.39 MiB/sec (2595.64 MB/sec)
Max Read: 2701.51 MiB/sec (2832.74 MB/sec)

・infiniband ストライプ型 2台(72GBメモリ 36プロセス実行)
Max Write: 968.56 MiB/sec (1015.61 MB/sec)
Max Read: 1940.63 MiB/sec (2034.90 MB/sec)

2台になるとMax Writeが60%劣化した。
サーバを増やすことで並列I/Oへの帯域は増やせそうだ。

■全体評価
Glusterのパフォーマンスは以下が効果的と思われる。
多くのメモリを搭載(キャッシュ効果)
Glusterサーバの増設(並列効果)

いずれにしても、目的を明確にすることが構成選択への最初の一歩ですね。

以上