Estoy usando una máquina Debian 8 amd64 para la evaluación comparativa. Durante la experimentación, me gustaría que la CPU funcione a una frecuencia fija (preferiblemente la máxima posible). Esto descartará la velocidad del reloj de la CPU como una 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 describe aquí en la documentación del kernel de Linux :
El "rendimiento" del gobernador CPUfreq establece la CPU estáticamente en 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
no. Esperemos que no importe, ya que la frecuencia de CPU utilizada es el valor máximo del intervalo.
Así que habilité este gobernador usando cpufreq-set:
$ cat / 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:
$ cat / sys / devices / system / cpu / intel_pstate / no_turbo 1
Según la descripción anterior del regulador de rendimiento, no esperaría fluctuaciones 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 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 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 3.98 GHz.
¿Es esta fluctuación debido al hardware, el BIOS, el núcleo o algún otro factor? ¿Hay alguna manera de configurar la frecuencia de la CPU de modo que no fluctúe en absoluto?
fuente
Respuestas:
Después de experimentar un poco, creo que puedo responder mi propia pregunta.
Como se menciona en este hilo , en cierto hardware Intel, hay dos formas de administrar la frecuencia de la CPU:
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
a los argumentos del núcleo (edite/etc/default/grub
y agregue el argumento aGRUB_CMDLINE_LINUX_DEFAULT
. Finalmente ejecutesudo update-grub
).Después de hacer esto, la salida de se
cpufreq-info
ve muy diferente, y también noto que un conjunto diferente de gobernadores de CPU está disponible (por ejemplo,ondemand
ahora está disponible).Lo más importante, después de configurar el gobernador en
performance
, la velocidad del reloj ahora está fija (en mi caso a 4.00GHz).Puede mirar
/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 valoresacpi-cpufreq
ointel_pstate
.fuente
[1] https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt
fuente
intel_pstate=disable
al kernel? ¿Estoy invocando el "modo heredado" cuando hago eso?Intel Architectures Software Developer's Manual.
2) sí. PD. También es posible que desee jugar conx86_energy_perf_policy
Leí este hilo porque también estaba buscando configurar 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 que establecer la frecuencia más baja (800Mhz) ... finalmente logré cambiar el 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 se moverá desde 800Mhz a .... 800Mhz. Funciona y resolvió el problema de sobrecalentamiento que he tenido ... (¡la frecuencia ahora es de 799Mhz y no se mueve, lo que permitió que la CPU permaneciera alrededor de 50 ° C!)
PD: también deshabilito el modo turbo (3,1Ghz)
fuente