効果的な利用法
これほど多くのチューニング可能なパラメータをどのように扱えばいいのだろうか。実は、そこがsysctlの泣きどころだ。Linuxカーネルに関する重要事項のほとんどは、多数のソースファイルに記されており、容易には参照できない。また、そうした記述は一般のユーザには理解しがたい場合もある。「/usr/src/linux/Documentation/sysctl」ディレクトリを探せば何か見つかるかもしれないが、そこにある(すべてではないが)大部分のファイルはカーネル2.2について記されたもので、もう何年も更新されていないようだ。
また、このテーマを取り上げた書籍をあたっても、十分な情報が得られるとはいえない。『Linux Server Hacks, Volume 2』(2005年O'Reilly刊)のHack #71にsysctlの解説があるが、やはり物足りない。ほかの何冊かの書籍にもsysctlが出てくるが、具体的なパラメータやヒントについては自分で調べるしかない。
試しに、仮想メモリの管理をチューニングできるswappinessパラメータの情報を探してみよう。「/usr/src/Linux/Documentation/sysctl/vm.txt」ファイルには、このパラメータの名前さえなかった。おそらく、カーネルのバージョン2.6あたりで追加されたものだからだろう。「/usr/src/linux」ディレクトリ全体に対して検索をかけたところ、「swappiness」という記述を含むファイルが5つ見つかった。うち3つは「include/linux」ディレクトリ内のヘッダファイルをインクルードするものだった。残りは「kernel/sysctl.c」と「mm/vmscan.c」で、後者には次のような情報が含まれていた。
* From 0 .. 100. Higher means more swappy. */ int vm_swappiness = 60;
これだ!これこそ探し求めていた情報だ。デフォルト値(60)とパラメータの意味に関する最低限の説明が記されている。これでどうにかvm_swappinessが使えそうだ。
私としては、「sysctl -a」を使って利用可能なパラメータを把握したうえで、Googleで追加情報を探すことをお勧めしたい。たとえば、共有メモリの割り当てを変更して動画再生の問題を解決する例やvm.swappinessの説明、あるいはIPv4ネットワークのトラフィック最適化のヒントが見つかるはずだ。
sysctlには、Linuxシステムの柔軟性の高さを示すもう1つの側面がある。ドキュメントは十分に揃ってはいないが、その機能を自分で調べることはマシンのパフォーマンスのさらなる向上につながる。これこそ、最もレベルの高いシステム管理といえよう(いや、システム的にはむしろ低レベルと呼ぶべきか)。
Federico Kerekiはウルグアイ在住のシステムエンジニア。20年以上にわたり、システムの開発、コンサルティング活動、大学での教育指導を続けている。
