ネットワークブロックデバイスの実験

このサーバがnfsのエラーが出まくるので、他の方法を考えてみた。

今まで、OCFS2をいろいろ試してみていたのだが、どうも安定しない。安定しない一番の原因は、どうやらネットワークブロックデバイスの動作に問題があるらしい。この辺をテストしてみた。

テストと言っても、パフォーマンス測定。ダメならコケるということで、安定性もある程度わかるw

準備

ファイルサーバにテスト用の空間を作る。

実空間を作ると時間がかかるので、スパースなファイルを作って使う。

# dd if=/dev/zero of=home.img bs=1M seek=700000 count=0

まぁこれは先物取引やっているようなものなので、後で借りを返すことになるのだけど。

イメージをnfsで使った場合

準備で用意した空間を、nfs経由でmountして使ってみる。

# mkreiserfs [nfs mountした先のイメージ]
# mount -o loop [nfs mountした先のイメージ] /mnt
# cp -av [テスト用ディレクトリ] /mnt

テスト用には私のホームディレクトリを使った。imapで使うmhフォルダが主で、細かいファイルがいっぱいある。絶対値にはあまり意味がないが、基準ということで結果を書いておく。

real	85m24.437s
user	0m6.044s
sys	1m7.392s

といったところ。

イメージを使わずにnfs mountしたディレクトリを使う場合

比較のためにイメージ等を使わないで、直接ディレクトリを使ってみる。

# mount [export されているディレクトリ] /mnt
# cp -av [テスト用ディレクトリ] /mnt
real	593m15.308s
user	0m0.660s
sys	0m10.817s

といったところ。途方もなく時間がかかる。

nbdを使った場合

イメージをnbdで見えるように設定して使ってみる。

# mount /dev/nbd0 /mnt
# cp -av [テスト用ディレクトリ] /mnt
real	81m59.892s
user	0m5.972s
sys	1m8.252s

わずかにnfsでイメージをmountした場合よりも速いのだが、ファイルサーバの負荷も一定ではないので、誤差の範囲だろう。問題は実験の後放置していたら、実験しているサーバ(ファイルサーバじゃない方)でdfしたらハングアップしてしまったこと。

結果

  • 現状の直接nfs mountはパフォーマンス的には論外
  • nbd + reiserfsはパフォーマンスはそこそこだが、安定性に問題あり過ぎ
  • イメージをnfsから使うのはダサいがパフォーマンスはそう悪くない

ということで、今までnfsで直接mountしていたものは、早急にイメージを作ってmountするようにした方が良さそう。問題はOCFS2のようなクラスタ系のfsではないから、あちこちでmountが出来ないこと。まぁ主サーバ以外では「ちょっといじる」のが主なので、必要があれば主サーバからexportすれば対応出来る。

問題はファイルサーバのファイルの上にさらにfsを重ねることになって、ファイルサーバがクラッシュした時に面倒なことになりそうなこと。まぁこれは他の方法でも同じ問題を持っているから、諦めてそれなりの対応をした方が良いのかも知れない。

PS.

ちなみに、loop back mountしたローカルなファイルに対して同じcpを行った場合、

real	30m50.043s
user	0m8.173s
sys	3m16.260s

となった。処理時間のうち、約6割程度がネットワークの処理だということらしい。