遅いPCで速いNICを使うと余計に遅くなるという話
初版 2003/1/16
改定1版 2003/1/18
改定2版 2003/2/3
(文字コードをUTF-8に修正2022年6月)
始めに
経験的に知っていたのですが、遅いPCで100BASE-TxのNICを使うと、10BaseT
のNICより通信速度が遅くなります。事実なんだろうかと思い、ベンチマーク
してみました。
このWebをFreeBSD-users-jpで紹介したところ、chipsetの性能に影響されると
指摘をうけました。[FreeBSD-users-jp 72985]など。改定2版ではchipsetの
性能に定評があるIntel製chipセットのPCをベンチマークに追加しました。
改定2版を作るにあたり、Intel製chipsetのPCが欲しいとFreeBSD-users-jpに
送った所、学内の電子情報工学科の方より貸していただきました。ありがとう
ございました(_m_)
ベンチマーク環境
- ソフトウエア
OSはFreeBSD-4.7Rです。
ベンチマークソフトとして、
NetPipe-3.2(http://www.scl.ameslab.gov/netpipe/) を使用しました。
(FreeBSD ports collectionに入っています。)
NetPipeはサーバ・クライアント間で、通信速度を測定するプログラムです。
- ハードウエア
次の3台のPCをNetPipeのサーバとして設定した。
- 遅いPCとして
- PowerHeroes製PC/ Pentium166MHz(133MHzで使用), MEM 64M (I430VXと略す)
Intel 430VXチップセット
- 富士通 FMV Deskpower SE FMV-5133DPS/ Pentium133MHz, MEM 128M (FMVと略す)
ALi製チップセット
- IBM PS/V Master100 / i486DX4 100MHz, MEM 32M (IBMと略す)
- 比較用に速いPCとして
- 自作PC Biostar M6VLQ/Celeron 1.4GHz, MEM 128M (Biostarと略す)
(最近のマザーボードでは珍しいISA付属)
次のPCをクライアントとして設定
- 自作PC Asustek/Pentium III 450, MEM 128M (Asusと略す)
サーバ3台に、次のNIC・9種類を交換して測定した。
クライアント側のNICは次のNICを使用した。交換はしていない。
- sis0: IO-DATA ET100-PCI-L
(03/1/17修正:当初rl0と書いていたがsis0の誤りでした。)
- 接続図
[サーバ] -- [Switch1] -- [Switch2] -- [クライアント]
Switch1: アライドテレシス FS716XL
Switch2: Planex FX-08IM
2台ともフローコントロール対応。
- 測定方法。
- サーバで次のコマンドを実行する。
% NPtcp -r -b 0 -u 1048573
- クライアントで次のコマンドを実行する。
% NPtcp -t -h サーバIPアドレス -b 0 -u 1048573
- 測定結果はクライアント側に出力される。ファイル np.outができる。
このファイルをfeplot(NetPipeのソースに含まれる)を使いグラフ化
- 100BASE-TxのNICは100Base-Tx/FullDuplexと10BaseT/HalfDuplexでも測
定した。FreeBSDでは次のコマンドで10BaseT/HalfDuplexに変更可能。
% ifconfig xl0 media 10baseT/UTP
- 1000BaseTのHUBを所持してないため、1000Baseでの測定は行っていない。
ベンチマーク結果
グラフの縦軸は通信速度(MBPS)です。横軸は、メッセージ(データ)サイズ
(byte)です。
メッセージサイズを変化させながら(1〜786,435byte)通信速度を測定した結果
をグラフ可しています。
ed0: Melco LGY-PCI-TL (10BaseT)
NE2000互換NIC(ed0)で、10BaseTの例です。どのPC/メッセージサイズでもまんべんなく速度が出ているようです。
ed1: Elecom Laneed LD-PNE20/TA Ethernet Adapter (10BaseT)
これもNE2000互換NIC(ed1)で、10BaseTの例です。ISAです。FMVでは特定のメッ
セージサイズで通信速度の落ち込みが見られますね。相性でしょうか?
ep0: 3Com 3C509-Combo EtherLink III (10BaseT)
NE2000以外の10BaseT NICとして、3com製の ISAカードです。
このNICでもFMVは性能が良くないですね。ISAの性能が悪いのかな?
(余談ですが、手もとには3com 3c515という100BaseTx対応の珍品ISAカードが
あるのですが、FreeBSDは未対応なんですよねぇ…。)
xl0: 3Com 3c905B (100BaseTx)
これは100BaseTxの例です。FMV,IBMでメッセージサイズがある一定値を越えた
処で極端に速度が落ち込んでいます。ですが、Intel製チップセットのPC、
I430VXでは落ち込みが見られません。
xl0: 3Com 3c905B (10BaseT)
同じxl0でも、10BaseT固定すると、FMV,IBMで速度の落ち込みは見られないようです。
sis0: IO-DATA ET100-PCI-L (100BaseTx)
xl0を100BaseTxで使った場合と同じ結果ですね。
sis0: IO-DATA ET100-PCI-L (10BaseT)
xl0と同様に、10BaseT固定すると、速度の落ち込みは見られないようです。
fxp0: Intel 82559 (100BaseTx)
FreeBSD界隈では評判の良いfxpですが、I430VX以外の遅いPCでは散々な状況でした。
FMVではベンチマークソフトがタイムアウトして終了します。
fxp0: Intel 82559 (10BaseT)
fxpも10BaseT固定すると、速度の落ち込みは見られないようです。
dc0: AI Brain FEPCI-IXS (100BaseTx)
旧DEC製品ですが、Intelが買収して型番が変わった Intel 21143です。
IBMは割合まともですが、FMVは良くないですね。
なお、I430VX以外のPCではベンチマーク中に次のエラーが表示されました。
FMV, IBM:
dc0: TX underun -- increasing TX threshold
dc0: TX underun -- using store and forward mode
Biostar:
dc0: TX underun -- increasing TX threshold
dc0: AI Brain FEPCI-IXS (10BaseT)
dcも10BaseT固定すると、速度の落ち込みは見られないようです。
pcn0: IO-DATA ET/PNA-PCI (100BaseTx)
このNICのチップはAMD製のHomePNA用チップです。100BaseTxでも利用可能です。
FMV,IBMもかなり良い成績を出していますね。ですがPNA用ですので、通常の
pcnと比較して良いものか疑問です。
なお、このNICをFreeBSDで使うにはパッチが必要です。
http://www.sanpei.org/FreeBSD/100BASE/IO-DATA-ET-PNA-PCI
pcn0: IO-DATA ET/PNA-PCI (10BaseT)
このNICは100BaseTxでも安定していますので、あえて10BaseTにする必要はな
いでしょう。
em0: Intel PRO/1000 MT Desktop Adapter (100BaseTx)
xl0やsis0ではある一定値サイズより大きいメッセージサイズで速度の落ち込
みが見られましたが、em0ではメッセージサイズが小さいと速度の落ち込みが
見られますね。
em0: Intel PRO/1000 MT Desktop Adapter (10BaseT)
em0は10BaseT固定しても、IBM,FMVでは安定した通信速度は望めないようです。
結論
古いPCでは、100BASE-TxのNICを使うと10BaseTのNICより通信速度が遅くなる
という経験法則は、Intel製チップセットには当てはまらないようです。
ですが、100Base-Txで成績がふるわないFMV,IBMでもpcnは良い成績を出してい
ます。
まとめると
- Intel製チップセットなら、特にNICに拘る必要がない。
- Intel製チップセット以外なら、pcnがお勧め。(ただし実験で利用したpcn
は特殊仕様のためbenchmarkで確認の必要あり。)
- 100BaseTxで成績の悪いNICを10BaseTで使うと改善される場合もありますが、
em0のような例もありますので、実測してみる必要があります。
付録: DEVICE_POLLINGをON/OFFした場合
[FreeBSD-users-jp 72963]にて、このWebを紹介した所、DEVICE_POLLINGを
有効にしてみてはどうかと指摘された。試してみる。
- DEVICE_POLLINGを有効にするには、
- カーネルconfig で、次の項目を追加し、再構築する。
options DEVICE_POLLING
options HZ=1000
- /etc/sysctl.confに次の項目を追加し、rebootする。
kern.polling.enable=1
- ベンチマーク結果