Develop and Download Open Source Software

OpenSource Downloads

7-Zip  (4,208)  
HandBrake Japanese Language Version  (3,353)  
CrystalDiskInfo  (1,743)  
CotEditor  (1,120)  
CrystalDiskMark  (866)  
Boookends  (788)  
SMPlayer  (642)  
えこでこツール  (599)  
Tera Term  (595)  
10  FFFTP  (579)  
11  Cabos  (530)  
12  BathyScaphe  (494)  
13  ffdshow  (481)  
14  MergeDoc  (464)  
15  ギコナビ  (438)  
More >>

最近ブックマークされた記事

sysctlによるカーネルのチューニング

2008年09月12日 13:05 Federico Kereki 1 2

 Linuxカーネルは柔軟性が高く、sysctlコマンドを利用すれば、カーネルパラメータを動的に変更してその場で動作を変えることさえ可能だ。sysctlのインタフェースでは、LinuxまたはBSDの何百というカーネルパラメータを参照したり変更したりできる。変更はただちに反映されるが、リブート後まで変更を保留する手段もある。うまくsysctlを使えば、カーネルを再コンパイル翻訳記事)しなくてもマシンの最適化が可能であり、しかもその効果をすぐに確認できる。

 とりあえずsysctlでどんな変更ができるのかを知るには、「sysctl -a」を実行して扱えるパラメータをすべて表示するといい。そのリストは非常に長いもので、私のマシンでは712もの設定可能な項目が表示される。

$ sysctl -a
kernel.panic = 0
kernel.core_uses_pid = 0
kernel.core_pattern = core
kernel.tainted = 129

...(以下略)...

 ある変数の値だけを確認したければ、「sysctl vm.swappiness」のようにすればよい。また、「sysctl vm」とすれば「vm」で始まるすべての変数が表示される。「-n」オプションを追加すると、変数の名前は表示されずに値だけが出力される。反対に、「-N」オプションでは、変数の値は出さずに名前だけが出力される。

 変数の値を変更するには、「-w」オプションを用いた「sysctl -w <変数>=<値> 」という構文を使う。たとえば、「sysctl -w net.ipv6.conf.all.forwarding=1」とすれば、指定した変数が「true」になり(0は「no」または「false」を、1は「yes」または「true」を意味する)、IPv6転送が有効になる。なお、仕様改訂のためか「-w」オプションは必要ない場合もある。あとは各自で実際に変更を試してもらいたい。

 詳細については、「man sysctl」を実行して、標準のドキュメントを参照してほしい。

systlと「/proc」ディレクトリ
 「/proc/sys」(翻訳記事)という仮想ディレクトリにも、sysctlパラメータの参照と変更が可能なインタフェースがある。たとえば、「/proc/sys/vm/swappiness」ファイルは、「sysctl.conf」ファイルの「vm.swappiness」パラメータと同じものを指す。つまり、先頭の「/proc/sys/」を外してドット(.)をスラッシュ(/)で置き換えれば、対応するsysctlパラメータになるわけだ (ちなみに、実はドットによるスラッシュの置き換えは不要で、スラッシュの使用も認められているが、一般的にはドット表記が用いられる)。そのため、「echo 10 >/proc/sys/vm/swappiness」は、「sysctl -w vm.swappiness=10」を実行するのと同じことになる。ただし、当然のことながら、該当する「/proc/sys」ファイルが読み取り専用になっている場合、そのパラメータはsysctlコマンドを使っても変更できない。

 sysctlパラメータの値は、ブート時に「/etc/sysctl.conf」ファイルから読み込まれる。このファイルには、空白行やコメント(“#”またはセミコロンで始まる行)が含まれていてもよいが、それ以外は「<変数>=<値>」形式の行でなければならない。参考までに、私の「sysctl.conf」ファイルは次のようになっている。この設定は、いつでも「sysctl -p」コマンドによって適用できる。

# Disable response to broadcasts.
net.ipv4.icmp_echo_ignore_broadcasts = 1

# enable route verification on all interfaces
net.ipv4.conf.all.rp_filter = 1

# enable ipV6 forwarding
net.ipv6.conf.all.forwarding = 1

# increase the number of possible inotify(7) watches
fs.inotify.max_user_watches = 65536
最終更新:2008年11月12日 17:07