¿Cómo puedo hacer que mi CPU funcione a la máxima velocidad evitando el escalado de la CPU?

¿Cómo puedo hacer que mi CPU funcione a la máxima velocidad evitando el escalado de la CPU?

Estoy ejecutando CentOS 7 (7.9.2009) (kernel 3.10.0-1160.49.1.el7.x86_64) en una computadora portátil bastante antigua (Lenove T61) con una CPU de doble núcleo (CPU Intel(R) Core(TM)2 Duo T7300 a 2,00 GHz). El controlador para el escalado de la CPU es acpi-cpufreq, y cuando está en elactuacióngobernador, puedo hacer que la CPU funcione a la velocidad máxima de la CPU como se indica en /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_max_freqy observar esto haciendo:

$ grep -i mhz /proc/cpuinfo 
cpu MHz     : 2001.000
cpu MHz     : 2001.000

y es estable como una roca a esta velocidad. Puedo verificar esto haciendo:

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
2001000
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq 
2001000

Estoy intentando ejecutar a una frecuencia constante un programa en tiempo real que cuenta los ciclos de reloj de la CPU para cronometrar. Compilé un kernel personalizado (5.10.83-rt58) para admitir una pieza de hardware que no es compatible con el kernel CentOS predeterminado (3.10.0). El escalado de la CPU generalmente hace que la frecuencia del reloj salte, pero descubrí que puedo obtener una frecuencia constante configurando todos los valores /sys/devices/system/cpu/cpu*/cpuidle/state*/disableen 1. Cuando reviso la frecuencia:

$ grep -i mhz /proc/cpuinfo 
cpu MHz     : 1995.106
cpu MHz     : 1995.106

no está exactamente en los 2001MHz como se ve con el kernel 3.10.0. El siguiente comando verifica esto:

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
1995106

Pero la salida de:

$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
2001000

es diferente. Mi pregunta es: ¿alguien sabe por qué mi CPU no funciona a la frecuencia máxima (2001 MHz) sino a ~6 MHz menos? ¿Hubo algún cambio drástico en el escalado de la CPU entre el kernel 3.10 y 5.10?

Respuesta1

Descubrí que agregar los parámetros del kernel nohz_full=1 rcu_nocbs=1 mitigations=offpodía hacer que uno de mis núcleos se ejecutara a 2001MHz en el kernel 5.10.83-rt58. Tenga en cuenta que agregar mitigations=offdeshabilitará las mitigaciones de vulnerabilidades de la CPU. No estoy seguro de si estos parámetros estaban disponibles en el kernel 3.10.0-1160.49.1.el7.x86_64, pero la lista completa de parámetros del kernel esaquí.

información relacionada