仕事も一段落し、フラフラと近所の量販店に迷いこんだ私は、そこで、LD-10/100S (Laneed) ELECOM - 1280円に出会ってしまいました。箱には、”Realtek 8139 chip を採用”とあるではありませんか! 世の中は既にギガビットイーサネットの時代だと言うのにいまだに10Base-Tの私は気がつくと、LD-PSW08N (Laneed) ELECOM - 5780円というswitching hubと100Base-TX対応のケーブルも一緒に握りしめ、レジに向かっていました。帰ってから確認してみると載っている蟹さんチップはrtl8139Cでした。
今回は、上記のモノでPowermac 8500/120を100Base-TXにすべく試みてみました。結論から言うとlinuxppc、MacOSともに実現できました (^o^)。ようやく、linuxppcに特有の話題を書くことができます。
こんなところまで見に来て下さる方には釈迦に説法でしょうが、作業メモとして書いておきます。まず、Powermac 8500/120の後面の4つのネジを10円玉を使って緩め、外枠を5cm程後方へずらしてから上へ持ち上げて抜き取ります。PCI slotは本体の後面下部に3つあります。一番上はAVケーブルが邪魔になるので、2番目のslotにLD-10/100Sを挿し込みました。これ、かなり力が要ります。”グガッ”と言う嫌な音がしましたが、なんとかboardの切れ込みの奥までしっかり入れることができました。ま、私の拙い説明を読むよりも8500分解手順やPower Mac 8500の増設図解(メモリ編)と言ったところを参考にした方が良いでしょう。(^^;;;;;;
linux-2.4系のカーネルでは8139tooと言うのがドライバになってます。これは、カーネルソースの/usr/src/linux/drivers/net/にあります。最新版はSourceForge: Project Info - gkernelからdownloadできます。ただし、最新版は2.4.3以降用です。私はPM8500/120には2.4.2-pre3を入れてますので(私の環境参照)、カーネルソースに付属している方の8139tooを使いました。
まず、作業用のディレクトリを作ります。
$ cd /usr/local/src $ mkdir modules
この中に/usr/src/linux/drivers/net/8139tooをコピーしておきます。
最初に挙げた情報源に従えばドライバを使うにはpci-scan.cも必要ですので、下記のものを取って来て、上記のmodules directoryに入れておきます。
さらに、8139too-0.9.17.tar.gz を取って来てtar zxvfで展開し、8139too以外のものをmodules directoryにコピーします。勿論、2.4.3以降のカーネルをお使いの場合は最新版の8139tooをそのまま使えば良い訳です。
ソースの最後の部分に書いてあるcompile-commandに従ってpci-scan.cとmii-diag.cをコンパイルします。
$ gcc -DMODULE -D__KERNEL__ -DEXPORT_SYMTAB -Wall -Wstrict-prototypes -O6 -c pci-scan.c $ gcc -Wall -Wstrict-prototypes -O mii-diag.c -DLIBMII libmii.c -o mii-diag
肝心の8139tooは、
gcc -DMODULE -D__KERNEL__ -O6 -c 8139too.c
でもよいのですが、8139too-0.9.17.tar.gzについているMakefileを下記のように修正して(と言うか、いくつかコメントアウトしただけ)、
#
# Kernel includes. Please avoid
# using '/usr/include' unless all
# other options exhausted.
#
KINCLUDES=/usr/src/linux/include
#KINCLUDES=/spare/cvs/linux_2_3/include
#
# uncomment line below if you have SMP
#
#SMPFLAGS= -D__SMP__ -DCONFIG_SMP=1
#
# Unless you have a 386/486, you shouldn't need
# to change anything below here...
#
#CPUFLAGS= -DCPU=586 -march=i586
MODULE= 8139too
CC= gcc
KERNFLAGS= \
-D__KERNEL__ -I$(KINCLUDES) $(CPUFLAGS) $(SMPFLAGS) \
-Wall -Wstrict-prototypes \
-O2 -fomit-frame-pointer -fno-strict-aliasing -pipe \
-DMODULE
CFLAGS= -O2 -fomit-frame-pointer $(KERNFLAGS)
default:: all
all:: $(MODULE).o
$(MODULE).o: $(MODULE).c
$(CC) $(CFLAGS) -c $<
clean:
rm -f *.o
ソースとMakefileをmodules directoryに置き、makeしました。
$ pwd $ /usr/local/src/modules $ make
後で分かったのですが、比較してみるとこのMakefileを使ってコンパイルしたモノの方が最初の簡単なオプションでコンパイルしたものよりほんの少し(6-7%)速くなります。
出来上がったpci-scan.oと8139too.oを/lib/modules/2.4.2-pre3/kernel/drivers/net/にコピーします。mii-diagの方は/home/watashi/bin/にコピーしました。
最後に、設定ファイルを書き込みます。まず、/etc/modules.confに下記を追加します。
alias eth1 8139too
次に、/etc/sysconfig/network-scripts/ifcfg-eth0を/etc/sysconfig/network-scripts/ifcfg-eth1としてコピーし下記のように書き換えました。
DEVICE=eth1 IPADDR=192.168.10.10 NETMASK=255.255.255.0 NETWORK=192.168.10.0 BROADCAST=192.168.10.255 ONBOOT=yes <----- ここをyesにする BOOTPROTO=none ..................
/etc/sysconfig/network-scripts/ifcfg-eth0の方は、ONBOOT=noに書き換えておきます。または、netcfgなどのGUI toolで設定するのも良いでしょう(余談ですが、netcfgは割と使いやすいのですが、linuxconfはどうも好みに合いません、雑誌などで使い方を見てもいまいちピンときません。まあ、好きずきでしょうが.....)。これで、rebootすれば、eth1がactiveになりrtl8139を介して100Base-TX machineとなるはず ............
うっ、ならない、どうしてだー!! そもそも、スウィチングハブのアクティビティランプが点灯しない。これはケーブルがおかしいに違いないと考えてリピータハブに繋ぎ替えてみるとちゃんとランプが点灯し10Mbpsでは使えます(笑)。ところが、スウィチングハブに繋ぎ替えるとiMacからの分はランプが点灯し100Mbpsであることも示すのですが、8500/120の分はやっぱりアクティビティランプすら点灯しない。色々設定を替えたりしてみたのですがどうやってもダメで、その夜はフテ寝しました(ToT)。
しかし、うれしいことに、翌日、起動してみると何事もなかったかのように100Mbpsで接続できるようになっていました (^o^)。何がどうなっていたのか謎ですが、夜中に作業をしていると時々こういうことがあります(っていうか、こんなのは私だけ???)。
うまく動くようになってからの起動メッセージの関連部分(dmesgの最後の方)はこうです。これでみると、2.4.2-pre3の8139tooは0.9.13ですね。ちゃんと全二重で動いているし、可愛いやつ(笑)。
8139too Fast Ethernet driver 0.9.13 loaded PCI: Enabling device 00:0e.0 (0004 -> 0007) eth1: RealTek RTL8139 Fast Ethernet at 0xc5840000, 00:90:fe:21:d2:a3, IRQ 24 eth1: Identified 8139 chip type 'RTL-8139C' eth1: Setting full-duplex based on MII #32 link partner ability of 45e1.
ifconfig -a はこんな感じです。
eth0 Link encap:Ethernet HWaddr 08:00:07:AF:8E:DE
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0
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:70009 errors:0 dropped:0 overruns:0 frame:0
TX packets:34194 errors:0 dropped:0 overruns:6 carrier:0
collisions:0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3904 Metric:1
RX packets:30128 errors:0 dropped:0 overruns:0 frame:0
TX packets:30128 errors:0 dropped:0 overruns:0 carrier:0
collisions:0
tap0 Link encap:Ethernet HWaddr FE:FD:00:00:00:00
inet addr:xxx.xxx.xxx.213 Bcast:xxx.xxx.xxx.255 Mask:255.255.255.0
UP BROADCAST RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:816 errors:0 dropped:0 overruns:0 frame:0
TX packets:1019 errors:0 dropped:0 overruns:0 carrier:0
collisions:0
mii-diagを使うとこんな感じです。
$ mii-diag -av eth1 mii-diag.c:v2.00 4/19/2000 Donald Becker (becker@scyld.com) http://www.scyld.com/diag/index.html MII PHY #32 transceiver registers: 1100 782d 0000 0000 01e1 45e1 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000. Basic mode control register 0x1100: Auto-negotiation enabled. You have link beat, and everything is working OK. This transceiver is capable of 100baseTx-FD 100baseTx 10baseT-FD 10baseT. Able to perform Auto-negotiation, negotiation complete. Your link partner advertised 45e1: Flow-control 100baseTx-FD 100baseTx 10baseT-FD 10baseT, w/ 802.3X flow control. MII PHY #32 transceiver registers: 1100 782d 0000 0000 01e1 45e1 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000. Basic mode control register 0x1100: Auto-negotiation enabled. Basic mode status register 0x782d ... 782d. <--- ここ Link status: established. Capable of 100baseTx-FD 100baseTx 10baseT-FD 10baseT. Able to perform Auto-negotiation, negotiation complete. This transceiver has no vendor identification. I'm advertising 01e1: 100baseTx-FD 100baseTx 10baseT-FD 10baseT Advertising no additional info pages. IEEE 802.3 CSMA/CD protocol. Link partner capability is 45e1: Flow-control 100baseTx-FD 100baseTx 10baseT-FD 10baseT. Negotiation completed.
何だか良く分かりません (^^;;;;;。
Linux Ethercard Status, Diagnostic and Setup UtilitiesやUnderstanding MII Transceiver Status Infoを参考にしてみると、
The MII status word is the most useful MII register. A typical good status value 0x78*d, while a transceiver without link beat typically reports 0x78*9.
と、あります。私の場合は0x782dですので、うまく動いているようです
まず、Realtekのサイトから、MacOS 8.5, 8.6 and MacOS 9.0, 9.1 driverをダウンロードします。私はこのドライバを使うためだけに8500/120を7.5.5から8.6にupgradeしました。おかげで、メモリー不足に悩まされそうです。64Mしかありませんので....(ToT)。その後、更に調べてみると、7.5.5でもこのドライバが動いた方もいらっしゃるようです。保証の限りではないですが.......まっ、とにかく、下記のサイトからドライバを取って来て下さい。
Computer Peripheral & Multimedia ICsこれを、Stuffit Expander等で解凍します。この中にあるRTL8139x Driverがドライバになります。付属のdocを読むとApple システムプロフィールで使用するethernet boardを調べて、カード名:pci10ec,8139と表示されない場合にはパッチが必要になると書いてあります。私の場合がこれでした(笑)。そこで、RTL8139x DriverをJeditでopenし、pci10ec,8139とある部分をすべて(2か所)Apple システムプロフィールで表示された通りに修正しました。あとは、このドライバをシステムフォルダの機能拡張にいれるだけです。これで、再起動すれば、100Base-TXになりました。実際に測定はしていませんが、Appletalkでの体感速度は明らかに向上しました。
最後に、10Base-Tの時との速度比較をNFSでやってみました。方法と10Base-Tの結果については、NFSの最適化 - Optimizing NFS performance を参照して下さい。
| rsize & wsize | write time (sec) | write speed | read time | read speed |
|---|---|---|---|---|
| 8192 bytes | 2m41.391s | 1586kB/sec | 2m33.742s | 1665kB/sec |
| 16384 bytes | 2m30.618s | 1700kB/sec | 2m36.836s | 1632kB/sec |
| 32768 bytes | 2m42.481s | 1576kB/sec | 2m46.257s | 1540kB/sec |
うーん、せいぜい10Base-Tの2.4倍ですか。10倍になるとは思ってなかったけど、せめて4-5倍にはなって欲しかったなあ。これだと、100Mbpsの13%ぐらいしか使ってないですねえ。こんなものなのでしょうか??? まあ、今時、この程度の出費でパフォーマンスが2倍以上になれば上等と考えるべきなのでしょうがね。
試しに33M程度のファイルをftpで8500/120からiMac revBへgetしてみたところ、1981kB/secでした。つまり、100Mbpsでもネットワークの接続速度自体がこんな程度のようです。とりあえず、一番速い16384bytesを選ぶことにしました。しばらく使用してみた感想ですが、体感でも10Base-Tの時より明らかに速いです。また、packet lossもありませんし、いきなり落ちると言ったこともありません。やはり、100Base-TXにして良かったなと思います (^o^)。さあ、いよいよ、次はギガビットイーサネットだあ ---> 8500/120は買い替えるってこと?(笑)。