BR450ルーターへ接続したRaspberry Pi2のネットワークスピードが遅かったので、対応した時のメモを残します。
環境
- Windows7
- 自動チューニングレベルは
disable
- 自動チューニングレベルは
- Raspberry Pi2
- Raspbian 2015-05-05
- Linux raspberrypi 3.18.11-v7+ #781 (デフォルト)
- ルーター:NTT製BR450 (アライドテレシス450系のOEM?)
症状
例えば、sudo apt-get update
をした時に、
pi@raspberrypi ~ $ sudo apt-get update Get:1 http://archive.raspberrypi.org wheezy Release.gpg [490 B] ... 34% [6 Packages 2,247 kB/6,903 kB 33%] 1,538 B/s 50min 27s
と、50分もかかるような状態でした。
一方、Windows7は特に問題なく、GB単位のダウンロードも可能です。
対応
ダウンロードが遅くなるといえば、過去にWindows7で対応した事例がありました。
BR450ルーターの下にWindows7を接続すると、接続スピードが遅くなる - メモ的な思考的な
たぶんこれだろうと考え、RaspbianのTCP受信ウィンドウまわりについて調べてみたところ、以下の記事がありました。
kernel/システムパラメタ - Linux Tips
その記事を見ると、net.ipv4.tcp_window_scaling
というパラメータについて、
RFC1323のTCPウィンドウ スケーリング(一度に送れるウィンドウの大きさを決める)を無効/有効にする。有効にすると、64K以上のTCP windowを使えるようになる。巨大なファイルをFTP/SCP/HTTPなどでやりとりする際、うまく転送出来ない場合に無効(0)にすると解決されることがあるらしい。デフォルトでは有効になっている。ただし、これを無効(0)にすると、window sizeが最大でも32768に制限されるため、伝送速度が落ちることがある。
とありました。
また、対応するLinuxのカーネルについても触れられていて、
カーネルバージョン 2.6.17 以降では、最大で 4 [MB] までのバッファサイズの 完全自動チューニングが行なわれます。
と、現在のカーネルLinux raspberrypi 3.18.11-v7+ #781
では自動チューニングが行われていそうでした。
念のためsysctl
コマンドを使いRaspbianの状態を調べてみたところ、自動チューニングが行われているようでした。
pi@raspberrypi ~ $ sysctl net.ipv4.tcp_window_scaling net.ipv4.tcp_window_scaling = 1
そのため、/etc/sysctl.conf
ファイルの一番最後にnet.ipv4.tcp_window_scaling = 0
という設定を加えることにしました。
# 編集 pi@raspberrypi ~ $ sudo nano /etc/sysctl.conf # 結果確認 pi@raspberrypi ~ $ cat /etc/sysctl.conf ... vm.min_free_kbytes = 8192 net.ipv4.tcp_window_scaling = 0
再起動して、自動チューニングが行われない設定が保存されているかを確認します。
# 再起動 pi@raspberrypi ~ $ sudo reboot # 設定の確認 pi@raspberrypi ~ $ sysctl net.ipv4.tcp_window_scaling net.ipv4.tcp_window_scaling = 0
この状態でsudo apt-get update
を行ったところ、スピードが途中で低下することなく、無事に終了しました。
なお、Raspbianに限らずどのLinuxでも発生しそうなので、今後同じような症状が出てきた時は同じようなことを試してみようと思いました。