
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_freq
y 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*/disable
en 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=off
podí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=off
deshabilitará 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í.