私の知る限り(間違った部分があれば訂正してください)
systemctl set-property ... CPUShares=some_value
cgroup デバイス全体の CPU 時間を制限します。デバイス内のプロセスの CPU 時間を制限するには、次のコマンドを使用してプロセスを実行できます。
systemd-run ... nice=some_value
プロセスの良い値の概念とプロセスセットのCPUShares値の間に根本的な違いがあるかどうか疑問に思います。プロセスのCPUSharesを制限したり、cgroupユニットのnice-valueを設定したりできますか?私たちはいつこれらのいずれかをしたいですか?
答え1
Linuxでは、
- 良い値が適用されます仕事、これはプロセスまたはスレッドです(詳細についてはリンクを参照)。
- 「CPU共有」値は次に適用されます。タスクフォース(例:グループ)。
デフォルトの非リアルタイムLinuxタスクスケジューラ(CFQ)は、複数のcgroup間でCPU時間を「公正に」配布します。各cgroupの値(デフォルトは1024)を使用して、cpu.shares
他のcgroupの値と比較して、cpu.shares
各cgroupにより多くまたは少ないCPU時間(より多くの共有=より多くのCPU帯域幅)を与えます。
今、各cgroup内で、タスクの良い値は、他のタスクの良い値よりも多くのまたはより少ないCPU時間を与えるために使用されます。同じcgroup内で。
予約(7)説明する:
グループ予約では、スレッドの nice 値は、同じワークグループ内の他のスレッドに関連する予約決定にのみ影響します。
注:
- ㅏタスクフォースcgroupまたはautogroupです(参照:予約(7))、
- Linuxディストリビューションでは、自動グループ化がデフォルトで無効になっている可能性があります。確認してください
cat /proc/sys/kernel/sched_autogroup_enabled
。 - ワークグループは階層関係(cgroup内のcgroup)を持つことができます。推測するCFQ ジョブ・スケジューラーは CPU 時間割当てを考慮します。
- 「最近の」ディストリビューションは、デフォルトでsystemdを使用してタスクをcgroupに入れることができます(try
systemd-cgtop
とsystemd-cgls
)。
答え2
を読むとman systemd-run
a が生成されるため、動的にservice
a が生成されます。cgroup
読んだ後、systemd.exec
このNice=
ディレクティブは次に適用されます。みんなしたがって、実行プロセスは、systmd
andの概念と非常に似た方法で処理されます。Nice=
CPUShares=
この関係の私の理解は、それが歴史に関連しているということです。nice
これは何十年もの間存在しており、常に特定のプロセスに適用されてきました。
一方、プロセスグループの概念とアイデアcgroups
は新しい概念ですが、同じ目標を達成します。CPUShares=
歴史的互換性systemd
のサポートを望んでいます。Nice=
私は混乱を避けるためにあなたが快適であると感じるものを使用しますが、同時に両方を使用しません。希望するものがない場合は、新しいCPUShares=
概念を使用します。