玄箱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サーバ>の転送速度向上に心あたりがある方がいらっしゃいましたら、ご指導お願い致します。