2.4GHzプロセッサを搭載したサーバーがあります。そして、いくつかのcgroupがあり、それぞれがCPUの25%の使用を許可されています。これは600MHzに相当します。
次に、CPUをより高速なCPU、たとえば3.0GHzに交換します。 cpu.shares
を使用すると、コンテナは引き続き3.0GHzの25%を取得します。これは現在750MHzに相当します。
つまり、CPUを交換した後、CPUの20%以下を消費するようにcgroupを再構成する必要があります。
CPUのアップグレード中にこの問題を回避する方法はありますか?
シェアはグループ間で相対的です。たとえば、CPUの25%を割り当てると、cgroupは「少なくとも」その量のCPUを監視しますが、それ以上を使用できます。 cgroupsのRed Hatドキュメント から:
CPU時間のシェアは、マルチコアシステムのすべてのCPUコアに分散されることに注意してください。 cgroupがマルチコアシステム上のCPUの100%未満に制限されている場合でも、個々のCPUコアの100%を使用する場合があります。
...
Cgroupが使用できる実際のCPU時間は、システムに存在するcgroupの数によって異なります。 cgroupの相対シェアが1000で、他の2つのcgroupの相対シェアが500の場合、すべてのcgroupのプロセスがCPUを100%使用しようとすると、最初のcgroupはすべてのCPU時間の50%を受け取ります。ただし、1000の相対シェアで別のcgroupが追加された場合、最初のcgroupはCPUの33%しか許可されません(残りのcgroupは16.5%、16.5%、および33%のCPUを受け取ります)。
CPU帯域幅に厳しい制限が必要な場合は、cpu.cfs_quota_us
およびcpu.cfs_period_us
を使用できます。 カーネルのCFSドキュメント から:
グループに許可される帯域幅は、クォータと期間を使用して指定されます。指定された各「期間」(マイクロ秒)内で、グループは最大「クォータ」マイクロ秒のCPU時間しか消費できません。グループのCPU帯域幅の消費が(その期間に)この制限を超えると、その階層に属するタスクは抑制され、次の期間まで再度実行することはできません。
ただし、これら2つのオプションのどちらでも、cgroups構成を変更せずに、異なるCPU間でグループを移植できます。