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
ソーシャルブックマークを始めました。といっても個人の備忘録ならぬ役に立ったサイトの登録です!
Articles RSS Feed




