Estou tentando entender o efeito da configuração de cpu.cpu_quota_us no subsistema cpu cgroup no desempenho do aplicativo. Essencialmente, reduzindo a cota de CPU, mas aumentando o número de CPUs de forma que as CPUs "efetivas" ainda sejam as mesmas, isso impactaria o aplicativo? Por exemplo, a configuração de 4 CPUs com cota de 100% é igual à configuração de 8 CPUs com cota de 50%?
Eu escrevi um programa simples com uso intensivo de CPU em https://github.com/ashu-mehra/cpu-quota-teste executei-o na seguinte configuração do cgroup:
1) No cgroup que possui 4 cpus e sem limite de cota
2) No cgroup que possui 8 cpus e 50% de cota
Ao executar este programa para 32 threads notei a seguinte diferença no rendimento relatado pelo programa para as duas configurações:
4CPU@100 8CPU@50 176236 87252,5
O desempenho de 8CPU@50 é menos da metade do que obtenho com 4CPU@100.
Ao depurar ainda mais, percebi que meu sistema está configurado para usar o regulador de frequência da CPU "powersave". Neste modo, a frequência da CPU dos núcleos quando o programa está sendo executado em 4CPU@100 atingiu o máximo, mas para 8CPU@50 a frequência da CPU dos núcleos foi muito menor.
Quando mudei o regulador de frequência da CPU para "desempenho" (que é o único outro regulador de frequência disponível), o desempenho com 8CPU@50 aumenta consideravelmente à medida que os núcleos começam a funcionar na frequência máxima:
4CPU@100 8CPU@50 175804 163831
Os detalhes do meu sistema são:
Ubuntu 16.04.2LTS
Kernel 4.4.0-103-genérico
Tenho as seguintes perguntas sobre os governadores CPUFreq:
1) Este linkhttps://www.kernel.org/doc/Documentation/cpu-freq/governors.txtdiz: "O governador CPUfreq "powersave" define a CPU estaticamente para a frequência mais baixa dentro dos limites de scaling_min_freq e scaling_max_freq." No entanto, notei que a frequência muda conforme a carga aumenta. Como funciona o "powersave"?
2) Wy é a frequência da CPU que não aumenta para o máximo quando o regulador de frequência da CPU "powersave" está em uso e a cota da CPU está definida. A configuração da cota de CPU está causando o mau comportamento do "powersave"?
Responder1
O documento mencionado na sua pergunta 1 é para o driver de escalonamento de frequência da CPU acpi-cpufreq. Acho, mas não tenho certeza, que você está usando o driver de escalonamento de frequência da CPU intel_pstate. A maneira de saber com certeza é perguntar ao seu sistema:
$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
O governador powerave no driver intel_pstate se comporta de maneira semelhante ao governador ondemand no driver acpi-cpufreq. Os algoritmos de controle estão mudando, mas se você tiver um kernel recente o suficiente, deverá ser baseado em carga.
A frequência da CPU não aumenta muito, ou mesmo nada, quando você limita o uso a 50% porque o algoritmo baseado em carga não é apresentado com carga suficiente para garantir o aumento da frequência da CPU.