Niceレベルとsystemctl CPUSharesプロパティの違い

Niceレベルとsystemctl CPUSharesプロパティの違い

私の知る限り(間違った部分があれば訂正してください)

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に入れることができます(trysystemd-cgtopsystemd-cgls)。

答え2

を読むとman systemd-runa が生成されるため、動的にservicea が生成されます。cgroup読んだ後、systemd.execこのNice=ディレクティブは次に適用されます。みんなしたがって、実行プロセスは、systmdandの概念と非常に似た方法で処理されます。Nice=CPUShares=

この関係の私の理解は、それが歴史に関連しているということです。niceこれは何十年もの間存在しており、常に特定のプロセスに適用されてきました。

一方、プロセスグループの概念とアイデアcgroupsは新しい概念ですが、同じ目標を達成します。CPUShares=

歴史的互換性systemdのサポートを望んでいます。Nice=

私は混乱を避けるためにあなたが快適であると感じるものを使用しますが、同時に両方を使用しません。希望するものがない場合は、新しいCPUShares=概念を使用します。

関連情報