« PostgreSQL で 24:00 と 0:00 を扱う | トップページ | Factory の私達 »

2009年3月 8日 (日)

回線速度の計測 ( その2 )

回線速度の計測 の続き。

Linux サーバ側で、ローカル・ループバックに送ってみました。

[localhost]$ java SpeedTest client localhost 9999
145
187
874
1507
7417
14891
73285
3615779.3103448274
4.485886631016043E7
4.798974828375286E7
5.566428666224287E7
5.654987191586895E7
5.63334094419448E7
5.723277614791567E7
4.603496258174721E7

50Mbps くらい。伝送効率 0.5 というのは低いですが、ありえない値という程でもないですね。

としますと、 Linux サーバ側に問題がある、という訳でもなさそうです。 Windows クライアント - Linux サーバ間の通信の問題と考えるべきでしょう。

Wireshark を使って、 Windows クライアントのパケットを除いてみます。


[TCP Dup ACK 27#1] distinct > saiseh [ACK] Seq=1 Ack=9653 Win=26280 Len=0 SLE=11113 SRE=12573
saiseh > distinct [ACK] Seq=22225 Ack=1 Win=65535 Len=1460
[TCP Dup ACK 27#2] distinct > saiseh [ACK] Seq=1 Ack=9653 Win=26280 Len=0 SLE=11113 SRE=14033
[TCP Fast Retransmission] saiseh > distinct [ACK] Seq=9653 Ack=1 Win=65535 Len=1460
[TCP Dup ACK 27#3] distinct > saiseh [ACK] Seq=1 Ack=9653 Win=26280 Len=0 SLE=11113 SRE=15493
saiseh > distinct [PSH, ACK] Seq=23685 Ack=1 Win=65535 Len=892
[TCP Dup ACK 27#4] distinct > saiseh [ACK] Seq=1 Ack=9653 Win=26280 Len=0 SLE=11113 SRE=16385
[TCP Dup ACK 27#5] distinct > saiseh [ACK] Seq=1 Ack=9653 Win=26280 Len=0 SLE=11113 SRE=17845
[TCP Dup ACK 27#6] distinct > saiseh [ACK] Seq=1 Ack=9653 Win=26280 Len=0 SLE=11113 SRE=19305
[TCP Dup ACK 27#7] distinct > saiseh [ACK] Seq=1 Ack=9653 Win=26280 Len=0 SLE=11113 SRE=20765
[TCP Dup ACK 27#8] distinct > saiseh [ACK] Seq=1 Ack=9653 Win=26280 Len=0 SLE=22225 SRE=23685 SLE=11113 SRE=20765
distinct > saiseh [ACK] Seq=1 Ack=20765 Win=29200 Len=0 SLE=22225 SRE=23685
[TCP Dup ACK 41#1] distinct > saiseh [ACK] Seq=1 Ack=20765 Win=29200 Len=0 SLE=22225 SRE=24577
saiseh > distinct [ACK] Seq=24577 Ack=1 Win=65535 Len=1460
[TCP Dup ACK 41#2] distinct > saiseh [ACK] Seq=1 Ack=20765 Win=29200 Len=0 SLE=22225 SRE=26037
[TCP Fast Retransmission] saiseh > distinct [ACK] Seq=20765 Ack=1 Win=65535 Len=1460

"Dup ACK" というのが一杯出てます。クライアントがパケットを送り出すスピードが速すぎて、サーバが受け取れない、ってことですかね。

以下を参考に、 Windows の TCP ウインドウ・サイズを、 64 KB から 17KB へと変えてみましたが、特に変化なし。

Windows 2000 および Windows Server 2003 の TCP 機能について - Microsoft Knowledge Base 224829

Java プログラムの書き込みバッファ・サイズを変更する、というのは効くみたいです。

   final int BUFFER_SIZE = 1460 * 4;
    System.out.print("Buffer: ");
    System.out.println(BUFFER_SIZE);

    Socket sock = new Socket(host, port);
    sock.setSendBufferSize(BUFFER_SIZE);
    sock.setReceiveBufferSize(BUFFER_SIZE);

    BufferedOutputStream out =
      new BufferedOutputStream(sock.getOutputStream(), BUFFER_SIZE);

でも、 これだけですと、 10Mbps くらいが限度みたいですね。

>java -client SpeedTest client 192.168.0.125
9999
Buffer: 5840
1982
1205
4013
8118
40793
81263
416608
264524.7225025227
6961500.41493776
1.0451791677049588E7
1.0333343187977334E7
1.0281920917804526E7
1.0322788969149552E7
1.0067747138797143E7
8383373.861174061

|

« PostgreSQL で 24:00 と 0:00 を扱う | トップページ | Factory の私達 »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/80472/28525071

この記事へのトラックバック一覧です: 回線速度の計測 ( その2 ):

« PostgreSQL で 24:00 と 0:00 を扱う | トップページ | Factory の私達 »