- 締切済み
玄箱DebianでNFSの転送速度が悲惨
以下の環境でカーネルモードにてNFSサーバを稼動しています。 <NFSサーバ> ハードウェア: 玄箱HG PowerPC266MHz RAM256MB 1000Base-T/100Base-T/10Base-T対応NIC OS: Debian GNU/Linux 4.0 etch(PPC) Kernel 2.4.17 hostname:alice(IP:192.168.0.100) # /etc/fstab # <file system> <mount point> <type> <options> <dump> <pass> (省略) /dev/sda1 /mnt/sda1 vfat rw,utf8,uid=65534,gid=65534 0 0 /dev/sda2 /mnt/sda2 vfat rw,utf8,uid=65534,gid=65534 0 0 /dev/sdb1 /mnt/sdb1 ext3 rw 0 0 # /etc/exports /mnt/sda1 192.168.0.0/255.255.255.0(rw,async,no_subtree_check,all_squash) /mnt/sda2 192.168.0.0/255.255.255.0(rw,async,no_subtree_check,all_squash) /mnt/sdb1 192.168.0.0/255.255.255.0(rw,async,no_subtree_check,all_squash) ※sda、sdbはUSB2.0外付けハードディスクストレージ。 <クライアント> ハードウェア: NEC LavieLight Atom1.66GHz RAM2048GB 100BASE-TX/10BASE-T対応NIC OS: Ubuntu 9.10 Karmic (x86) Kernel 2.6 hostname:fox(IP:192.168.0.6) 備考: NFSマウントポイントとして、/mnt/sda1 /mnt/sda2 /mnt/sdb1がある。 NFSディレクトリのマウントは通常 # mount -t nfs -o rw,async 192.168.0.100:/mnt/sda1 /mnt/sda1 としています。 <ルータ> ハードウェア: IODATA ETX-R 10/100Mbps IP: 192.168.0.1 <NFSサーバ>のsda1やsda2の動画を<クライアント>からmplayerなどで再生しようとする ブチブチと途切れてしまい、最終的には再生が止まったまま反応がなくなります。 roxやシェルから、大きなファイルをコピーしようとしても同様に固まってしまう 状況でしたので、<NFSサーバ>と<クライアント>間の転送速度に問題があるんじゃないかと 思いました。 そこで以下のように<クライアント>からddする事で、速度を測ってみました。 root@fox:~# time dd if=/dev/zero of=/mnt/sda1/test.img bs=1024k count=5 5+0 records in 5+0 records out 5242880 bytes (5.2 MB) copied, 0.609116 s, 8.6 MB/s real 0m0.643s user 0m0.004s sys 0m0.052s root@fox:~# time dd if=/mnt/sda1/test.img of=/dev/null bs=1024k count=5 3+0 records in 2+0 records out 2097152 bytes (2.1 MB) copied, 135.476 s, 15.5 kB/s real 2m15.486s user 0m0.004s sys 0m0.032s 5MBのファイルを上がwrite、下がreadしている結果ですが、書き込みに1秒半、 読み込みに2分以上もかかっています。いくら100BASEなLAN環境とは言え、 これでは使いものになりません。特にreadは何度測っても、残念な結果ばかりでした。 ※念の為、試行の度にumount->nfs-kernel-server restart->mountを行なっています。 NFSのチューニング記事を参考に、<クライアント>からのマウント時に いくつかのブロックサイズを指定して試してみても、ほとんど変化なしでした。 vfatが悪いのか、USBストレージが原因なのか、それとも・・・。 それを確認する為に、今度は<NFSサーバ>で以下のddを試しました。 root@alice:~# time dd if=/dev/zero of=/mnt/sda1/test.img bs=1024k count=5 5+0 records in 5+0 records out 5242880 bytes (5.2 MB) copied, 0.0839 seconds, 62.5 MB/s real 0m0.137s user 0m0.000s sys 0m0.140s root@alice:~# time dd if=/mnt/sda1/test.img of=/dev/null bs=1024k count=5 5+0 records in 5+0 records out 5242880 bytes (5.2 MB) copied, 0.053922 seconds, 97.2 MB/s real 0m0.079s user 0m0.000s sys 0m0.070s 上が5MBのwrite、下が5MBのreadです。 サンプルが5MBと少ないので、試験する度に値が変わりますが、 それでも数十MB毎秒と十分な速度が出ていました。 となるとやはり原因は、<NFSサーバ>の設定、<クライアント>のアクセスの仕方、 <ルータ>の3つに絞られてくると思います。 <ルータ>は同ネットワークの他マシンから、(NFSではない)ファイル送受信を 10MB毎秒近い速度を出しているので問題ないと思います。 <NFSサーバ>ではクリティカルに負荷になりそうなプロセスは常駐してません。 <クライアント>のdd結果は、他のUbuntuマシンから試行した際も似たような結果だったので、 問題ないと思います。 <NFSサーバ>の転送速度向上に心あたりがある方がいらっしゃいましたら、ご指導お願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
あ, そういうことね. だとしたらとりあえずログをチェックしておくかな. さすがに遅すぎるので, ディスク障害とかハードウェア的なものをとりあえず気にする. でも, 何もなかったらそれこそ原因不明だなぁ.
- Tacosan
- ベストアンサー率23% (3656/15482)
ちょっと気になる点がありますねぇ. クライアントで読み込んだときに 2097152 bytes (2.1 MB) copied, 135.476 s, 15.5 kB/s と出ているのがなんとなくあやしい. いや, 本当に 2MB しかないならかまわないんだけど, テストを「ライト→リード」の順にやっているんだとしたら, その前のライトで大きさが 5MB になっていないといけない. ということで, サーバのログを精査した方がいいかも. 最悪, そのディスクが死にかけていることも考えられます. ちなみにサーバの方でライト・リードした結果 5242880 bytes (5.2 MB) copied, 0.0839 seconds, 62.5 MB/s 5242880 bytes (5.2 MB) copied, 0.053922 seconds, 97.2 MB/s と表示されていますが, これはどちらも「実際にディスクをアクセスした結果」ではないはずです. よく見ると分かりますが, USB2.0 の転送速度である 480Mbps を超えてしまっています.
補足
度々のご回答、誠に感謝しております。 ご指摘のとおり、2.1MBのコピーで終わるのは変ですね・・・。 いろいろ試行してみていたので、ひょっとしたら直前にwriteテストを実行した直後にC-cで終了してしまい中途半端なファイルになっていたのかもしれません。先程、しっかりと/mnt/sda1/test.imgのサイズを確認した上で同じチェックをしたところ、以下のようになりました。 root@fox:~# time dd if=/mnt/sda1/test.img of=/dev/null bs=1024k count=5 5+0 records in 5+0 records out 5242880 bytes (5.2 MB) copied, 230.818 s, 22.7 kB/s real 3m50.826s user 0m0.000s sys 0m0.040s 10回ほど「クライアント側アンマウント、NFSサーバの停止、サーバ側アンマウント、サーバ側マウント、NFSサーバの起動、クライアント側マウント、ddの実行」を行いましたが、10~30KB/秒でした。 USBストレージは数日前までクライアント(UbuntuやWindowsXP)に直結して利用していましたが物理的な不調もなく、 また、NFSサーバ内の物理的に別のファイルシステムと大量のファイル(1TBほど)をやりとりしても、転送速度を含め特に問題はございませんでした。 まだ購入して半年も経たないハードディスクですのであまり考えたくはありませんが、この際、物理障害も視野に入れて調べてみたいと思います。 > USB2.0 の転送速度である 480Mbps を超えてしまっています. 仰るとおりです。せっかくの貴重なご回答なのにこのようなミス、恥かしい限りです。 深呼吸をし、今一度確認を行ったところ、以下のようになりました。 root@alice:~# umount /mnt/sda1 root@alice:~# mount /dev/sda1 /mnt/sda1 -o rw,utf8,rsize=8192,wsize=8192,uid=65534,gid=65534 root@alice:~# time dd if=/dev/zero of=/mnt/sda1/test.img bs=1024k count=5 5+0 records in 5+0 records out 5242880 bytes (5.2 MB) copied, 0.138165 seconds, 37.9 MB/s real 0m0.169s user 0m0.000s sys 0m0.120s root@alice:~# umount /dev/sda1 root@alice:~# mount /dev/sda1 /mnt/sda1 -o rw,utf8,rsize=8192,wsize=8192,uid=65534,gid=65534 root@alice:~# time dd if=/mnt/sda1/test.img of=/dev/null bs=1024k count=5 5+0 records in 5+0 records out 5242880 bytes (5.2 MB) copied, 0.615411 seconds, 8.5 MB/s real 0m0.640s user 0m0.010s sys 0m0.110s
お礼
自己解決致しましたので、こちらでご報告致します。 玄箱Debian(Kernel2.4系)の場合、カーネルモードのNFSが まともに動かない現象が報告されていました。 そこで、Kernel2.6系に入れ替えてみたところ、納得のいく 転送速度を得る事が出来ました。 ちなみに、2.6系のカーネルモジュールを上手く入らなかったのか、 今度はUSBストレージの一部のパーティションが/proc/bus/usb/devicesや /var/log/syslogにも表示されなくなり認識できなくなってしまいましたが 本質問はとりあえず決着している為、質問を締め切らせて頂きます。 ありがとうございました。
補足
補足返信が遅れて申し訳ございません。 <クライアント>から<NFSサーバ>にsftpでログインし、 sda1にある300MB程度の動画ファイルをgetしたところ、 100BASE環境としてはまずまずの速度、2.8MB/sが出ております。 浅学ながら、マウント時、NFSカーネルモード起動/終了時、 read/writeアクセス時に、tailで各ログを確認しましたが、 これといったディスク障害もございませんでした。 当初は私のチューニングの貧さに加え、本体スペックもフルサイズの ディストリを動作させるのには最低限の性能だった為、 「この程度かなあ」と肩を落とし考えておりましたが、 調べていくにつれ、どうもNFSの転送の遅さはNFSの設定や それに付随するものに限定した要因により、引き起こされている のではないかと考えるようになりました。 Tacosanには貴重なご意見を頂き感謝しております。 また「このような情報を出してくれ」などのご意見もございましたら、 可能な限り掲示させて頂こうと思います。