2012年2月4日土曜日

GlusterFS+mhddfsの書き込み速度の検証


mhddfs→GlusterFSと、FUSEを2回通ることによるパフォーマンスダウンが懸念されますので、簡単にベンチしてみました。

■別マシンの仮想サーバからネットワーク越しに書き込みテスト
○準備運動
[root@gluster01 storage]# dd if=/dev/zero of=/dev/null bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 0.153937 s, 6.8 GB/s

○mhddfsを通さずGlusterFSに直接書き込み
[root@gluster01 storage]# dd if=/dev/zero of=pair01/zero3 bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 22.86 s, 45.9 MB/s

○mhddfsを通してGlusterFSに書き込み
[root@gluster01 storage]# ls
pair01  pair02  pair03  pair04  storage01
[root@gluster01 storage]# dd if=/dev/zero of=storage01/zero4 bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 67.8727 s, 15.4 MB/s

■同一マシンのローカルで書き込みテスト
○準備運動
[root@kfs02 storage]# dd if=/dev/zero of=/dev/null bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 0.0946512 s, 11.1 GB/s

○mhddfsを通さずGlusterFSに直接書き込み
[root@kfs02 storage]# dd if=/dev/zero of=pair01/zero bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 47.8904 s, 21.9 MB/s

○mhddfsを通してGlusterFSに書き込み
[root@kfs02 storage]# dd if=/dev/zero of=mhddfs01/zero2 bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 45.7485 s, 22.9 MB/s

■結果まとめ
リモートとローカル、mhddfsの使用と不使用で、結果が全然違う。
ローカルの方が当然速いだろうと思いきや、リモートでmhddfs不使用がダントツで速い。でもmhddfsを通すと一気に遅くなる。
ローカルではmhddfsの使用不使用は関係なく、同じくらい遅い。
何度か繰り返しましたが、同等の結果が得られました。

■考察
意外な結果になりました。
リモートでmhddfsが遅くなるのは、ネットワークを経由することによるレイテンシ起因とかでしょうか。同期書き込みなら妥当な挙動かなぁ。
ローカルアクセスとリモートアクセスでGlusterFSの速度が段違いなのは、リモートでアクセスするとGlusterFSの処理がリモートとローカルに分割されるので高速化するとか、そんなところでしょうか。

○リモート/クライアント側
・mhddfsあり
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
15763 root      20   0  251m  20m 1424 S 106.7  6.6  66:46.59 glusterfs
15988 root      20   0  309m  960  384 S 19.9  0.3   0:39.16 mhddfs
18092 root      20   0  103m 1696  576 S  4.0  0.5   0:01.16 dd

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND          
15763 root      20   0  251m  20m 1424 S 24.3  6.6  67:42.98 glusterfs        
18134 root      20   0  103m 1700  580 S  4.3  0.5   0:00.68 dd              

○リモート/サーバ側
・mhddfsあり
    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 4654 root      20   0  410m  22m 1912 S 22.2  0.3  50:14.01 glusterfsd
 4658 root      20   0  410m  22m 1916 S 20.6  0.3  49:10.81 glusterfsd

・mhddfsなし
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 4654 root      20   0  412m  22m 1912 R 34.5  0.3  50:51.63 glusterfsd
 4658 root      20   0  412m  22m 1916 R 33.5  0.3  49:46.95 glusterfsd

○ローカル(ちなみにsystem負荷が高かったので、XFSの負荷も無視できないかも知れません)
・mhddfsあり
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
12848 root      20   0  230m  35m 2140 R 121.2  0.5   3:25.39 glusterfs
 4654 root      20   0  414m  22m 1912 S 55.1  0.3  52:43.88 glusterfsd
 4658 root      20   0  414m  22m 1916 S 50.8  0.3  51:36.55 glusterfsd
13092 root      20   0  309m  904  544 S 16.6  0.0   0:09.56 mhddfs
14460 root      20   0  103m 1688  568 S  5.6  0.0   0:00.50 dd

・mhddfsなし
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
12848 root      20   0  230m  35m 2116 R 103.8  0.5   2:36.40 glusterfs
 4658 root      20   0  414m  22m 1916 R 100.8  0.3  50:56.41 glusterfsd
 4654 root      20   0  414m  22m 1912 R 93.7  0.3  52:05.21 glusterfsd
14452 root      20   0  103m 1684  568 S 44.4  0.0   0:02.82 dd

■で、どうする?
遅いけど、まぁ、仕方ないよね。。データの初期コピーの最初だけ、mhddfsを通さずに実施したいと思います。
読み出しは、どの組み合わせでも70〜80MB/sくらい出るようなので問題視しないことにします。。

mhddfsが導入できないクライアントのための中継機能は、ストレージサーバ自体に持たせようと思います。mhddfsで束ねた領域をNFSでエクスポートしちゃうの。パフォーマンスが多少いいので。

0 件のコメント: