Isso se deve a um bug conhecido no LXC em relação ao cpuset
cgroup.
Algumas soluções alternativas são descritas aqui: link .
Quando meu no-break aciona um evento "on-battery", desejo que todos os núcleos desliguem para economizar energia. O PC tem 8 núcleos em dois chips, as baterias da UPS precisam de substituição a cada 3 meses devido aos altos picos de corrente. Para aliviar meu custo de propriedade, as seguintes instruções são executadas quando o no-break aciona esse evento:
for c in /sys/devices/system/cpu/cpu*/online; do
echo 0 >$c
done
Os núcleos 1 a 7 são definidos com êxito off-line, enquanto o núcleo 0 permanece ativo, conforme o esperado.
Então, lscpu
e atop
confirmam que apenas a cpu 0 permanece on-line e, como um indicador adicional, as temperaturas da cpu caem de 90 ° C a 60 ° C.
Quando a energia da rede volta, o comando inverso é executado:
for c in /sys/devices/system/cpu/cpu*/online; do
echo 1 >$c
done
mas os núcleos não ficam online. Nesse ponto, cat /sys/devices/system/cpu/cpu*/online
imprime 1
para cada cpu de 0 a 7 e lscpu
informa que todos os cpus retornaram on-line, mas aparentemente todos os meus threads continuam a rodar exclusivamente no core 0, atop
ainda lista apenas um núcleo, e a carga do sistema permanece limitada a cerca de 100%, em vez de 800%, como normalmente ocorre. Além disso, as temperaturas da CPU permanecem estáveis a 60 ° C.
Anormalmente, enquanto top
lista o uso da CPU por processo como porcentagens, essas porcentagens individuais somam cerca de 100%, enquanto a média da carga de 60 segundos relatada por top
é 8.
Atributos:
Atualização:
Eu atualizei o kernel do 4.1.1 para o 4.5.4. Após o teste, o mesmo defeito ainda está presente.
Isso se deve a um bug conhecido no LXC em relação ao cpuset
cgroup.
Algumas soluções alternativas são descritas aqui: link .