
Estoy usando una máquina Debian 8 AMD64 para realizar evaluaciones comparativas. Durante la experimentación, me gustaría que la CPU funcionara a una frecuencia fija (preferiblemente la máxima posible). Esto descartará la velocidad del reloj de la CPU como fuente de variación en los resultados.
Después de leer un poco, parece que lo correcto es cambiar el regulador de la CPU a performance
, que se describeaquí en la documentación del kernel de Linux:
El "rendimiento" del gobernador CPUfreq establece la CPU estáticamente a la frecuencia más alta dentro de los límites de scaling_min_freq y scaling_max_freq.
Lamentablemente, no se proporcionan más detalles sobre scaling_min_freq
y . scaling_max_freq
Con suerte, no debería importar, ya que la frecuencia de la CPU utilizada es el valor máximo del intervalo.
Entonces habilité este gobernador usando cpufreq-set:
$ gato /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor actuación actuación actuación actuación
Y por si acaso, también desactivé el modo turbo boost en la BIOS:
$ gato /sys/devices/system/cpu/intel_pstate/no_turbo 1
Según la descripción anterior del regulador de rendimiento, no esperaría ninguna fluctuación en la velocidad del reloj de la CPU. Sin embargo, si corro repetidamente cpufreq-info
, veo que la velocidad del reloj fluctúa:
$ cpufreq-info | grep 'CPU actual fr' La frecuencia actual de la CPU es de 4,00 GHz. La frecuencia actual de la CPU es de 3,99 GHz. La frecuencia actual de la CPU es de 4,00 GHz. La frecuencia actual de la CPU es de 4,00 GHz. $ cpufreq-info | grep 'CPU actual fr' La frecuencia actual de la CPU es de 4,00 GHz. La frecuencia actual de la CPU es de 4,00 GHz. La frecuencia actual de la CPU es de 4,00 GHz. La frecuencia actual de la CPU es de 3,96 GHz. $ cpufreq-info | grep 'CPU actual fr' La frecuencia actual de la CPU es de 4,00 GHz. La frecuencia actual de la CPU es de 4,00 GHz. La frecuencia actual de la CPU es de 4,00 GHz. La frecuencia actual de la CPU es de 3,94 GHz. $ cpufreq-info | grep 'CPU actual fr' La frecuencia actual de la CPU es de 4,01 GHz. La frecuencia actual de la CPU es de 4,00 GHz. La frecuencia actual de la CPU es de 4,00 GHz. La frecuencia actual de la CPU es de 3,98 GHz.
¿Esta fluctuación se debe al hardware, el BIOS, el kernel o algún otro factor? ¿Hay alguna manera de configurar la frecuencia de la CPU de manera que no fluctúe en absoluto?
Respuesta1
Después de un poco de experimentación, creo que puedo responder mi propia pregunta.
Como se mencionóen este hilo, en determinado hardware Intel, hay dos formas de administrar la frecuencia de la CPU:
- Usando pstate.
- Utilizando ACPI normal.
Cuando se usa pstate, el BIOS tiene algo que decir sobre la velocidad del reloj y parece que esta es la fuente de las fluctuaciones.
Puede forzar la desactivación de pstate agregando intel_pstate=disable
los argumentos del kernel (edite /etc/default/grub
y agregue el argumento a GRUB_CMDLINE_LINUX_DEFAULT
. Finalmente ejecute sudo update-grub
).
Después de hacer esto, el resultado de cpufreq-info
se ve muy diferente y también noto que un conjunto diferente de reguladores de CPU está disponible (por ejemplo, ondemand
ahora está disponible).
Lo más importante es que después de configurar el regulador en performance
, la velocidad del reloj ahora está fija (en mi caso en 4,00 GHz).
Puede consultar /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver
para determinar si se está utilizando pstate o ACPI para escalar la CPU. Estos archivos pueden asumir los valores acpi-cpufreq
o intel_pstate
.
Respuesta2
Para los procesadores Intel contemporáneos, la frecuencia está controlada por el propio procesador y los estados P expuestos al software están relacionados con los niveles de rendimiento. La idea de que la frecuencia se puede establecer en un solo La frecuencia es ficción para los procesadores Intel Core.. Incluso si el controlador de escala selecciona un único estado P, la frecuencia real a la que funcionará el procesador la selecciona el propio procesador. [1]
[1]https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt
Respuesta3
Leí este hilo porque también estaba buscando establecer una frecuencia fija para mi CPU ya que el ventilador ya no funciona (¡por supuesto, esas cosas suceden cuando estás en el extranjero en una isla perdida para bucear!), así que mi punto era más establecer la frecuencia más baja (800 Mhz) ... finalmente logré hacer cambios en scaling_max_freq en /sys/devices/system/cpu/cpu*/cpufreq/ para cada cpu de la configuración y ahora está bien, se supone que la frecuencia debe pasar de 800 Mhz a....800Mhz. Funciona y resolvió el problema de sobrecalentamiento que he tenido... (¡la frecuencia ahora es de 799 Mhz y no se mueve, lo que permitió que la CPU permaneciera alrededor de 50 °C!)
PD: también desactivo el modo turbo (3,1Ghz)