Comportamiento del gobernador de frecuencia de ahorro de energía cuando se establece la cuota de CPU

Comportamiento del gobernador de frecuencia de ahorro de energía cuando se establece la cuota de CPU

Estoy tratando de comprender el efecto de configurar cpu.cpu_quota_us en el subsistema cpu cgroup en el rendimiento de la aplicación. Básicamente, al reducir la cuota de CPU, pero aumentar la cantidad de CPU de modo que las CPU "efectivas" sigan siendo las mismas, ¿afectaría a la aplicación? Por ejemplo, ¿la configuración de cuota del 100 % de 4 CPU es la misma que la configuración de cuota del 50 % de 8 CPU?

He escrito un programa simple que requiere un uso intensivo de CPU en https://github.com/ashu-mehra/cpu-quota-testy lo ejecuté bajo la siguiente configuración de cgroup:

1) En cgroup que tiene 4 cpus y no tiene límite de cuota

2) En cgroup que tiene 8 cpus y 50% de cuota

Al ejecutar este programa para 32 subprocesos, noté la siguiente diferencia en el rendimiento informado por el programa para las dos configuraciones:

4 CPU a 100 8 CPU a 50
176236 87252,5

El rendimiento de 8CPU@50 es menos de la mitad de lo que obtengo con 4CPU@100.

Al seguir depurando, noté que mi sistema está configurado para usar un regulador de frecuencia de CPU de "ahorro de energía". En este modo, la frecuencia de la CPU de los núcleos cuando el programa se ejecuta en 4CPU@100 se disparó al máximo, pero para 8CPU@50 la frecuencia de la CPU de los núcleos fue mucho menor.

Cuando cambié el regulador de frecuencia de la CPU a "rendimiento" (que es el único otro regulador de frecuencia disponible), el rendimiento con 8CPU@50 aumenta considerablemente a medida que los núcleos comenzaron a funcionar a la frecuencia máxima:

4 CPU a 100 8 CPU a 50
175804 163831

Los detalles de mi sistema son:

Ubuntu 16.04.2 LTS

Kernel 4.4.0-103-genérico

Tengo las siguientes preguntas sobre los gobernadores CPUFreq:

1) Este enlacehttps://www.kernel.org/doc/Documentation/cpu-freq/governors.txtdice: "El gobernador CPUfreq "powersave" establece la CPU estáticamente a la frecuencia más baja dentro de los límites de scaling_min_freq y scaling_max_freq". Sin embargo, noté que la frecuencia cambia a medida que aumenta la carga. ¿Cómo funciona realmente el "ahorro de energía"?

2) Wy es que la frecuencia de la CPU no aumenta al máximo cuando el regulador de frecuencia de la CPU de "ahorro de energía" está en uso y se establece la cuota de CPU. ¿Establecer la cuota de CPU hace que el "ahorro de energía" no funcione correctamente?

Respuesta1

El documento al que se hace referencia en su pregunta 1 es para el controlador de escalado de frecuencia de CPU acpi-cpufreq. Creo, pero no estoy seguro, que estás utilizando el controlador de escalado de frecuencia de CPU intel_pstate. La forma de saberlo con seguridad es preguntarle a su 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

El gobernador de ahorro de energía en el controlador intel_pstate se comporta de manera similar al gobernador bajo demanda en el controlador acpi-cpufreq. Los algoritmos de control han ido cambiando, pero si tiene un kernel lo suficientemente reciente, debería basarse en la carga.

La frecuencia de la CPU no aumenta mucho, o incluso nada, cuando limita el uso al 50% porque el algoritmo basado en carga no se presenta con suficiente carga para justificar un aumento de la frecuencia de la CPU.

información relacionada