タイムスライスを見ていみる
スケジューラが実行可能プロセスにタイムスライス単位でCPUを使わせることを実験によって確かめます
...
CPU時間を使う付加処理用のプロセスを一つ、ないし複数同時に動かし、次のような統計情報を採取します。
...
- ある時点で、論理CPU上では
どのプロセスが動作しているのか。 - それぞれの
進捗はどれだけか。
...
並列度1、2、3それぞれで実験してみます。
for i in 1 2 3 ; do ./sherd.py $i ; done
並列度1
並列度2
並列度3
気づき
本当にジグザグに並列している。
横軸のメモリを見ても並列度が多くなるたびに大きくなるのでそれだけ時間がかかっているのがわかる。
初めて見た。
タイムスライスの仕組み
並列度が2の場合に比べて、3の場合の方が各プロセスのタイムスライスが短いことがわかります。実はLinuxのスケジューラはsysctlのkernel.sched_latency_nsパラメータの値(ナノ秒単位)で示したレイテンシターゲットと呼ばれる期間に一度、CPU時間を得られるようになっています。
...
各プロセスのタイムスライスはkernel.sched_latency_ns / <論理CPU上で実行中または実行可能状態のプロセス>[ナノ秒]
...
kernel.sched_latency_nsパラメータはカーネルv5.13には存在しません。v5.13以降をお使いの場合、rootのみがアクセスできる/sys/kernel/debug/sched/laten_nsが同じ意味を持つファイルです。
root@***********:***************# cat /sys/kernel/debug/sched/latency_ns
6000000
root@***********:***************# uname -r
5.15.0-107-generic
タイムスライス変動の要素
- システムが
搭載する論理CPU数 - 所定の値を超える論理CPU上で
実行中/実行待ち中のプロセス数 プロセスの優先度を表すnice値
nice値によるタイムスライスを見る
nice値はプロセスの実行優先度を−20から19までの間で設定する値(デフォルトは「0」)です。−20が一番優先度が高く、19が低くなります。
root@***********:***************# nice -n 5 taskset -c 0 ./inf-loop.py &
[1] 3441
root@***********:***************# sar -P 0 1 1
Linux 5.15.0-107-generic (***********) 2024年05月20日 _x86_64_ (1 CPU)
13時33分23秒 CPU %user %nice %system %iowait %steal %idle
13時33分24秒 0 0.00 93.02 6.98 0.00 0.00 0.00
平均値: 0 0.00 93.02 6.98 0.00 0.00 0.00
%nice
Percentage of CPU utilization that occurred while exe‐
cuting at the user level with nice priority.
出典
man sar
和訳
優先順位の高いユーザー・レベルでの実行中に、CPUの使用率が低下した。
出典
deepL
気づき
occurredが低下したと和訳するのか。わからん。
和訳を見るとこの時間このプロセスはcpuが優先度をどれくらい低下させたかというのを示し、プロセスが多くなるとniceの割合が分散するのだろう。
出典
感想
タイムスライスのことが少し理解できた。
タイムスライスの時間だけCPUが割り当てられることによって複数のプロセスを同時に処理できる



