ようやく100Base-TXにしてみたもののnfsで見てみると、
12-13Mbps程度で、10Base-Tの時の2.4倍ぐらいにしかならなかったことは、10Base-Tと100Base-TXの速度比較 - Comparison between 10Base-T & 100Base-TX in speedに書いた通りです。これを解決するためにswitching hubを替えてみました。以下にその経緯を記します。
まず、linuxppc-jpで訊いてみたところ、Netperfを試してみてはどうかと、ネットワークの達人花井さんよりアドバイスを頂きました。さらに、松浦さんが提供して下さったパッチを基に私の環境に合わせて下記のようなパッチを作りました。
--- makefile.orig Tue Jun 5 22:48:56 2001 +++ makefile Tue Jun 5 22:48:56 2001 @@ -15,8 +15,8 @@ # for the rest of the world, it is probably better to put the binaries # in /usr/local/netperf or /opt/netperf # -#NETPERF_HOME = /usr/local/netperf -NETPERF_HOME = /opt/netperf +NETPERF_HOME = /usr/local/netperf +#NETPERF_HOME = /opt/netperf # The compiler on your system might be somewhere else, and/or have # a different name. @@ -85,7 +85,8 @@ # sending data using sendfile() instead of send(). LOG_FILE=DEBUG_LOG_FILE="\"/tmp/netperf.debug\"" -CFLAGS = -Ae -O -D$(LOG_FILE) -DUSE_PSTAT -DHAVE_SENDFILE +#CFLAGS = -Ae -O -D$(LOG_FILE) -DUSE_PSTAT -DHAVE_SENDFILE +CFLAGS = -O -D$(LOG_FILE) -DHAVE_SENDFILE # Some platforms, and some options, require additional libraries. # you can add to the "LIBS =" line to accomplish this. if you find
このパッチを当ててnetperfをコンパイルして試してみました。
Powermac8500/120 (rtl8139c) ↓ switching hub (D-PSW08N (Laneed)) ↓ iMac revB (BMAC+) $ /usr/local/netperf/netperf -f M -H iMac TCP STREAM TEST to Foundation Recv Send Send Socket Socket Message Elapsed Size Size Size Time Throughput bytes bytes bytes secs. MBytes/sec 87380 16384 16384 10.01 5.21 iMac revB (BMAC+) ↓ switching hub (D-PSW08N (Laneed)) ↓ Powermac8500/120 (rtl8139c) $ /usr/local/netperf/netperf -f M -H PM8500 TCP STREAM TEST to Hyperion Recv Send Send Socket Socket Message Elapsed Size Size Size Time Throughput bytes bytes bytes secs. MBytes/sec 87380 16384 16384 10.07 0.26
と言う訳で、8500/120 → iMac はそれなりですが、その逆は20倍以上遅いです。netperfをやった後に、iMac revBでifconfigしてみると、
$ /sbin/ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:05:02:2B:F7:1E
inet addr:192.168.10.11 Bcast:192.168.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:133121 errors:2 dropped:0 overruns:0 frame:0
TX packets:69986 errors:1331 dropped:0 overruns:1330 carrier:0
collisions:0
と、かなりパケットがエラーになってます。 8500/120では、
$ /sbin/ifconfig -a
eth1 Link encap:Ethernet HWaddr 00:90:FE:21:D2:A3
inet addr:192.168.10.10 Bcast:192.168.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:68794 errors:0 dropped:0 overruns:0 frame:0
TX packets:133247 errors:0 dropped:0 overruns:6 carrier:0
collisions:0
と、いい感じです。ネットを探ってみてもあまり良い情報は見つけられませんでした。linuxppc-jpで花井さんより、switching hubを替えるしかないのでは、との助言を頂き、遂に新規購入を決心しました。
ネットで色々調べた結果、花井さんが指摘してくださったように、手動で10-100M、half-full duplexの設定が可能なメルコのswitching hub (LSW10/100-8HW)に決めました。近所にこの製品を販売している所が無く下記のサイトより購入しました。
10/100MスイッチングHub 8ポートハイエンドモデル メルコ [NTT-X Store]待つこと10日、ハブが届くなり、荷を解くのももどかしく、即、接続してみました。各種設定を試した後、PM8500-hub, iMac-hubともに、手動で100M、half duplexに設定しておくのが最善と判明しました。以下に、再設定後のnetperfの結果を記しておきます。
$ /usr/local/netperf/netperf -f M -H iMac TCP STREAM TEST to Foundation Recv Send Send Socket Socket Message Elapsed Size Size Size Time Throughput bytes bytes bytes secs. MBytes/sec 87380 16384 16384 10.00 5.44 $ ./netperf -f M -H PM8500 TCP STREAM TEST to Hyperion Recv Send Send Socket Socket Message Elapsed Size Size Size Time Throughput bytes bytes bytes secs. MBytes/sec 87380 16384 16384 10.00 5.72
御覧のように、iMac → 8500/120 の方が 8500/120 → iMac より速いぐらいになりました。(^o^) そこで、nfsも速くなってないかなと期待しつつ、、NFSの最適化 - Optimizing NFS performance で書いたのと同じ方法で測定してLaneedのswitching hub (autonegotiation)と比較してみると..........
| Switching Hub | rsize & wsize | write time (sec) | write speed | read time | read speed |
|---|---|---|---|---|---|
| LD-PSW08N (autonegotiation) | 16384 bytes | 2m30.618s | 1.7MBytes/sec | 2m36.836s | 1.63MBytes/sec |
| LSW10/100-8HW (manual setting: 100M half duplex) | 16384 bytes | 2m14.294s | 1.9MBytes/sec | 2m35.062s | 1.65MBytes/sec |
なんか、あんまり変わってないですねえ (ToT)。 ま、netperfで見ているのはTCPで、こっちはnfsなわけで、片方の改善がそのまま反映されなくても当然なんでしょうが。hard diskの性能やら、bus speedの問題などいろんな因子があるので簡単に改善はしてくれない様です。一番手っ取り早いのは、最新機種に買い替える事だったりして....(^^;;;;
上記の件に関して、花井さんより、”netperfはUDPのperformanceも知らべられるんではなかったか”との御指摘を受けました。で、全くその通りです。(^^;;;;;;; ドキュメントを読まずにやった事がまる分かりです。NFSは下位にUDP(user protocol datagram)を使用していますから当然こちらを調べないといけません。そこで、改めて Netperf Training を読みなおしてやってみました。
iMac revB → PM8500/120 $ /usr/local/netperf/netperf -H PM8500 -t UDP_STREAM -- -m 1024 UDP UNIDIRECTIONAL SEND TEST to PM8500 Socket Message Elapsed Messages Size Size Time Okay Errors Throughput bytes bytes secs # # 10^6bits/sec 65535 1024 9.99 68044 0 55.78 65535 9.99 24600 20.17 PM8500/120 → iMac revB $ /usr/local/netperf/netperf -H Foundation -t UDP_STREAM -- -m 1024 UDP UNIDIRECTIONAL SEND TEST to iMac Socket Message Elapsed Messages Size Size Time Okay Errors Throughput bytes bytes secs # # 10^6bits/sec 65535 1024 9.99 61336 0 50.29 65535 9.99 59223 48.56
上段がsend、下段がreceiveの結果ですが、御覧のように PM8500/120 → iMac の場合はsendとreceiveに大差が無いのですが、iMac → PM8500/120 になると2倍以上の開きが出て来ます。そこで、 Netperf Training を良く読んでみるとこうあります。
NOTE: UDP is an unreliable protocol. It is important that you examine the results carefully as the reported send rate can be much higher than the actual receive rate. Great care should be taken when reporting UDP_STREAM test results to make sure they are not misleading. For example, one should always report both send and receive rates together for a UDP_STREAM test. If you are going to report a single number, you should report the receive rate.
と言う事は、iMac revBのUDPのperformanceは20 Mbpsということになります。ってことは、2.5 Mbytes/secということです。さらに、、花井さんより、”ハードディスクのパフォーマンスはどうか”との御指摘も受けました。そこで、Hard Diskのperformanceをチェックしてみると、
PM8500/120 # /sbin/hdparm -tT /dev/sdc /dev/sdc: Timing buffer-cache reads: 128 MB in 4.77 seconds = 26.83 MB/sec Timing buffered disk reads: 64 MB in 26.05 seconds = 2.46 MB/sec iMac revB # /sbin/hdparm -tT /dev/hda /dev/hda: Timing buffer-cache reads: 64 MB in 1.03 seconds =62.14 MB/sec Timing buffered disk reads: 32 MB in 3.31 seconds = 9.67 MB/sec
つまり、あらかじめcacheされてなければ、disk read speedは、PM8500ではほぼ2.5 Mbytes/secとなり、iMac → PM8500/120 のUDPと良く一致します。iMac revBでは、9.67 × 8 = 約77 (Mbps)と、 PM8500/120 → iMac のUDPの値(49Mbps)よりかなり大きめですね。
以上の結果から考えると、結局、ボトルネックはHard Diskのperformanceであり、約2Mbytes/sec足らずというNFSのパフォーマンスは妥当なものに思えて来ました。うーーむ、泰山鳴動して鼠一匹だったな........... (^^;;;;;;;;;