/procによるLinuxチューニング [後編]
〜 /proc/sysの主要パラメータ群総解説 〜

遠田 耕平
2002/12/17

チューニングの実例

 ここで、具体的なチューニング例を2つ紹介します。

ファイルI/Oのチューニング

 何といってもファイルI/OはUNIXの基本操作ですので、チューニングできるとメリットがたくさんあります。

 よく知られているとおり、ファイルI/Oの一番のネックはディスクアクセスです。UNIXはメモリ中の「バッファ」にデータを書き込み、そのデータを後でまとめてディスクに書き出すことで、見掛け上の性能を稼いでいます。この方式も良しあしで、あまりメモリ上に(ダーティな)データを残しておくと、システムのクラッシュの際に重要なデータが失われてしまうことにもなりかねません。そこで、UNIXシステムは常にメモリ上のキャッシュとディスク上のデータを同期させるように動作します。

 この同期を取る動作は通常OSが自動的に行うので、ユーザーは大船に乗った気でいればよいのですが、アプリケーションの性質によっては動作パターンを変更することで性能を稼ぐことができます。例えば、処理中に大量のデータを一時ファイルに格納するようなアプリケーションを考えてみます。この場合、一時ファイルの内容をわざわざディスクに書き出す必要は(さほど大きくは)ないと考えられるので、極力メモリ上で動作させる方が理にかなっています。

 そのような意味での一番簡単な例がbdflushによるチューニングです。前述のように、bdflushの第1パラメータと第7パラメータは、「全メモリのうち、どの程度ダーティなバッファがたまったら実際のディスクへの書き出しを始めるか」を制御します。

 第1パラメータはいわゆる「ソフトリミット」で、このパーセンテージを超えるとI/O要求と同時にディスクへのI/Oを始めます。

 第7パラメータは「ハードリミット」で、これを超えるとbdflushデーモンによる書き出しも開始します。端的には、これらを高いパーセンテージに設定することで、ファイルI/Oを「メモリ上でのみ」動作させることができます。

 実際に試してみましょう。bdflushパラメータを変更してcpコマンドの実行時間を測定したのが下の例です。いずれもユーザー時間(user)、システム時間(sys)はほぼ同等で、実経過時間(real)のみが大きく異なっています。

30      500     0       0       500     3000    60      20      0

      real    0m5.523s
      user    0m0.030s
      sys     0m1.070s

100     500     0       0       500     3000    100     20      0

      real    0m3.813s
      user    0m0.040s
      sys     0m1.080s

 この例は、実装メモリが128Mbytesのコンピュータで80Mbytesのファイルのコピーを実施し、測定しています。128Mbytesの30%は約40Mbytesですから、80Mbytesのコピーを行うとダーティなバッファの量がしきい値(30%)を超えてしまいます。100%の場合はしきい値に到達せずにコピーが終わってしまいます。従って、上のような大きな差が出ているわけです。

 このことからも明らかですが、この方法はデータの一貫性が重要なアプリケーションやメモリ量を大きく超えるような大量のデータを扱うアプリケーションの場合にはあまり意味がないばかりか、かえって性能劣化の原因ともなります。

 何にせよ、チューニングの際にはチューニング対象のシステムの性質の分析を正しく行うことが重要なのはいうまでもありません。

ネットワークのチューニング

 ネットワークについては、CPUの処理速度とネットワーク性能の兼ね合いによってtcp_rmemのチューニングが可能です。

 起動直後のtcp_rmemは(実装メモリ量にも依存しますが)多くの場合、

tcp_rmem=4096 87380 174760

になっているはずです。この状態でギガビットイーサネット・インターフェイスを通してFTPで200Mbytesの転送を行ったところ、平均して60Mbytes/sの性能が出ていました。

 次に、設定を

tcp_rmem=4096 873800 1747600

と変更して(一度FTPを抜けてFTPサーバを終了させて)FTPを再実行したところ、平均して76Mbytes/sの性能が出るようになりました。

 ギガビットネットワークなど高速のメディアの場合、特にネットワーク性能が高くなってきていてCPU性能とのバランスが重要になるため、このように顕著な差が表れます。

3/4

Index
/procによるLinuxチューニング [後編]
 〜 /proc/sysの主要パラメータ群総解説 〜
  Page 1
/proc/sys/kernelディレクトリ
  Page 2
/proc/sys/fsディレクトリ
/proc/sys/vmディレクトリ
/proc/sys/netディレクトリ
  Page 3
チューニングの実例
 ファイルI/Oのチューニング
 ネットワークのチューニング
  Page 4
Appendix
 パラメータ/デフォルト値一覧表

Linux Square全記事インデックス


 Linux Squareフォーラム Linuxカーネル関連記事
連載:Linux Kernel Watch(連載中)
Linuxカーネル開発の現場ではさまざまな提案や議論が交わされています。その中からいくつかのトピックをピックアップしてお伝えします
連載:Linuxファイルシステム技術解説
ファイルシステムにはそれぞれ特性がある。本連載では、基礎技術から各ファイルシステムの特徴、パフォーマンスを検証する
特集:全貌を現したLinuxカーネル2.6[第1章]
エンタープライズ向けに刷新されたカーネル・コア
ついに全貌が明らかになったカーネル2.6。6月に正式リリースされる予定の次期安定版カーネルの改良点や新機能を詳しく解説する
特集:/procによるLinuxチューニング[前編]
/procで理解するOSの状態

Linuxの状態確認や挙動の変更で重要なのが/procファイルシステムである。/procの概念や/procを利用したOSの状態確認方法を解説する
特集:仮想OS「User Mode Linux」活用法
Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説
Linuxのカーネルメンテナは柔軟なシステム
カーネルメンテナが語るコミュニティとIA-64 Linux
IA-64 LinuxのカーネルメンテナであるBjorn Helgaas氏。同氏にLinuxカーネルの開発体制などについて伺った

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間