私の理解は、基本的にsystemdがcpu.share = 1024を使用して単一のcgroupですべてのプロセスを開始することです。サービスのcpu.shareをオーバーライドすることを選択した場合、そのサービスの下のプロセス用に新しいcgroupが作成され、選択した値にcpu.shareが設定されます。
60%CPUを提供できるカスタムcpu.shareを使用して新しいcgroupを手動で作成したいと思います。これを行うには、既存のすべてのcgroupのcpu.share値を知る必要があります。 systemdはこれらの値をどこに設定しますか?これを簡単に得る方法はありますか? /sys/fs/cgroup/cpuには、ルートグループ(1024に設定)と私が手動で作成したグループのみが含まれます。
答え1
systemd の CGroup オプションは、次のドキュメントで説明されています。man systemd.exec
(またはman systemd.resource-control
)。あなたが探しているものは次のとおりです。
CPUWeight=weight
、StartupCPUWeight=weight
システムが統合制御グループ階層を使用する場合、指定された CPU 時間重みが実行プロセスに割り当てられます。これらのオプションは整数値を取り、制御
cpu.weight
グループのプロパティを制御します。許容範囲は1〜10000です。デフォルト値は 100 です。このコントロールグループのプロパティの詳細については、次を参照してください。cgroup-v2.txtそして 計画設計 - CFS.txt。使用可能なCPU時間は、CPU時間の重みに基づいてスライス内のすべてのデバイスに分散されます。
答え2
私の理解は、基本的にsystemdがcpu.share = 1024を使用して単一のcgroupですべてのプロセスを開始することです。
私はこれが正しいとは思わない。しかし、私の言葉を権威あるものとして受け入れないでください。この結論を導いた文書の一部は次のとおりです。
からsystemd.resource-control(5)
:
CPUAccounting= Turn on CPU usage accounting for this unit. Takes a boolean argument. Note that turning on CPU accounting for one unit might also implicitly turn it on for all units contained in the same slice and for all its parent slices and the units contained therein. The system default for this setting maybe controlled with DefaultCPUAccounting= in systemd- system.conf(5).
そして:
CPUShares=weight, StartupCPUShares=weight ... Those options imply "CPUAccounting=true".
私が読んだように、どのユニットにも値が設定されておらず、どこでも明示的CPUShares
にCPUAccounting
有効になっていない場合(およびDefaultCPUAccounting
設定されていない場合)、systemdはsystem.conf
階層をまったく使用しない可能性があります(そうではありませんか?)。cpu
(この点に対するすべての修正を歓迎します。)