Windowsのループバック接続帯域を調査

動画像を表示するためのWebアプリを作ることを考えています。 最終的に画像はWebSocketsで転送するつもりですが、まずは生の帯域を知りたいと思いました。 そこで、Windows上のループバック接続の帯域を計測してみました。

iPerfをダウンロードし、 コマンドプロンプトを二つ開いて、それぞれでサーバとクライアントを動作させます。

サーバ側(以下に説明する2回のテストの結果も表示されている):

iperf-3.1.3-win64>iperf3.exe -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 127.0.0.1, port 58130
[  5] local 127.0.0.1 port 5201 connected to 127.0.0.1 port 58131
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec   441 MBytes  3.70 Gbits/sec
[  5]   1.00-2.00   sec   509 MBytes  4.27 Gbits/sec
[  5]   2.00-3.00   sec   519 MBytes  4.35 Gbits/sec
[  5]   3.00-4.00   sec   535 MBytes  4.49 Gbits/sec
[  5]   4.00-5.00   sec   561 MBytes  4.71 Gbits/sec
[  5]   5.00-6.00   sec   570 MBytes  4.78 Gbits/sec
[  5]   6.00-7.00   sec   579 MBytes  4.85 Gbits/sec
[  5]   7.00-8.00   sec   570 MBytes  4.78 Gbits/sec
[  5]   8.00-9.00   sec   578 MBytes  4.85 Gbits/sec
[  5]   9.00-10.00  sec   560 MBytes  4.70 Gbits/sec
[  5]  10.00-10.00  sec   933 KBytes  3.96 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.00  sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-10.00  sec  5.29 GBytes  4.55 Gbits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 127.0.0.1, port 58146
[  5] local 127.0.0.1 port 5201 connected to 127.0.0.1 port 58147
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec   517 MBytes  4.32 Gbits/sec
[  5]   1.00-2.00   sec   535 MBytes  4.49 Gbits/sec
[  5]   2.00-3.00   sec   551 MBytes  4.63 Gbits/sec
[  5]   3.00-4.00   sec   565 MBytes  4.74 Gbits/sec
[  5]   4.00-5.00   sec   596 MBytes  4.99 Gbits/sec
[  5]   5.00-6.00   sec   608 MBytes  5.10 Gbits/sec
[  5]   6.00-7.00   sec   622 MBytes  5.22 Gbits/sec
[  5]   7.00-8.00   sec   621 MBytes  5.21 Gbits/sec
[  5]   8.00-9.00   sec   608 MBytes  5.10 Gbits/sec
[  5]   9.00-10.00  sec   604 MBytes  5.07 Gbits/sec
[  5]  10.00-10.00  sec  1.25 MBytes  3.58 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.00  sec  5.69 GBytes  4.89 Gbits/sec                  sender
[  5]   0.00-10.00  sec  0.00 Bytes  0.00 bits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

クライアントは、転送方向を変えて2回実行します。最初はクライアントからサーバへ、 2番目はサーバからクライアントへ(-Rオプション)。

iperf-3.1.3-win64>iperf3 -c 127.0.0.1
Connecting to host 127.0.0.1, port 5201
[  4] local 127.0.0.1 port 58131 connected to 127.0.0.1 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec   441 MBytes  3.70 Gbits/sec
[  4]   1.00-2.00   sec   509 MBytes  4.27 Gbits/sec
[  4]   2.00-3.00   sec   519 MBytes  4.35 Gbits/sec
[  4]   3.00-4.00   sec   535 MBytes  4.49 Gbits/sec
[  4]   4.00-5.00   sec   561 MBytes  4.71 Gbits/sec
[  4]   5.00-6.00   sec   570 MBytes  4.78 Gbits/sec
[  4]   6.00-7.00   sec   579 MBytes  4.85 Gbits/sec
[  4]   7.00-8.00   sec   569 MBytes  4.78 Gbits/sec
[  4]   8.00-9.00   sec   578 MBytes  4.84 Gbits/sec
[  4]   9.00-10.00  sec   560 MBytes  4.70 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-10.00  sec  5.29 GBytes  4.55 Gbits/sec                  sender
[  4]   0.00-10.00  sec  5.29 GBytes  4.55 Gbits/sec                  receiver

iperf Done.

iperf-3.1.3-win64>iperf3 -c 127.0.0.1 -R
Connecting to host 127.0.0.1, port 5201
Reverse mode, remote host 127.0.0.1 is sending
[  4] local 127.0.0.1 port 58147 connected to 127.0.0.1 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec   517 MBytes  4.34 Gbits/sec
[  4]   1.00-2.00   sec   535 MBytes  4.49 Gbits/sec
[  4]   2.00-3.00   sec   551 MBytes  4.62 Gbits/sec
[  4]   3.00-4.00   sec   565 MBytes  4.74 Gbits/sec
[  4]   4.00-5.00   sec   596 MBytes  5.00 Gbits/sec
[  4]   5.00-6.00   sec   608 MBytes  5.10 Gbits/sec
[  4]   6.00-7.00   sec   623 MBytes  5.22 Gbits/sec
[  4]   7.00-8.00   sec   621 MBytes  5.21 Gbits/sec
[  4]   8.00-9.00   sec   608 MBytes  5.10 Gbits/sec
[  4]   9.00-10.00  sec   605 MBytes  5.08 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-10.00  sec  5.69 GBytes  4.89 Gbits/sec                  sender
[  4]   0.00-10.00  sec  5.69 GBytes  4.89 Gbits/sec                  receiver

iperf Done.

結果を見てみると、サーバからクライアントへの通信の方が若干高速(4.55Gbps対4.89Gbps)のようですが、 いずれにしても1Gbpsは優に超えています。結局、手元の環境だと500MB/s程度はいけるようですね。

実験したのはWindows 10, i7-6500Uのマシンです。

ちなみに、同じ実験を上記PCで動作する仮想マシン上のUbuntuで実行してみたら、 30Gbps以上の帯域が出てしまいました。 iperf version 2.0.5 (08 Jul 2010) pthreads, TCP window size: 2.50 MByte (default), Kernel 3.13.0-32-genericでの結果です。1CPUしか割り当てていませんが、あっさりとWindowsでの計測結果を6-7倍凌駕しました。

参考:

VirtualBoxでブリッジ接続ができない問題の対処方法

VirtualBoxで動作しているUbuntuをTFTP,NFSサーバとして(ブリッジインタフェースで)動作させ、 Z-turn BoardからイーサネットでアクセスしてLinuxを動かそうとしてみたところ、 どうにも仮想マシンとZ-turn Boardとの間で通信ができませんでした。

ホストOS(Windows10)からゲストOSのUbuntuのブリッジインタフェースへの通信はできているし、 Z-turn BoardからホストOSへのイーサネット通信もできているので、物理的な故障ではなく、 VirtualBoxのブリッジが正常に動作していないように思われました。

結果としては、Stackoverflow にあった方法で解決できました。**VirtualBoxをいったん削除して、管理者モードでインストーラを起動してインストールする、**というものです。 VirtualBoxのバージョンは5.1.14です。

2017/3/11追記 上記で解決したかと思いましたが、どうやら実際は解決していませんでした。インストールした直後は動作するようですが、 パソコンをサスペンドして、復帰してから試すと、また動作しなくなっています。VirtualBoxがブリッジに使用するためのドライバに不具合があり、 パソコンのサスペンドを正しくハンドルできていないようです。

検索してみたら、まさにこの問題が登録されていました。 Network adapters not working after host returns from sleep Win 7 host Linux Mint 17.2 guest

上記ページに、ひとまずの解決策があります。VirtualBoxの設定からブリッジネットワークアダプタを一旦解除して、再度有効にする、という方法です。 私の場合もその方法で接続できる様子でした。それで、下記のようなBATファイルを作成して実行することにします。

"c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm Ubuntu nic3 null
"c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm Ubuntu nic3 bridged "Intel(R) Ethernet Connection I219-V"

Ubuntuというのは、仮想マシンの名前で、nic3はアダプター3に対応します。

« 2/2