niceの値とジョブのCPU利用状況が矛盾する話?
結論から言うと矛盾しません。矛盾しないんですけれど・・・あるジョブAが、別のジョブBよりもniceの値が低く設定されているはずなのに、ジョブBがCPUをより多く見えることがあります。これはそれぞれの別が複数のプロセスが並列・並行処理をしているケースで見られる現象です。これを説明して欲しいと言われたので、ざっくりしたスライドを作ってみました。ここではLinuxを引き合いに説明させてもらいます。
niceの値はプロセスへのCPUの割当時間を調整するもの
UNIXのような時分割方式のOSでは、微細な時間で実行するプロセスを切り替え続けることで、あたかも同時に複数のプロセスが動いているように見せてくれます。
たとえば、3つのプロセスが実行されていて、それぞれ均等にCPU時間をもらっていると仮定します。そのとき、理想的な世界において、時間の流れに対するCPUの処理はこんな風になっているものと想像できます。
このとき、たとえばProcess 3にniceがかかったとします。niceのかけられたプロセスは自身に割り当てられるプロセッサ時間を短くしますから、たとえば以下のような形になるものと想像できます。
こうすると、同じ時間経過で見たとき、Process 1は3つ分の仕事を処理できていますが、Process 3はProcess 1の1/3の処理もできていないかもしれないという状況になるのです。
一つのジョブが互いに連携する複数のプロセスで構成される場合
たとえばプロセス間通信などを駆使することで、複数のプロセスが協同して一つのジョブを構成するということがあります。高度に並列・平行化されたジョブを作ることによって、プロセッサの空転時間を短くし、ジョブ全体の完了時間を短くすることができるためです。このようなジョブ設計をした場合、ジョブを構成するプロセスの数の多寡によって、niceの設定と実際のCPU時間の消費の様子が想定と異なってしまうことがあるのです。(niceの仕組みを理解していれば、もちろん想定とずれるということはありません)
たとえば図のように、ジョブAがniceのかかっていない3つのプロセスで構成され、ジョブBがniceのかかっている9個のプロセスで構成されているとします。図のブロックの長さは、CPUが割り当てられる時間の長さを表現していると考えてください。すると、ジョブAが消費するCPU時間よりも、ジョブBが消費するCPU時間の方が(合計した結果として)長くなることがあります。
というわけで
すっごく当たり前のことなのですが、良さげな説明が見当たらなかったので書いてみました。参考になったと思ったら、ぜひ投げ銭をご検討くださいませ。
これで本文は終わりです。これより下にコンテンツはありません。
ここから先は
¥ 100
この記事が気に入ったらサポートをしてみませんか?