プロセススケジューラ
- 一つの論理CPU上で同時に
動けるプロセスは一つだけ
。 - 実行可能な複数のプロセスに、タイムスライスと呼ばれる単位で
順番にCPUを使わせる
気づき
繰り返し一つのプロセスに対して少しずつ使用時間を割り当てることで、複数のプロセスを一つのCPUで処理できるのか。
プロセスの経過時間、使用時間
経過時間
プロセスが開始してから終了するまでの経過時間
。ストップウォッチでプロセス開始時から終了時までを経過した値というイメージ。
使用時間
プロセスが実際に論理CPUを使用した時間
timeコマンド(CPUの経過、使用時間を計測)
root@********:**************# time ./load.py
real 0m2.516s
user 0m2.243s
sys 0m0.179s
realは経過時間
userとsysは使用時間
を示します。userはプロセスがユーザランドで動作していた時間を指します。
これに対してsysは、プロセスによるシステムコール発行の延長でカーネルが動作していたときの時間を指します。
論理CPUを使わないコマンドの場合
root@********:**************# time sleep 3
real 0m3.008s
user 0m0.004s
sys 0m0.000s
開始直後にCPUを手放しスリープ状態となり、....userとsysはほぼ0です。
論理CPUが一つに対して一つのプロセスの場合
プロセス数で指定した数だけ動作させて、全ての終了を待ちます。
root@********:**************# ./multiload.sh 1
real 0m2.400s
user 0m2.227s
sys 0m0.121s
論理CPUが一つに対して複数のプロセスの場合
root@********:**************# ./multiload.sh 2
real 0m4.196s
user 0m1.922s
sys 0m0.135s
real 0m4.318s
user 0m1.993s
sys 0m0.160s
root@********:**************# ./multiload.sh 3
real 0m6.711s
user 0m2.080s
sys 0m0.115s
real 0m6.791s
user 0m2.113s
sys 0m0.119s
real 0m6.801s
user 0m2.156s
sys 0m0.084s
気づき
一つに時間を割けられないのでその分時間がかかっている。
論理CPUが複数に対して複数のプロセスの場合
root@********:**************# ./multiload.sh -m 1
real 0m2.433s
user 0m2.185s
sys 0m0.187s
root@********:**************# ./multiload.sh -m 2
real 0m4.400s
user 0m2.032s
sys 0m0.110s
real 0m4.509s
user 0m2.102s
sys 0m0.136s
root@********:**************#./multiload.sh -m 3
real 0m6.310s
user 0m1.955s
sys 0m0.110s
real 0m6.537s
user 0m2.129s
sys 0m0.039s
real 0m6.718s
user 0m2.258s
sys 0m0.075s
気づき
それぞれレニ時間を避けるから早くなっている。
realよりもuser+sysが大きくなることもある
計測の精度がそれほど高くないことから来ています
。あまり気にしてもしょうがないので「こういうこともある」という意識を持っていただければいいです。
root@********:**************# time ./multiload.sh -m 2
real 0m4.215s
user 0m1.940s
sys 0m0.129s
real 0m4.366s
user 0m2.106s
sys 0m0.084s
real 0m4.378s
user 0m4.054s
sys 0m0.213s
timeコマンドで得られるuserとsysの値は、情報取得対象のプロセス、および終了済みの子プロセスの値を合計したものなのです。したがってあるプロセスが子プロセスを生成して、それらがそれぞれ別の論理CPUで動作したような場合はrealよりもuser+sysの値が大きくなり得ます
。
気づき
自分のは大きくならなかった。
出典
感想
まだまだ