Linux: Por que a frequência da CPU flutua ao usar o governor de desempenho?

7

Estou usando uma máquina Debian 8 amd64 para benchmarking. Durante a experimentação, eu gostaria que a CPU operasse em uma freqüência fixa (de preferência o máximo possível). Isso excluirá a velocidade do clock da CPU como fonte de variação nos resultados.

Depois de algumas leituras, parece que a coisa certa a fazer é mudar o controlador da CPU para performance , que é descrito aqui na documentação do kernel do Linux :

The CPUfreq governor "performance" sets the CPU statically to the highest frequency within the borders of scaling_min_freq and scaling_max_freq.

Infelizmente, mais detalhes sobre scaling_min_freq e scaling_max_freq não são fornecidos. Espero que isso não importe, já que a frequência da CPU usada é o valor máximo do intervalo.

Então eu habilitei este governor usando o cpufreq-set:

$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
performance
performance
performance
performance

E por precaução, também desativei o modo de turbo no BIOS:

$ cat /sys/devices/system/cpu/intel_pstate/no_turbo
1

Com base na descrição acima do governor 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 relógio flutuando:

$ cpufreq-info | grep 'current CPU fr'
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 3.99 GHz.
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 4.00 GHz.
$ cpufreq-info | grep 'current CPU fr'
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 3.96 GHz.
$ cpufreq-info | grep 'current CPU fr'
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 3.94 GHz.
$ cpufreq-info | grep 'current CPU fr'
  current CPU frequency is 4.01 GHz.
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 3.98 GHz.

Esta flutuação é devida a hardware, BIOS, kernel ou algum outro fator? Existe uma maneira de definir a frequência da CPU de tal forma que ela não flutue?

    
por Edd Barrett 24.08.2015 / 15:45

3 respostas

5

Depois de algumas experiências, acho que posso responder minha própria pergunta.

Como mencionado neste tópico , em determinado hardware da Intel, existem duas maneiras de gerenciar a frequência da CPU:

  • Uso de pstate.
  • Usando ACPI regular.

Quando o pstate é usado, o BIOS tem alguma palavra sobre a velocidade do clock, e parece que esta é a fonte das flutuações.

Você pode forçar pstate off anexando intel_pstate=disable aos argumentos do kernel (edite /etc/default/grub e adicione o arg 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 governadores de CPU se torna disponível (por exemplo, ondemand está disponível agora).

Mais importante, depois de definir o governador para performance , a velocidade do clock agora está fixa (no meu caso, para 4.00GHz).

Você pode procurar em /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver para determinar se pstate ou ACPI está sendo usado para dimensionar a CPU. Esses arquivos podem assumir os valores acpi-cpufreq ou intel_pstate .

    
por 24.08.2015 / 17:29
2

For contemporary Intel processors, the frequency is controlled by the processor itself and the P-states exposed to software are related to performance levels. The idea that frequency can be set to a single frequency is fiction for Intel Core processors. Even if the scaling driver selects a single P state the actual frequency the processor will run at is selected by the processor itself. [1]

[1] link

    
por 01.09.2015 / 23:47
-1

eu li este tópico porque eu estava olhando muito para definir uma freqüência fixa para o meu processador desde que o ventilador não funciona mais (claro que essas coisas acontecem quando você está em uma ilha perdida para mergulho!) então meu ponto era mais para definir a frequência mais baixa (800Mhz) ..i finalmente consegui fazer a alteração para o dimensionamento_max_freq no / sys / devices / system / cpu / cpu * / cpufreq / para cada cpu da configuração & agora está tudo bem a freqüência deve passar de 800Mhz para .... 800Mhz. Ele funciona e resolveu o problema de superaquecimento que eu tive experiência .. (a freqüência é agora 799Mhz e não se movem o que permitiu que a cpu permanecesse em torno de 50 ° C!)

PS: eu também desabilito o modo turbo (3,1Ghz)

    
por 18.04.2017 / 04:42