プログラミングでメシが食えるか!?

UDPパケットサイズと転送レートの関係

»

回線遅延シミュレータ:Ethdelayに関して、「パケットサイズが転送レートにどのくらい影響を与えるか?」というお問い合わせをいただいたので、IPerfを使って測定してみました。

1バイトのパケットを1000個送っても、1000バイトのパケットを1個送っても、送信したデータのサイズは同じですが、処理の重さはだいぶ異なります。

Ethernetフレームは最大サイズが1518バイトですので、そこから、Ethernetヘッダ(14バイト)とFCS(4バイト)を除いた、1500バイトが送出できる最大サイズになります。IPv4でUDPを送出するには、IPv4ヘッダ(20バイト以上)とUDPヘッダ(8バイト)を除き、1472バイト以下がデータサイズになります。

1バイトのデータをUDPで送るためには、IPヘッダにオプションがないとして、
1+8+20+14+4=47バイト
Ethernetフレームが送出され、1000バイトのデータを送るためには、これを1000個、つまり47000バイトになります。

1000バイトのデータをUDPを送るには、
1000+8+20+14+4=1046バイト
これだけで1000バイトのデータが送れます。Ethernet上に流れるデータ量は2545倍くらいの差があるのです。

まず、IPerfのUDP送出レートを実際に動かして見てみましょう。パケットサイズ(UDPのデータサイズ)は、1400,1000,500,200,100,50,20,10バイトで、IPerfに指定する送出レートは1000K,500K,200K,100K,50K,20K,10K,5K,2K,1Kで測定します。

20110426_200802_2
ギガビットのNICを使っていますが、パケットサイズによって頭打ちが発生します。10バイトのデータサイズでは、最大でも5Kbpsくらいしか送出できません。

続いて、受信側ホストと直結して、受信レートを測定してみましょう。本当は送信側ホストと同じスペックのホストを用意したいところですが、かなり受信側の方がパワーのないホストになってしまいました。NICは受信側もギガビットです。

20110426_200814
受信レートは送出レートよりもさらに一桁くらい低いところまで落ち込む感じです。パケットサイズが小さくなるほど、また、送出レートが下がるほど、受信レートは落ち込んでいます。

では、Ethdelayシリーズの最上位機種EthdelayProを間に挟んで測定してみましょう。遅延・ロス・帯域制限はいずれも無指定で、最高の状態で測定しています。

20110426_200822
ほぼ直結と同じくらいの受信レートとなっています。所々直結より高性能なところもあります。EthdelayProはCPUがアプライアンスとしては高性能ですので、余裕を持って転送処理を行っていると言えるでしょう。

真ん中の機種、EthdelayExもEthdelayProよりは悪いものの、ほぼ似たような結果を出せます。しかし、ローレベルのEthdelayはグラフを載せるのが恥ずかしいほど、安定した結果になりません。もともと100BASEですが、CPUが非力なため、受信が忙しい状態だと送信側の処理に時間を割きにくくなるなど、MAXでも10Mbps、受信の忙しさによってはさらに低い値となってしまいます。

もともとEthdelayは品質の悪い回線のシミュレーションをすることを目的として開発したため、性能が安定しないのは、目的としてはあっているのですが、より大きなスループットで検証したい場合や、検証の精度を高めたいなどの要望に応じてEthdelayProが開発され、コンパクトでそれなりの性能を目指したEthdelayExが登場しています。いずれもエンジン部分のソースは同じですので、単にハードウェアの能力の違いが、性能の差になっています。もちろん、ソフトウェアでの処理ですので、厳密な測定器としては使えないと思いますが、上位2機種はそれなりに指定通りにシミュレートします。

いずれにしても、パケットが細切れなのはスループットに大きな影響を与えますので、開発を担当している方はプロトコルの設計には十分気をつけましょう!

Comment(4)

コメント

taca

となると、次は大きすぎる(fragmentされる)UDPでのデータ送信の場合を、パケット損失がある場合も含めて測定ですね。:-)

tacaさん、コメントありがとうございます。
そうですねぇ。Ethdelay自体は単にパケット単位で中継しているだけなので、分割されるデータは送受信側の影響が大きいのと、分割された後のサイズがばらつくと評価が難しいですね。。

syasuda

>データ量は25倍
この計算は、47000/1046で45倍のような気がします。
重箱の隅ですみません。

syasudaさん、コメントありがとうございます。
すみません!タイプミスですね。。修正しました!

コメントを投稿する