nice値を変える November 30, 2006
nice, reniceというコマンドはけっこう知られていないかもしれない。ジョブの相対的な優先度を変更するコマンド。
Influence scheduling priority with nice and renice(linux.com)を読んで、詳細な挙動を知った。
ユニークなのはnice値(niceness value)という指標を使っている点。最初に知ったときは笑った。 nice値は「どれくらいナイスか」を示す値なので、直感に反して数字が大きいほど実行優先度は下がる。 譲りまくりな人ほどナイスである。
ヘビーなジョブを実行するときにniceやreniceでnice値を上げておくとナイスだ。
cronが走ったりすると重くなるので、あわててreniceで強制的によりナイスにさせたりすることがあるのだが、冒頭の記事を読んでこれは意味ないことを知った。 たしかにやってみて挙動が変わっていない手応えがあった。どうやらreniceはCPU割り当てのみを変更するもので、I/Oはそのままらしい。
cronはインデックスのはりかえが中心なので、占有しまくりなのはむしろHDDアクセスの方。 いまどきCPUが貼りつくこともあまり無さそうなので、どちらかというとディスクI/O版のreniceが欲しい。
調べてみると、ioniceというコマンドが存在しているらしい(atmarkit)。CFQというI/Oスケジューラとともに使うもの。
ubuntuには標準では入っていないようで、schedutilsをインストールすると入ることを知った。 cronのI/O優先度を始めから下げておくと良さそうだ。
なお、I/Oスケジューラ自体の変更手順はLinuxファイルI/Oチューニング(ほえほえ)で紹介されている通り。
2007.7.19追記 Why aren’t you using ionice yet???(Fried CPU)という記事がdel.icio.usで人気になっていた。 シェル変数$$を活用して、シェルごとI/Oのプライオリティを変えるTipsが紹介されている。