第 5 章 改良の試み 16
5.8 計測結果
5.8.2 RED ライクな ECN 制御方法による実験
ECNを使い容量を越えた場合にECE信号を送る方法では急激に送出量が下ってしま い、スロースタートモードに入ってしまうことで性能が下ってしまうという問題があった。
この問題を解決するため、あるしきい値を越えた場合はバッファの残り容量に応じて制限 を加える方式を使って急激な送出量の降下を防ぐ実験を行う。このアイディアはルータの パケット破棄方式であるRED–Random Early Detectionから借りたものである。ルータ における動作では破棄を行うが本制御においては破棄ではなくECE信号による送出量の 抑制を行う。
300Mbit/s, 40msの環境下において512MBytesのデータ転送を行い、TCPスタックの 挙動を確認する。先の実験よりDummynetのキューサイズは48KBytes とした。
制御を行わない場合の滞留パケット容量の変化を図5.7に示す。変化を行なわない場合 におけるスループットは28.9Mbps, レイテンシは2262.0[ms]である。また同じ条件で再 度測定を行なったところ、30.64Mbps, レイテンシは2120.5[ms]であった。
制御パラメタは多くのもので実験を行なったが、比較的うまくパラメタを選択すること ができていると思われるものを選んで図5.9から図5.12に掲載する。全体の特性について は表5.7と表5.8に示す。
本実験の結果、急激なTCP送出量の減少が抑えられスロースタートに入る回数は少な くなり、固定的な制限方法と比較するとスループットは向上した。例えば、バッファの容 量を制限しない測定結果と、バッファの容量を8192KB/4096KBのREDで制限を行なっ たものとの比較では、転送時間は20秒ほど長くなったがレイテンシは2120.00[ms]から
0 1e+06 2e+06 3e+06 4e+06 5e+06 6e+06
0 20 40 60 80 100 120 140 160
0 100 200 300 400 500 600
packets on out queue[byte] snd_cwnd*MSS[byte]
elapsed time[s]
transition fo TCP communication(proxy-8192k.txt) packets on output queue[byte]
snd_cwnd*MSS[byte]
図 5.5: ECNによる制御のない場合
0 500000 1e+06 1.5e+06 2e+06 2.5e+06 3e+06 3.5e+06 4e+06 4.5e+06 5e+06
0 50 100 150 200 250
0 100 200 300 400 500 600
packets on out queue[byte] snd_cwnd*MSS[byte]
elapsed time[s]
transition fo TCP communication(proxy-4096k.txt) packets on output queue[byte]
snd_cwnd*MSS[byte]
図 5.6: ECNによって4096KByteに滞留パケットを制限した場合
0 1e+06 2e+06 3e+06 4e+06 5e+06 6e+06
0 20 40 60 80 100 120 140 160
0 100 200 300 400 500 600
packets on out queue[byte] snd_cwnd*MSS[byte]
elapsed time[s]
transition fo TCP communication(base.txt)
packets on out queue[byte]
snd_cwnd*MSS[byte]
図 5.7: バッファの容量を制限しない場合
Absolute[KB]\RED[KB] 64 128 256 512 1024 8192 30.7 26.4 22.3 33.7 39.7 7680 36.5 29.0 30.6 25.9 30.7 7168 26.7 24.5 29.5 30.3 30.7 6656 35.8 27.5 28.4 25.0 26.2 6144 27.0 26.5 27.3 30.9 24.2 5632 30.7 30.7 30.7 30.7 30.7 Absolute[KB]\RED[KB] 2048 3072 4096 5120 6144 8192 34.5 25.9 23.2 20.1 16.1 7680
7168 19.7 17.6
6656 6144 5632
表 5.7: RED方式におけるスループット特性[Mbps]
0 1e+06 2e+06 3e+06 4e+06 5e+06 6e+06
0 20 40 60 80 100 120 140 160 0
100 200 300 400 500 600
packets on out queue[byte] snd_cwnd*MSS[byte]
elapsed time[s]
transition fo TCP communication(8192-3072.txt) packets on out queue[byte]
snd_cwnd*MSS[byte]
図 5.8: REDによる制御(8192KByte/3072KByte)
0 1e+06 2e+06 3e+06 4e+06 5e+06 6e+06
0 20 40 60 80 100 120 140 160 180 0
100 200 300 400 500 600
packets on out queue[byte] snd_cwnd*MSS[byte]
elapsed time[s]
transition fo TCP communication(8192-4096.txt) packets on out queue[byte]
snd_cwnd*MSS[byte]
図 5.9: REDによる制御(8192KByte/4096KByte)
0 1e+06 2e+06 3e+06 4e+06 5e+06 6e+06
0 50 100 150 200 250 0
50 100 150 200 250 300 350 400 450
packets on out queue[byte] snd_cwnd*MSS[byte]
elapsed time[s]
transition fo TCP communication(5632-1024.txt) packets on out queue[byte]
snd_cwnd*MSS[byte]
図 5.10: REDによる制御(5632Byte/1024KByte)
0 1e+06 2e+06 3e+06 4e+06 5e+06 6e+06
0 20 40 60 80 100 120 140 160 180 0
50 100 150 200 250 300 350 400 450
packets on out queue[byte] snd_cwnd*MSS[byte]
elapsed time[s]
transition fo TCP communication(5632-512.txt)
packets on out queue[byte]
snd_cwnd*MSS[byte]
図 5.11: REDによる制御(5632KByte/512KByte)
0 500000 1e+06 1.5e+06 2e+06 2.5e+06 3e+06 3.5e+06 4e+06 4.5e+06
0 50 100 150 200 250 0
50 100 150 200 250 300 350 400 450
packets on out queue[byte] snd_cwnd*MSS[byte]
elapsed time[s]
transition fo TCP communication(8192-5120.txt) packets on out queue[byte]
snd_cwnd*MSS[byte]
図 5.12: REDによる制御(8192KByte/5120KByte)
0 1e+06 2e+06 3e+06 4e+06 5e+06 6e+06
0 50 100 150 200 250 0
100 200 300 400 500 600
packets on out queue[byte] snd_cwnd*MSS[byte]
elapsed time[s]
transition fo TCP communication(7168-3072.txt) packets on out queue[byte]
snd_cwnd*MSS[byte]
図 5.13: REDによる制御(7168KByte/3072KByte)
Absolute[KB]\RED[KB] 64 128 256 512 1024 8192 2071.8 2426.0 2851.4 1961.8 1660.1 7680 1758.5 2210.9 2117.2 2479.5 1714.9 7168 2384.7 2104.8 1993.2 2293.6 2178.0 6656 1607.2 2104.8 1993.2 2293.6 2178.0 6144 2088.8 2167.1 2098.5 1814.3 2535.4 5632 2481.8 2076.8 2335.7 2800.0 3025.5 Absolute[KB]\RED[KB] 2048 3072 4096 5120 6144 8192 1898.0 2684.6 1981.4 1680.9 2389.2 7680
7168 2458.0 1888.9
6656 6144 5632
表 5.8: RED方式におけるレイテンシ特性[ms]
1981.35[ms]に減少し、139[ms]の性能改善がみられた。
しかしながら、グラフを見ると制御なしの場合と比較すると、やはり最大輻輳ウィンド ウサイズが小さいままであることから、輻輳ウィンドウのサイズが縮小されるごく直前で はバッファのパケット滞留容量が0となりそのままスロースタートに戻っていると予想さ れる。
現在の実装ではselectシステムコールによって入出力の準備ができた場合にアクション を発生させるようになっており、またselectによってブロックされていない場合には単純 にループしているだけとなっている。正しくは細粒度単位でOSを分析してみないことに は分らないが、ECE信号による送信側制御を行なった場合にselectの呼び出し回数が増 加し大きく削減しすぎてしまうという問題が発生している可能性がある。
また、プロセスは送信側のウィンドウサイズがどうであれ滞留するパケットの数が一定 以上だと確率的にせよそうでないにせよ、ECE信号を送ってしまう。従って、もし送信 側のホストのTCP変数が輻輳ウィンドウの輻輳直後であってもECEを受け取ってしまう ことになる。したがって、この場合では半分になった輻輳ウィンドウがさらに半分になる ことになる。この輻輳ウィンドウサイズが回復する速度はLAN内では十分に早いが、逆 に円滑な制御を妨げているとも考えられる。
もうひとつの可能性として、今回乱数についてはGNU glibcにおける乱数発生実装を 利用した。しかしこの乱数の性質については現在のところ調査が終っておらず、これが原 因となっている可能性がある。