スループットを計測するツールは何種類かある。
- ttcp / nttcp / nuttcp
ttcp が古のツールでソースは色んなバージョン(1,2)が散見される、SGI の人が改良したのが nttcp (元サイトは http://www.leo.org/~elmar/nttcp/ だったらしいが、既に無くなっている)。nuttcp は、nttcp をベースに改良が続けられたもの。使うならば nuttcp かなぁ。 - iperf
Java ベースの GUI 付きがあるので、ベンリかも - netperf
スループット以外にもテスト項目の種類が豊富。ただし、man ページが不完全でなので付属の HTML/PDF を参照する必要がある。 - SmartBits
商用でよく使われている奴ですね。
まぁ、スループットの測定ならば iperf を使えば良いが、CPU の負荷状況を見たいので nuttcp を使ってみた。
VIA-EN を含めて以下の3台とHUBを用意し、3台ともhubに直結した。
- target - VIA-EN12000EG / VIA C7 1.2GHz / DDR2-533 1G / VT6122
- ref1 - M2NPV-VM / Athlon64X2 2.0GHz / DDR2-667 4GB / Intel Pro/1000PT (外付け)
- ref2 - M4A78-EM / Athlon X2 5050e 2.6GHz / DDR2-800 8GB / RTL8112
- hub - Gigabit Hub(GS908M)
ref1 ⇔ ref2 間
ref1 / ref2 ともに mtu 1500 に設定して測定した。
# ssh -f ref2 -- "nuttcp -S -1" # nuttcp -t ref2 1123.8690 MB / 10.01 sec = 941.3733 Mbps 11 %TX 27 %RX # ssh -f ref2 -- "nuttcp -S -1" # nuttcp -r ref2 1122.3750 MB / 10.00 sec = 941.0966 Mbps 33 %TX 16 %RXこれを表にすると、
スループット (Mbps) | CPU 利用率 | ||
---|---|---|---|
ref1 | ref2 | ||
ref1 ⇒ ref2 | 941.3733 | 11 % | 27 % |
ref1 ⇐ ref2 | 941.0966 | 16 % | 33 % |
まぁ、順当に ref1 は送受信ともに約 940Mbps 程度の性能を持っている事が分かる。
target ⇔ ref1 間
target の ドライバ via-velocity/velocityget のそれぞれに対して、mtu 1500 かつモジュールパラメータを設定せずに(ドライバのデフォルト値で)計測した。
velocityget | via-velocity | |||||
---|---|---|---|---|---|---|
スループット (Mbps) | CPU 利用率 | スループット (Mbps) | CPU 利用率 | |||
target | ref1 | target | ref1 | |||
target ⇒ ref1 | 655.2174 | 99 % | 12 % | 340.1681 | 27 % | 9 % |
target ⇐ ref1 | 738.7987 | 68 % | 3 % | 514.5900 | 42 % | 2 % |
熟考
結果を見れば、明らかに velocityget の方が性能が高いように思われるが、ソースを見比べるとモジュールパラメータ DMA_length のデフォルト値が、それぞれのドライバで異なる (velocitygetは6/via-velocityは0)。
DMA_length は、チップ内のバッファとメインメモリの間を転送する DMA の処理サイズを指定するらしく、大きなサイズであれば PCI バスの使用効率が上がるので、スループットに影響しそうである。
なので、DMA_length を 0〜7 に振って再度計測し直してみた。
DMA_length | velocityget | via-velocity | 比 (via-velocity /velocityget) | |||||
---|---|---|---|---|---|---|---|---|
スループット (Mbps) | CPU 利用率 | スループット (Mbps) | CPU 利用率 | |||||
target | ref1 | target | ref1 | |||||
target ⇒ ref1 | 0 | 369.5053 | 28 % | 11 % | 340.1827 | 27 % | 10 % | 0.920643 |
1 | 398.9382 | 39 % | 11 % | 414.5747 | 40 % | 7 % | 1.039195 | |
2 | 497.4004 | 64 % | 9 % | 494.2757 | 60 % | 8 % | 0.993717 | |
3 | 539.0356 | 84 % | 9 % | 540.7160 | 80 % | 10 % | 1.003117 | |
4 | 610.5743 | 99 % | 10 % | 608.1031 | 99 % | 10 % | 0.995952 | |
5 | 646.1530 | 99 % | 11 % | 640.9711 | 99 % | 10 % | 0.991980 | |
6 | 655.4841 | 99 % | 11 % | 646.4036 | 99 % | 12 % | 0.986146 | |
7 | 652.1732 | 99 % | 12 % | 647.7397 | 99 % | 10 % | 0.993201 | |
target ⇐ ref1 | 0 | 450.8850 | 36 % | 2 % | 502.9532 | 42 % | 2 % | 1.115480 |
1 | 490.2150 | 38 % | 2 % | 580.6518 | 56 % | 2 % | 1.184483 | |
2 | 599.5584 | 48 % | 3 % | 642.5684 | 63 % | 2 % | 1.071736 | |
3 | 661.0592 | 52 % | 3 % | 685.1753 | 74 % | 3 % | 1.036480 | |
4 | 719.6965 | 64 % | 3 % | 709.9482 | 83 % | 3 % | 0.986454 | |
5 | 731.3209 | 69 % | 5 % | 710.1113 | 80 % | 3 % | 0.970998 | |
6 | 741.2755 | 66 % | 4 % | 709.2465 | 80 % | 3 % | 0.956792 | |
7 | 738.2975 | 65 % | 3 % | 710.1459 | 82 % | 3 % | 0.961869 |
DMA_length の値を合わせれば、送受信のスループットに関しては velocityget/via-velocity にほとんと差異は無く、強いて言えば velocityget の方が受信に関して 4〜5% 高く、処理が軽い。送信に関しては双方同じ程度に CPU を使い切って頭打ちになっている。VIA C7 では 1Gbps は吐けないのかぁ。。。
まぁ、DMA_length は velocityget のデフォルト値の 6 が推奨値かなぁ。ちなみに、NetBSDでのドライバ vge だと 4 だった。
ただ、DMA_lengthの値でスループットの差異が出るのは VT6122などのPCIベースの場合だけで、PCIe ベースの VT6130 ではどの値でも違いが無かった。。。多分省かれてしまったのでしょう。
さて、velocityget にだけあるっぽい機能を移植していけば、差異が無くなっていくのかなぁ?
MTU 9000 での測定
そういえば、mtu 9000 のスループットも測定をしたかったで Intel Pro/1000PT を外付けしたんだっけなぁ。なので、測定してみた。
velocityget | via-velocity | |||||
---|---|---|---|---|---|---|
スループット (Mbps) | CPU 利用率 | スループット (Mbps) | CPU 利用率 | |||
target | ref1 | target | ref1 | |||
target ⇒ ref1 | 816.0544 | 32 % | 7 % | 816.1541 | 30 % | 7 % |
target ⇐ ref1 | 989.8745 | 48 % | 9 % | 944.4813 | 46 % | 8 % |
受信に関しては、ほぼ 1Gbps を使い切っている!凄し!
追記 (2009/10/06)
今回使ったスループット測定用のスクリプトmeasure_net_throughput.shをバックアップとして上げておく。
0 件のコメント:
コメントを投稿