私が理解しているように(間違っていた場合は訂正してください)、
systemctl set-property ... CPUShares=some_value
cgroupユニット全体のCPU時間を制限します。代わりに、そのユニット内のプロセスのCPU時間を制限したい場合は、次のコマンドでプロセスを実行できます。
systemd-run ... Nice=some_value
プロセスのナイス値とプロセスグループのCPUShares値の概念に本質的な違いがあるかどうか疑問に思っていますか?プロセスのCPUShareを制限したり、cgroupユニットのNice-valueを設定したりできますか?いつどちらを実行したいですか?
man systemd-run
を読み取ると、service
、つまりcgroup
が即座に作成されます。 systemd.exec
の読み取りから、Nice=
ディレクティブはall実行されたプロセスに適用されるため、systmd
がNice=
およびCPUShares=
の概念を処理する方法は非常に似ています。
関係についての私の理解は、歴史と関係があるということです。 Nice
は数十年前から存在し、常に特定のプロセスに適用されています。
一方、cgroups
の概念とCPUShares=
をプロセスグループに適用するという考え方は、はるかに新しい概念ですが、同じ目標を達成します。
過去の互換性のため、systemd
はNice=
をサポートしていると思います。
混乱を避けるために、どちらか使いやすい方を使用しますが、両方は使用しません。好みがない場合は、新しいCPUShares=
コンセプトを使用します。
Linuxでは、
デフォルトの非リアルタイムLinuxのタスクスケジューラ(CFQ)は、CPU時間をさまざまなcgroup間で「公平に」分散します。他のcgroupのcpu.shares
値と比較して、各cgroupのcpu.shares
値(デフォルトでは1024)を使用して、各cgroupに多かれ少なかれCPU時間を割り当てます(より多くの共有=より多くのCPU帯域幅)。
ここで、各cgroup内で、タスクのNice値を使用して、他のタスクのNice値同じcgroup内。
sched(7) は言う:
グループスケジューリングでは、スレッドのNice値は、同じタスクグループ内の他のスレッドに関連する決定のみをスケジューリングするために影響します。
サイドノート:
cat /proc/sys/kernel/sched_autogroup_enabled
で確認してください。systemd-cgtop
およびsystemd-cgls
を試してください)。