ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

LinuxコミュのNFSのチューニングについて

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして、mogと申します。
NFSに関してご相談がありまして、トピックを立てさせていただきました。

NFSv4を用いて、今までのNFS環境を刷新しようと思い、
まずはベンチを取ろうとしているのですが、
NFSの転送速度が思ったよりも出ない、という問題を抱えております。
NFSの使用目的としては、学術計算の入出力で、
入力出力ともに10G〜100G程度の大きさのバイナリデータです。

HPCテクノロジーズのレポート
(http://www.hpc-technologies.co.jp/benchmarks-storage/fileserver-basictest-bonding-test.html)
に、NFSv4とBondingで書き込み100MB/sオーバーが出るとあるのですが、
どうやっても50MB/s程度しかでません。

カーネルやNFSのチューニング、ネットワークの構築、
その他、注意点やアドバイスなどありましたら、
教えていただけませんでしょうか?


状況を説明します。

2台の後述する構成のサーバを用意し、
片方をNFSサーバ、片方をNFSクライアントとし、
後述する設定でサーバを立ち上げ、クライアントから/mnt/nfsにマウントします。

クライアント側で
dd if=/dev/zero of=/mnt/nfs/50G.img bs=1M count=50k
で50GBのファイルをNFSサーバ上に作成し、そのときのddからの申告値をNFSの書き込み速度とします。
さらに、クライアント側で
dd if=/mnt/nfs/50G.img of=/dev/null bs=1M
で50GBのファイルをNFSサーバ上から読み出し、そのときのddからの申告値をNFSの読み込み速度とします。
(このベンチの仕方は http://www.linux.or.jp/JF/JFdocs/NFS-HOWTO/performance.html を参考にしています)

ネットワーク設定は、Intel PRO/1000 PT DualPortをBonding(mode=0)して、
Cat6のケーブルでノード間を直結。


実験用ハードウェア構成
HP ML115
CPU Opteron1216 2.4GhzDualCore
Mem PC2-5300 ECC nonReg 8GB
OS用HDD SATA 80GB 7200rpm
ベンチ用HDD SATA 250G 7200rpm
MAXTOR 6L250S0*3のRAID0構成

NFSサーバ設定
NFSv4実験時
/nfsroot 192.168.1.0/24(rw,async,fsid=0,no_subtree_check,no_root_squash)
NFSv3実験時
/nfsroot 192.168.1.0/24(rw,async,no_subtree_check,no_root_squash)

NFSクライアント設定
NFSv4実験時
192.168.1.1:/ /mnt/nfs nfs4 rw,rsize=32768,wsize=32768,hard,intr,bg 0 0
NFSv3実験時
192.168.1.1:/nfsroot /mnt/nfs nfs rw,rsize=32768,wsize=32768,hard,intr,bg 0 0


NFSサーバノードのローカルディスク性能
書き込み:160MB/s
(dd if=/dev/zero of=/nfsroot/50G.img bs=1M count=50k による)
読み込み:190MB/s
(dd if=/nfsroot/50G.img of=/dev/null bs=1M による)


OS
Centos5.1 x86_64
(2008年3/31での最新Update適用済み)


ノード間通信速度(netperf2.4.1にて計測)

bondingなし
940Mbps
bonding(mode=0)
1600Mbps

コメント(13)

早速のレスありがとうございます。

>ショーイチさん
最初、OS用としている80GBのHDDで読み書きしていたときは、
まさにここがボトルネックになっていたので、250GBのHDD3玉をRAID0構成で束ねて解決しました。
tmpfsというか、キャッシュに乗る程度の大きさのファイル(5GB程度)ならば
Bondingしなくても、読み書きともに120MB/sでていたりします。
問題は、対称的な構成でRAMの大きさが同じで、サーバ側のキャッシュに乗る大きさにすると、
クライアント側のキャッシュにものってしまうという。。。。

クライアントのRAMを削って実験すればいいのかな?(’’

>L0k!Xさん
その方法だとローカルのディスクに一時ファイルというか、いったん書き出す必要がありますよね。
計算ノードのHDDにそれほどの容量的余裕がないのです。

swapが80GBの方に作成されている場合、そちらに引きずられそうな気がするのですけれど、その辺はどうなっているんでしょうか?
きっと試されているかと思いますが、noswapで起動した場合の速度はどうなります?
確か、CentOS5.1 kernelのNFSパフォーマンスが悪いって話だったと思います。
Bug Tracker辺りを参照してみては如何でしょうか。
http://bugs.centos.org/view.php?id=2635
皆さん、ありがとうございます。
いろいろと実験をしていたら遅くなってしまいました。

>来栖さん
noswapには考えがいたりませんでした!
ただ、freeで見てみる分には、ほぼswapは使われていないようです。

>ショーイチさん
NFSのチューニングは自信が無いのですが、
一応、マウントオプションとして、大きなrsize,wsizeをとるぐらいのことはしてみました。
ローカルのFSに引っ張られているのはあるかもしれません。50GBクラスになるとXFSのほうがいいのかな?
ethのMTUを弄る、というのはやってませんでした。

>Rayさん
なんと!ありがとうございます!

このスレッドで話題になっているのは、
2.6.18-53.1.4->2.6.18-53.1.6でNFSの挙動がおかしくなってるぜ!っていうことですよね?
スレッドの最後のcatselbowさんの書き込んでいる、
”そのパッチって現状どこにとりこまれてるの?”
に同感です(’’;
とりあえず、"hughesjr" kernelをつかって、実験してみます。

>ちほりん
InfinityBand!!!ぶ、ぶるじょあじー!
最近は10Gも普通にオプションに入ってきてますねー。Bondingすれば追いつくはず!w
L2SWはさっぱり見かけませんが。

Lusterはどうなんでしょう?GFSとともに非常に興味があるのですが。
あまり、資料を見かけないため、手を出せずいたりします。
なにか、良いチュートリアルなどありませんか?


>IBMのFAS+GFSとかHPのSFS
はあまり、そこにかけられるお金が潤沢ではないので。。。。;-(
> ただ、freeで見てみる分には、ほぼswapは使われていないようです。
使用量よりは使用頻度が大事かと。
いや、まあ、思いつきですが。
e1000ドライバ、rsize、wsize、ぢつはツボの値があったりします。大きくても、小さくても効率が悪くなったりします(^^;;。

NFSv4は、サーバー側の負荷が大きいですよね(^^;;。多数ノード構成だと、NFS鯖がヘヴィっす(T^T)。
infinibandは、PtoPならスイッチがいらないので、安く構築出来ますよ(^o^)。2ノード構成は、ぢつはかなりお勧めです(^o^)。

それから、Centまあ、Redhatでもそうなのですが、5.1は4.6より先にリリースされているので、ドライバ周り等の性能と安定性は4.6の方が良かったりします(^^;;。ものがIO周りなので、とってもありがちな気がします(^^;;。
>来栖さん
なるほど。ちょっとnoswapつけて実験してきます!

>snowdogさん
ツボですか(’’
どの辺りがキクんでしょう?;-)

NFSv4のサーバ負荷は自分も気になっていました。
ふつうにloadが10とかになってしまって、あー、NFSサーバはほかの仕事させられないなーと。
一対一でそんな状況なので、多対一だと性能劣化が心配です。。。。。
やっぱり、クアッドコア*2とかが最低ラインなのでしょうか?(’’

infinibandって、一対一ならお安いのですか(’’
というか、infinibandのスイッチっていくらぐらいするのだろう。。。。
ちょっと、実験が進んだので、ご報告を兼ねて相談させてください。

NFSv4サーバのあまりの負荷の大きさに、"これがボトルネック?"と思い、
サーバのスペックアップを行いました。

NFSv4サーバを
DELL PE1950III
CPU XeonL5310(1.6Ghz QuadCore) x2
Mem 32GB
HDD SATA 500GB 7200rpm *2 RAID0構成
Net Intel PRO/1000 PT DualPort
に変更したところ、(クライアントは変えず)

Write(without bonding) 70MB/s
Write(with bonding) 110MB/s

となりました。
これは非常に目標値に近い値です。
皆さんのおかげで到達できたことに感謝しております>w<


しかし、課題がもう一つ。
Readの速度が30MB/s程度で変わらないのです。

/etc/sysconfig/nfsのRPCNFSDCOUNTも16,32と増やしてみましたが、あまり劇的な変化は見られませんでした。

Diskからの直接読み込みは100MB/s程度でているので、Diskはボトルネックではないと思うのですが、
どうも、読み出すファイルの大きさを変えて実験をしていくと、
30GB以下の大きさのファイルならば、二度目の読み出しからは、100MB/s程度で読み出せているようなのです。

この現象は対象ファイルサイズが30GB→40GBでなくなるため、サーバ側のキャッシュの問題のような雰囲気です。

NFSの階層構造の中に、ディスクキャッシュ以外に、NFSのキャッシュみたいなものがあるのでしょうか?
また、そのNFSのキャッシュへの読み込みは低速なのでしょうか?

よろしく御願いいたします。
今まで頂いたアドバイスに関して、12の結果がでるまでの実験を踏まえてのお返事を!

>ショーイチさん
クライアントが同スペックだったときは試しようの無かった問題が、
サーバのスペックアップで可能になりました。
tmpfsによる実験。ぜひやってみます。
MTUとかジャンボフレームとかもやっぱり効いてくるのかなー?

>L0k!Xさん
NFSサーバのあまりの負荷の大きさに、たしかに、ほかの手段を用いるべきか、、と悩み始めました。
プログラムからはローカルのFSと同じように扱えるのが非常に魅力的なのですが。。。

>来栖さん
noswap試してみます><

>Rayさん
"hughesjr" kernelsを導入してみたのですが、
あまり劇的な速度向上は認められませんでした。
ただ、Call数の変化に関しては、見落としていたため、また後で実験をしてみたいと思います。

>ちほりんさん
Lusterの情報をちょこちょこあさり始めました!
とりあえずNFSを片付けたらLusterとGFSのベンチをする予定です。
その際はまたよろしく御願いいたします><

>snowdogさん
Centos4.6の使用も考えたのですが、Centos5系でクラスタシステムの近代化を行うと、してしまったので、
ここは5.1で押していこうかと思います。
ご助言感謝します><

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Linux 更新情報

Linuxのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。