LinuxMagic.org

オープンソースのサポートサイトを目指します。

Linux Network Performance Tuning

今回はLinuxのネットワークチューニングの一部を書きます。

このチューニングはkernelのバージョンに(2.6.17以前が前提 )依存するので、やった方がいい場合とAutoチューニングでお任せの方がいい場合があるので注意が必要です。

また、チューニングの目的がはっきりした方がよいでしょう。やはりチューニングの目的は巨大なファイルを転送する処理が多いか少ないかまた、その頻度だと思います。

もし、それほどのアクセス、やり取りするファイルが少ないならばやらない方がいい場合もあります。

まず、基本はネットワークの高速化に役立つパラメータはNetwork Bufferというものです。

デフォルトでは、例えばtcp bufferサイズは小さいのでこれを大きくすると高速化が狙えます。

それでは、実際に現在設定されているサイズを確認してみましょう。

(tcp_memory)
$ cat /proc/sys/net/ipv4/tcp_mem
12288 16384 24576

上記のような感じで帰ってくると思います。

(receive socket memoryの標準と最大)
$ cat /proc/sys/net/core/rmem_default
109568
$ cat /proc/sys/net/core/rmem_max
109568
(send socket memoryの標準と最大)
$ cat /proc/sys/net/core/wmem_default
109568
$ cat /proc/sys/net/core/wmem_max
109568
(option memory buffer)
$ cat /proc/sys/net/core/optmem_max
10240

それでは、これらのパラメータをチューニングするためにreceive memory(rmem)send memory(wmem)を全てのプロトコルで通信キュー上で12MB取るように設定を行ってみましょう。

$ echo 'net.core.wmem_max=12582912' >> /etc/sysctl.conf
$ echo 'net.core.rmem_max=12582912' >> /etc/sysctl.conf

更に、最小、初期、最大のメモリ設定を行います。

$ echo 'net.ipv4.tcp_rmem= 10240 87380 12582912' >> /etc/sysctl.conf
$ echo 'net.ipv4.tcp_wmem= 10240 87380 12582912' >> /etc/sysctl.conf

沢山のメモリが使えるようwindow scalingの値も変更します。

$ echo 'net.ipv4.tcp_window_scaling = 1' >> /etc/sysctl.conf
RFC1323のタイムスタンプ形式にあわせます。
$ echo 'net.ipv4.tcp_timestamps = 1' >> /etc/sysctl.conf
acknowledgementの選択
$ echo 'net.ipv4.tcp_sack = 1' >> /etc/sysctl.conf

通信上のrouting情報のキャッシュを行う設定ですが、標準ではキャッシュするようになっています。しかし沢山の不特定多数の接続を捌こうとしたばあい、パフォーマンスが悪くなってしまします。下記はキャッシュを除く設定になります。

$ echo 'net.ipv4.tcp_no_metrics_save = 1' >> /etc/sysctl.conf
カーネルが処理する前に通信データをキューイングして最大待たせられるパケットの数を設定します。
$ echo 'net.core.netdev_max_backlog = 5000' >> /etc/sysctl.conf
カーネル設定を更新。
$ sysctl -p

変更した内容を確認してみましょう。

$ tcpdump -ni eth0

マイページ

以前書いていたブログはまた、そのまま復帰します。たまには読んでください。

Linuxと関係ないかもよ日記

ソーシャルブックマークを始めました。といっても個人の備忘録ならぬ役に立ったサイトの登録です!

ソーシャルブックマーク

お役立ちLinux Links

Archives

RSSフィード配信

Articles RSS Feed

Tech Tips

最新ブックマーク