cgroups do Linux: limita o uso da CPU em valores absolutos que não dependem da velocidade da CPU

4

Eu tenho um servidor com um processador de 2,4 GHz. E há vários cgroups, cada um com permissão para usar 25% da CPU. Isso é igual a 600MHz.

Então eu substituo o processador por um mais rápido, digamos 3.0GHz. Se eu usar cpu.shares , meus contêineres continuarão recebendo 25% de 3,0 GHz, o que agora é igual a 750 MHz.

Isso significa que, após a substituição da CPU, preciso reconfigurar meus cgroups para que não consumam mais de 20% da CPU.

Existe uma maneira de evitar esse problema durante uma atualização da CPU?

    
por Anthony Ananich 04.07.2015 / 19:45

1 resposta

1

As ações são relativas entre os grupos. Por exemplo, atribuir 25% da CPU significa que um cgroup observará "pelo menos" essa quantidade de CPU, mas poderá usar mais. Dos documentos do Red Hat no cgroups :

Note that shares of CPU time are distributed per all CPU cores on multi-core systems. Even if a cgroup is limited to less than 100% of CPU on a multi-core system, it may use 100% of each individual CPU core.

...

The actual amount of CPU time that is available to a cgroup can vary depending on the number of cgroups that exist on the system. If a cgroup has a relative share of 1000 and two other cgroups have a relative share of 500, the first cgroup receives 50% of all CPU time in cases when processes in all cgroups attempt to use 100% of the CPU. However, if another cgroup is added with a relative share of 1000, the first cgroup is only allowed 33% of the CPU (the rest of the cgroups receive 16.5%, 16.5%, and 33% of CPU).

Se você quiser um limite rígido na largura de banda da CPU, use cpu.cfs_quota_us e cpu.cfs_period_us . A partir dos documentos CFS do Kernel :

The bandwidth allowed for a group is specified using a quota and period. Within each given "period" (microseconds), a group is allowed to consume only up to "quota" microseconds of CPU time. When the CPU bandwidth consumption of a group exceeds this limit (for that period), the tasks belonging to its hierarchy will be throttled and are not allowed to run again until the next period.

No entanto, nenhuma dessas duas opções permitirá a você portar um grupo entre CPUs distintas sem precisar alterar a configuração do cgroups.

    
por 14.08.2015 / 19:38