
Estou usando uma máquina Debian 8 AMD64 para benchmarking. Durante a experimentação, gostaria que a CPU operasse em uma frequência fixa (de preferência a máxima possível). Isso descartará a velocidade do clock da CPU como fonte de variação nos resultados.
Após algumas leituras, parece que o correto a fazer é alterar o governador da CPU para performance
, que é descritoaqui na documentação do kernel Linux:
O "desempenho" do governador CPUfreq define a CPU estaticamente para a frequência mais alta dentro dos limites de scaling_min_freq e scaling_max_freq.
Infelizmente, mais detalhes sobre scaling_min_freq
e scaling_max_freq
não são fornecidos. Esperançosamente, isso não importa, pois a frequência da CPU usada é o valor máximo do intervalo.
Então habilitei este governador usando cpufreq-set:
$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor desempenho desempenho desempenho desempenho
E para garantir, também desativei o modo turbo boost na BIOS:
$ cat /sys/devices/system/cpu/intel_pstate/no_turbo 1
Com base na descrição acima do regulador de desempenho, não esperaria nenhuma flutuação na velocidade do clock da CPU. No entanto, se eu executar repetidamente cpufreq-info
, vejo a velocidade do clock flutuando:
$ cpufreq-info | grep 'CPU atual fr' a frequência atual da CPU é 4,00 GHz. a frequência atual da CPU é 3,99 GHz. a frequência atual da CPU é 4,00 GHz. a frequência atual da CPU é 4,00 GHz. $ cpufreq-info | grep 'CPU atual fr' a frequência atual da CPU é 4,00 GHz. a frequência atual da CPU é 4,00 GHz. a frequência atual da CPU é 4,00 GHz. a frequência atual da CPU é 3,96 GHz. $ cpufreq-info | grep 'CPU atual fr' a frequência atual da CPU é 4,00 GHz. a frequência atual da CPU é 4,00 GHz. a frequência atual da CPU é 4,00 GHz. a frequência atual da CPU é 3,94 GHz. $ cpufreq-info | grep 'CPU atual fr' a frequência atual da CPU é 4,01 GHz. a frequência atual da CPU é 4,00 GHz. a frequência atual da CPU é 4,00 GHz. a frequência atual da CPU é 3,98 GHz.
Essa flutuação se deve ao hardware, ao BIOS, ao kernel ou a algum outro fator? Existe uma maneira de definir a frequência da CPU de forma que ela não flutue?
Responder1
Depois de algumas experiências, acho que posso responder minha própria pergunta.
Como mencionadoneste tópico, em determinados hardwares Intel, há duas maneiras de gerenciar a frequência da CPU:
- Usando pstate.
- Usando ACPI normal.
Quando o pstate é usado, o BIOS tem alguma influência sobre a velocidade do clock e parece que esta é a fonte das flutuações.
Você pode forçar a desativação do pstate anexando argumentos intel_pstate=disable
aos argumentos do kernel (edite /etc/default/grub
e adicione o argumento a GRUB_CMDLINE_LINUX_DEFAULT
. Finalmente execute sudo update-grub
).
Depois de fazer isso, a saída de cpufreq-info
parece muito diferente, e também noto que um conjunto diferente de controladores de CPU fica disponível (por exemplo, ondemand
agora está disponível).
Mais importante ainda, depois de definir o regulador para performance
, a velocidade do clock agora está fixa (no meu caso, para 4,00 GHz).
Você pode verificar /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver
se pstate ou ACPI está sendo usado para dimensionar a CPU. Esses arquivos podem assumir os valores acpi-cpufreq
ou intel_pstate
.
Responder2
Para os processadores Intel contemporâneos, a frequência é controlada pelo próprio processador e os estados P expostos ao software estão relacionados aos níveis de desempenho. A ideia de que a frequência pode ser definida para um único frequência é ficção para processadores Intel Core. Mesmo que o driver de escala selecione um único estado P, a frequência real na qual o processador funcionará será selecionada pelo próprio processador. [1]
[1]https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt
Responder3
eu li este tópico porque eu estava procurando definir uma frequência fixa para minha CPU, já que o ventilador não funciona mais (é claro que essas coisas acontecem quando você está no exterior, em uma ilha perdida para mergulho de lazer!) então meu ponto era mais para definir a frequência mais baixa (800Mhz) ..eu finalmente consegui fazer alterações no scaling_max_freq em /sys/devices/system/cpu/cpu*/cpufreq/ para cada cpu da configuração e agora está tudo bem, a frequência deve passar de 800Mhz para ....800Mhz. Funciona e resolveu o problema de superaquecimento que tive experiência. (a frequência agora é 799Mhz e não se move, o que permitiu que a CPU permanecesse em torno de 50°C!)
PS: também desativei o modo turbo (3,1Ghz)