No se puede usar el gobernador cpufreq de "espacio de usuario" y establecer la frecuencia de la CPU

22

Estoy tratando de cambiar la frecuencia de la CPU en mi computadora portátil (ejecutando Linux), y no tengo ningún éxito.
Aquí hay algunos detalles:

# uname -a
Linux yoga 3.12.21-gentoo-r1 #4 SMP Thu Jul 10 17:32:31 HKT 2014 x86_64 Intel(R) Core(TM) i5-3317U CPU @ 1.70GHz GenuineIntel GNU/Linux

# cpufreq-info
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to [email protected], please.
analyzing CPU 0:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 0.97 ms.
  hardware limits: 800 MHz - 2.60 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 800 MHz and 2.60 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency is 2.42 GHz (asserted by call to hardware).
(similar information for cpus 1, 2 and 3)

# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
performance powersave

Inicialmente tenía el gobernador de espacio de usuario integrado en el kernel, pero luego intenté construirlo como un módulo (con los mismos resultados); se cargó al ejecutar los comandos anteriores (y no pude encontrar ningún mensaje del sistema al cargarlo):

# lsmod
Module                  Size  Used by
cpufreq_userspace       1525  0
(some other modules)

Y aquí están los comandos que probé para cambiar la frecuencia:

# cpufreq-set -f 800MHz
Error setting new values. Common errors:
- Do you have proper administration rights? (super-user?)
- Is the governor you requested available and modprobed?
- Trying to set an invalid policy?
- Trying to set a specific frequency, but userspace governor is not available,
   for example because of hardware which cannot be set to a specific frequency
   or because the userspace governor isn't loaded?

# cpufreq-set -g userspace  
Error setting new values. Common errors:
- Do you have proper administration rights? (super-user?)
- Is the governor you requested available and modprobed?
- Trying to set an invalid policy?
- Trying to set a specific frequency, but userspace governor is not available,
   for example because of hardware which cannot be set to a specific frequency
   or because the userspace governor isn't loaded?

¿Algunas ideas?

aditsu
fuente
@don_crissti gracias, heh, intenté echo 1 > /sys/devices/system/cpu/intel_pstate/no_turboy obtuve un kernel panic instantáneo: p Luego reinicié intel_pstate=disabley ahora está usando acpi-cpufreq, pero todavía no puedo configurar la frecuencia (aunque ya no recibo mensajes de error). Por cierto, ¿por qué no hacer que tu comentario sea una respuesta?
aditsu
@don_crissti No sabía sobre cpupower; tiene una sintaxis algo desagradable, pero parece funcionar mejor que cpufreq. Ahora puedo configurar la frecuencia :) Muchas gracias y recuerde publicar una respuesta (a menos que realmente no quiera los puntos).
aditsu

Respuestas:

41

Esto se debe a que su sistema está utilizando el nuevo controlador llamado intel_pstate. Solo hay dos gobernadores disponibles cuando se usa este controlador: powersavey performance.
El userspacegobernador solo está disponible con el acpi-cpufreqcontrolador anterior (que se usará automáticamente si lo deshabilita intel_pstateen el momento del arranque; luego configura el gobernador / frecuencia con cpupower):

  • deshabilitar el controlador actual: agregar intel_pstate=disablea la línea de arranque de su núcleo
  • arranque, luego cargue el userspacemódulo:modprobe cpufreq_userspace
  • establecer el gobernador: cpupower frequency-set --governor userspace
  • establecer la frecuencia: cpupower --cpu all frequency-set --freq 800MHz
don_crissti
fuente
Gracias, por cierto, la configuración de frecuencia parece hacer lo mismo sin--cpu all
aditsu
3
Debe haber algunas desventajas al usar un controlador anterior. ¿Qué son?
kontextify
2
@kontextify Más usuarios felices, menos propensos a servir voluntariamente como ratas de laboratorio para probar la nueva versión.
Mephisto
0

La respuesta está en tu pregunta:

for core in $(seq 0 "$(($(getconf _NPROCESSORS_ONLN) - 1))"); do
echo {performance|powersave} >/sys/devices/system/cpu/cpu$core/cpufreq/scaling_governor ;
done

Eso y el núcleo deben compilarse con el gobernador de espacio de usuario habilitado.

Jaun Mauro Fernandez
fuente