Hack BBS

[全部のスレッド一覧][新規投稿][記事の削除・変更] [Home Page]

返信投稿はタイトルのリンクをクリックして下さい
スレッド【No.3120】の中の記事をすべて表示しています

【No.3120】のスレッド
05/10/25(火) 15:09:09 投稿者[へいはち ] [No.3120]のスレッド内
【No.3120】 タイトル[TCPウインドウサイズが変わりません] この記事がスレッドの最初です
 お世話になります。

 Vine3.1化したHD-HGLAN (KERNEL 2.4.20_mvl31)を使っています。
 ネットワークのパフォーマンスが思わしくないので、TCPウインドウサイズを変えようと思ったのですが、どうしても変わってくれません。

 先日、ADSLから光回線に変わりまして……。
 wget でのダウンロードが他のマシンでは4MB/sほど出ているのに、LinkStationからだと700KB/sほどしか出ません。
 LinkStationでも、ローカル環境のサーバーからのダウンロードでは6MB/sくらいは余裕で出ていますから、ボトルネックはCPUパワーではなさそうです。
 となると、怪しいのはTCPウインドウサイズなわけですが……。


 まず 現状確認。

[root@Link ~]# ifconfig
eth0 リンク方法:イーサネット ハードウェアアドレス 00:0D:0B:69:23:26
inetアドレス:192.168.0.7 ブロードキャスト:192.168.0.255 マスク:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RXパケット:283 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:244 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0
RX bytes:206050 (201.2 Kb) TX bytes:18867 (18.4 Kb)

[root@Link ~]# route -e
カーネルIP経路テーブル
受信先サイト ゲートウェイ ネットマスク フラグ MSS Window irtt インタ
ーフェース
192.168.0.0 * 255.255.255.0 U 40 0 0 eth0
127.0.0.0 * 255.0.0.0 U 40 0 0 lo
default 192.168.0.1 0.0.0.0 UG 40 0 0 eth0

 ウインドウサイズは設定されていません。

 telnetでもうひとつログインして、

[root@Link /tmp]# tcpdump > dump.log

 とやってから、

[root@Link ~]# wget http://xxxxxxxx.xxx.xxx/yyyyyyy.yyy

 と、インターネットに対して、 wget でなにかを取りに行きます。

 そのときの、dump.logを確認すると、

14:13:16.900929 IP link.1042 > xxx.xxx.xxx.xxxx.http: . ack 29443 win 8412 <nop,nop,timestamp 55022 143352508>
14:13:16.917278 IP xxx.xxx.xxx.xxxx.http > link.1042: . 29443:30845(1402) ack 164 win 32947 <nop,nop,timestamp 143352509 55022>

 のように、linkStation側のウインドウサイズは8412になっていました。


 ここでウインドウサイズを変えてみます。

[root@Link ~]# route del default gw 192.168.0.1
[root@Link ~]# route add default gw rooter window 65044
[root@Link ~]# route -e
カーネルIP経路テーブル
受信先サイト ゲートウェイ ネットマスク フラグ MSS Window irtt インタ
ーフェース
192.168.0.0 * 255.255.255.0 U 40 0 0 eth0
127.0.0.0 * 255.0.0.0 U 40 0 0 lo
default 192.168.0.1 0.0.0.0 UG 40 65044 0 eth0

 このように、ウインドウサイズは65044になったように見えるのですが……。

 ふたたび tcpdump と wget で確認してみます。

[root@Link /tmp]# tcpdump > dump.log
[root@Link ~]# wget http://xxxxxxxx.xxx.xxx/yyyyyyy.yyy

14:20:17.512213 IP link.1046 > xxx.xxx.xxx.xxx.http: . ack 48476 win 8412 <nop,nop,timestamp 97082 143211420>
14:20:17.512281 IP xxx.xxx.xxx.xxx.http > link.1046: . 48476:49878(1402) ack 164 win 32947 <nop,nop,timestamp 143211420 97080>

 と、このように、変化ありません。

 同様の手順を、他の実験機(Vine3.2のPC/AT互換機)で行うと、ウインドウサイズは変化しています。ウインドウサイズ8000くらいのときと、65044のときとでは、10倍程度の速度変化が現れています。
 なので、ウインドウサイズ変更の手順は間違っていないと思うのですが……。

 HD-HGLANの場合、カーネルに組みこまれている RealTek8169のドライバの仕様かなにかで、ウインドウサイズが変わらなくなっているのでしょうか?
 玄箱ではどうなのでしょうか?



=====
 なおLinkStationのウインドウサイズですが、8412になっているのはMTU=1500のときで、MTU=7400のときには、14720になっていました。(少しパフォーマンス改善)

====
 ところで起動時からウインドウサイズを変えるようにするには、どこで変えるのが正しい作法なのでしょう?
 /etc/rc.d/rc.local あたりに入れておいても用は足りるのですが、なにか正しい設定法ではないような気が……。

=====
 ちなみに wgetでhttp://www.yamasita.jp/linkstation/index.html を取得してみたときのウインドウサイズは、5792となっていました。

05/10/26(水) 01:53:46 投稿者[あっくん] [No.3120]のスレッド内
【No.3122】 タイトル[さっぱりさっぱり] 【No.3120】に対する返信
HGは rwinデフォだと5840ですね。

>[root@Link ~]# route del default gw 192.168.0.1
>[root@Link ~]# route add default gw rooter window 65044

ここで windowではなくmssを大きくしてあげるとrwinもでかくなります。

# route add default gw 192.168.0.1 mss 50000

どこかまではrwinの値は mss * 4 なんだけど??

さっぱりよくわからないっす

05/10/26(水) 21:56:01 投稿者[へいはち ] [No.3120]のスレッド内
【No.3125】 タイトル[メモリが少ないせい?] 【No.3122】に対する返信
#route add default gw 192.168.0.1 mss 50000

 とやってみました。
 ネゴシエートのときのmssが49960になって、スケール値は0で、ウインドウサイズは32768となっているみたいです。
 ちょっと速くなりました。

HD-HGLANの場合、
 100M接続のときには、ウインドウサイズはmssの4倍。
 1000M接続のときには、mssの2倍がデフォルトである模様です。

 HD-HGLANのrmemまわりの設定を調べてみると、Linuxデフォルトになっているようです。

# cat /proc/sys/net/ipv4/tcp_window_scaling
1
# cat /proc/sys/net/ipv4/tcp_timestamps
1

 となっているので、自動調整されるはずなんですが……。


 色々調べてみまして、どうも搭載メモリが少ないために、ウインドウサイズが小さいままになっているのではないかと……。

 ためしに、以下のようにしてみますと……。

# route del default gw 192.168.0.1
# route add default gw 192.168.0.1 window 65535
# echo 4096 873800 1747600 > /proc/sys/net/ipv4/tcp_rmem

 ネゴシエート時にウインドウスケールが4となり、ウインドウサイズもそれなりに大きくなって、wgetにおけるダウンロード速度も良好になりました。国内の近場(20msくらいの距離)で、2MB/sくらい。
 SAMBAのファイルサーバーのパフォーマンスも少し上がりました。

 設定値がデカすぎるような気もするので、要調整ですが。

05/10/28(金) 01:56:14 投稿者[あっくん] [No.3120]のスレッド内
【No.3137】 タイトル[Re: メモリが少ないせい?] 【No.3125】に対する返信
> ためしに、以下のようにしてみますと……。
># route del default gw 192.168.0.1
># route add default gw 192.168.0.1 window 65535
># echo 4096 873800 1747600 > /proc/sys/net/ipv4/tcp_rmem

素のHGだとこの手順でRWIN変わりません・・・

# sysctl net/ipv4/tcp_rmem
net/ipv4/tcp_rmem = 4096 873800 1747600

# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.0.0 * 255.255.0.0 U 40 0 0 eth0
default 192.168.1.254 0.0.0.0 UG 40 65535 0 eth0
# /usr/local/wget/bin/wget -O - -q http://www.speedguide.net:8117/ | grep WIN | cut -d '&' -f 3-11
IP_MTU_DISCOVER=0&WIN=5840&RWIN=5840&MSS=1414&SCALE=0&TTL=49&TSOPT=1&SACK_PERM=1&IP_TOS=0
r


05/10/27(木) 00:44:00 投稿者[TM] [No.3120]のスレッド内
【No.3127】 タイトル[Re: ネットワークの速度] 【No.3125】に対する返信
うちの玄箱HG vine(ver 不明。けどstableの最新)も言われてみれば
400kbyte/sec程度。光マンション50M, ルータとは100Mで。

同じ環境で、ルータからの11g 経由windowsノートで2Mbyteぐらいは出ます
ので明らかに遅かったです。これは放置できぬと思ってしまいました。

それでみようみまねで、
route add default gw 192.168.1.1 mss 50000
をたたいてみると2Mbyte越えてしまいびっくり。

次に
route add default gw 192.168.1.1 window 65535
echo 4096 873800 1747600 > /proc/sys/net/ipv4/tcp_rmem
をたたいてみると4M近く(ときどきに越える)出るようになりました。

これは素晴らしいということで/etc/rc2.dの下にシェルを書きました。

当方プログラマーではありますが route add の使い方はぜんぜん
わからんです。尊敬します。

05/10/27(木) 22:04:00 投稿者[へいはち ] [No.3120]のスレッド内
【No.3130】 タイトル[いまひとつわかっていません] 【No.3127】に対する返信
 いまひとつ、なにをやっているのかわかっていないでいじっていますので、詳しい方の意見をうかがってみたいところです。
 とりあえず、この設定で速くなっているようですが……。いいのかな。

 RWINのサイズ調整は、TCPパケットを受けるときに有効ですので、サーバーとして使うときの送信パフォーマンスには影響ないはずです。受信時の速度だけに影響します。

 お使いのWINDOWSノートのほうも、RWINサイズを変えてやれば4Mくらい出るようになるのではないでしょうか? WINDONWではデフォルトはかなり小さかったはずです。(チューニングなしでブロードバンド回線に繋ぐと速度が出ないというのはよくいわれる話)

05/10/28(金) 03:22:12 投稿者[TM] [No.3120]のスレッド内
【No.3140】 タイトル[Re: ネットワークの速度] 【No.3130】に対する返信

> とりあえず、この設定で速くなっているようですが……。いいのかな。

 ぐぐってみると確かに値が大きすぎるようなので
 route add default gw 192.168.1.1 mss 1460 window 64000
 としてみました。結果、悪くないです。
wget の相手は東大のftpを利用しました。4Mbyte/sec 近辺です。
 あとは上りの速度ですが速い回線持ってる友人に試してもらおうかと
 思います。

> お使いのWINDOWSノートのほうも、RWINサイズを変えてやれば4Mくらい出る

windows ノートは 802.11g なのでどんなに出ても 3Mbyte/sec という
 ことで現状の 2Mbyte/sec は満足しています。




05/11/02(水) 02:50:20 投稿者[TM] [No.3120]のスレッド内
【No.3163】 タイトル[Re: ネットワークの速度] 【No.3140】に対する返信
 自己レスです。

> あとは上りの速度ですが速い回線持ってる友人に試してもらおうかと
> 思います。

 会社からでかいファイルをダウンロードしてみました。
 クライアントは Northwood 3.6G/P4/win xp/IEで右クリックでdownload、
サーバは自宅の玄箱 vine/apache という環境で 2.1Mbyte/sec 出てました。
 はっきり言って、異常に速いんじゃないでしょうか。

自宅がFLETS光マンション50Mbit/sec に対してやや遅いのかもしれません
 が実用上は十分すぎる速さです。

 ちょうど大きなムービーを友人に公開しなきゃいけなかったので
 今回の設定はたいへん有用でした。

05/11/05(土) 20:31:40 投稿者[よし] [No.3120]のスレッド内
【No.3198】 タイトル[Re: ネットワークの速度] 【No.3163】に対する返信
> 自己レスです。
>
>> あとは上りの速度ですが速い回線持ってる友人に試してもらおうかと
>> 思います。
>
> 会社からでかいファイルをダウンロードしてみました。
> クライアントは Northwood 3.6G/P4/win xp/IEで右クリックでdownload、
> サーバは自宅の玄箱 vine/apache という環境で 2.1Mbyte/sec 出てました。
> はっきり言って、異常に速いんじゃないでしょうか。
>
> 自宅がFLETS光マンション50Mbit/sec に対してやや遅いのかもしれません
> が実用上は十分すぎる速さです。
>
> ちょうど大きなムービーを友人に公開しなきゃいけなかったので
> 今回の設定はたいへん有用でした。

こんばんは^^

今更なのですが、実は私も光を導入して調べてみると遅い事が判明しました。
また、色々調べてみると参考的なHPを見つけましたので投稿しときます。

http://www.atmarkit.co.jp/flinux/special/proctune/proctune02c.html