Linuxのネットワークスループット改善法教えます

文:Vincent Danen(TechRepublic) 翻訳校正:原井彰弘
2008-01-23 15:00:00
  • このエントリーをはてなブックマークに追加

 Linuxのカーネルやそれを含むディストリビューションでは、ネットワークのパラメータに影響を与えるような設定の一部は、デフォルトでは非常に控えめに設定されていることが一般的である。このような設定をチューニングするには、/procファイルシステムを使用する方法やsysctlプログラムを用いる方法があるが、どちらかというと後者の方がよい場合が多い。なぜかというと、後者の場合は/etc/sysctl.confファイルの内容を読み取るため、リブートを行っても設定が保持されるからだ。

 /etc/sysctl.confで行える設定のうち、ネットワークのパフォーマンスを向上させる可能性がある設定を以下に示そう。

net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_syncookies = 1
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

 上記の設定は、/etc/sysctl.confにすでに存在する設定を置き換えるためのものではなく、既存の設定を補うためのものだ。最初のコマンドでは、クライアントがより高速にデータをダウンロードできるようにしている。TCPのウィンドウスケーリングを有効にしてTCPパケットの余分なビットを利用することが可能になり、ウィンドウのサイズを増加させられるようになるのである。

 2つ目のコマンドでは、TCP SYN cookiesを有効にしている。この値はデフォルトで有効になっていることもあるのだが、受信したコネクションを処理するために利用されているサーバのリソースが、SYN floodsなどによって枯渇するような状況を防ぐために、非常に効果的である。

 最後の4つのオプションでは、TCPの送受信の際により多くのバッファを利用できるようにしている。これによって、アプリケーションがデータをより高速に取り出し、ほかのリクエストに備えることが可能になる。またこの設定によって、クライアントがビジー状態の場合にサーバへデータを送信する能力も向上する。

 これらのコマンドを/etc/sysctl.confファイルに追加すると、リブートが行われる都度設定が有効になるようになる。もし、リブートを行わずに直ちに設定を有効にしたい場合は、以下のコマンドを使用すればよい。

# sysctl -p /etc/sysctl.conf

 また、現在設定が行われているsysctlのオプションをすべて表示するには、以下のコマンドを実行する。

# sysctl -a

 このコマンドを実行すると、すべての設定のキーと現在の値が一覧で表示される。新しいデフォルト値の設定と保存はsysctl.confファイルで行える。このコマンドで出力される値は、カーネルで定義されており現在有効になっているデフォルト値なのである。ちなみに、特定の項目の値を表示したければ以下のように実行すればよい。

# sysctl -q net.ipv4.tcp_window_scaling

 同様に、sysctl.confを直接編集せずにある項目の値を設定するには、以下のように実行する。ただし、このように設定した場合はリブートを行うともとの値に戻ってしまう。

# sysctl -w net.ipv4.tcp_window_scaling=1

 しかし、この設定方法は特定の設定の有効性をデフォルト値を変更せずテストしたい場合に便利だろう。

  • 新着記事
  • 特集
  • ブログ