Não é possível usar o governador do cpufreq "userspace" e definir a frequência da CPU

22

Estou tentando alterar a frequência da CPU no meu laptop (executando Linux) e não obtendo sucesso.
Aqui estão alguns detalhes:

# 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, tive o governador do espaço do usuário incorporado no kernel, mas também tentei compilá-lo como um módulo (com os mesmos resultados); foi carregado durante a execução dos comandos acima (e não encontrei nenhuma mensagem do sistema ao carregá-lo):

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

E aqui estão os comandos que tentei para alterar a frequência:

# 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?

Alguma ideia?

aditsu
fonte
@don_crissti obrigado, heh, tentei echo 1 > /sys/devices/system/cpu/intel_pstate/no_turboe tive um pânico instantâneo no kernel: p Então eu reiniciei intel_pstate=disablee agora estou usando o acpi-cpufreq, mas ainda não consigo definir a frequência (embora não esteja mais recebendo mensagens de erro). Btw, por que não fazer do seu comentário uma resposta?
aditsu 15/09/14
@don_crissti eu não sabia sobre cpupower; possui uma sintaxe um tanto desagradável, mas parece funcionar melhor que o cpufreq. Eu sou capaz de definir a frequência agora :) Muito obrigado e lembre-se de postar uma resposta (a menos que você realmente não queira os pontos).
Aditsu 15/09/14

Respostas:

41

Isso ocorre porque o seu sistema está usando o novo driver chamado intel_pstate. Existem apenas dois governadores disponíveis ao usar este driver: powersavee performance.
O userspacegovernador está disponível apenas com o acpi-cpufreqdriver mais antigo (que será usado automaticamente se você desabilitar intel_pstateno momento da inicialização; em seguida, defina o governador / frequência com cpupower):

  • desabilite o driver atual: adicione intel_pstate=disableà sua linha de inicialização do kernel
  • inicialize e carregue o userspacemódulo:modprobe cpufreq_userspace
  • defina o governador: cpupower frequency-set --governor userspace
  • defina a frequência: cpupower --cpu all frequency-set --freq 800MHz
don_crissti
fonte
Obrigado, btw, o conjunto de frequências parece fazer a mesma coisa sem--cpu all
aditsu
3
Deve haver algumas desvantagens no uso de um driver mais antigo. O que eles são?
kontextify
2
@kontextify Mais usuários felizes, menos propensos a servir voluntariamente como ratos de laboratório para testar o novo lançamento.
Mephisto
0

A resposta está na sua pergunta:

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

Isso e o kernel devem ser compilados com o regulador do espaço do usuário ativado.

Jaun Mauro Fernandez
fonte