はじめに
「Linuxのしくみ 増強改訂版」の第3章「プロセススケジューラ」の要点をメモしていきます。
経過時間と使用時間
- 経過時間(real): プロセスの開始から終了までにかかった時間
- 使用時間(user + sys):あるプロセスが実際にCPUを使用していた時間
time[option][command]コマンドを使用することで、特定のプロセスの経過時間と使用時間が得られます。userはプロセスがユーザーランド(CPUがユーザーモードの状態)で実行しているときの時間で、sysはカーネル(CPUがカーネルモードの状態)が動作している時の時間を指します。
私の環境でload.pyファイルに対してtimeコマンドを使用した結果が以下になります。
time ./load.py
real 0m4.320s
user 0m4.193s
sys 0m0.080s
プロセススケジューラ
プロセススケジューラとは、プロセスにCPUリソースの割り当てを行うLinuxカーネルの機能のことです。
- 一つのCPU上で同時に動くことができるプロセスの数は一つだけ。
- プロセススケジューラが一つの論理CPU上の複数の実行可能プロセスに、タイムスライス単位(数ナノ秒)で順番にCPUを使用させる。
タイムスライスはプロセス数に応じて可変であるため、それぞれのプロセスに効率よくCPU時間が割り当てられます。
コンテキストスイッチ
コンテキストスイッチとは、論理CPU上で動作中のプロセスが切り替わることを指します。たとえあるプロセスがコードの実行中でもタイムスライス時間が経過すると、コンテキストスイッチが発生し、他のプロセスの実行に切り替わります。
疑問
p.65の、プロセス数を一定の値よりもさらに増やしてくと、平均ターンアラウンドタイムが次第に長くなるとともに、スループットを下げていく、という部分について、なぜスループットが下がっていくのかという疑問をもちました。とりあえず、多くの論理CPUを積んでいるコンピュータに対して実行中のプロセスを増やしていくとスループットは向上するが、増やしすぎるとスループットは下がっていくということですね。この点については、書籍の2周目に再度確認していきたいと思います。