Linux: Perché la frequenza della CPU fluttua quando si utilizza il Performance Governor?


8

Sto usando una macchina Debian 8 amd64 per il benchmarking. Durante la sperimentazione, vorrei che la CPU funzionasse a una frequenza fissa (preferibilmente il massimo possibile). Ciò escluderà la velocità di clock della CPU come fonte di variazione nei risultati.

Dopo alcune letture, sembra che la cosa giusta da fare sia cambiare il regolatore della CPU in performance, che è descritto qui nella documentazione del kernel Linux :

Il "performance" del regolatore CPUfreq imposta la CPU staticamente alla massima frequenza entro i limiti di scaling_min_freq e scaling_max_freq.

Purtroppo, ulteriori dettagli scaling_min_freqe scaling_max_freqnon vengono forniti. Eventualmente non dovrebbe importare, poiché la frequenza della CPU utilizzata è il valore massimo dell'intervallo.

Quindi ho abilitato questo governatore usando cpufreq-set:

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

E per buona misura, ho anche disabilitato la modalità turbo boost nel bios:

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

Sulla base della descrizione sopra del regolatore delle prestazioni, non mi aspetto alcuna fluttuazione nella velocità di clock della CPU. Tuttavia, se corro ripetutamente cpufreq-info, vedo la velocità del clock fluttuare:

$ cpufreq-info | grep 'current CPU fr'
  la frequenza attuale della CPU è di 4,00 GHz.
  la frequenza attuale della CPU è di 3,99 GHz.
  la frequenza attuale della CPU è di 4,00 GHz.
  la frequenza attuale della CPU è di 4,00 GHz.
$ cpufreq-info | grep 'current CPU fr'
  la frequenza attuale della CPU è di 4,00 GHz.
  la frequenza attuale della CPU è di 4,00 GHz.
  la frequenza attuale della CPU è di 4,00 GHz.
  la frequenza attuale della CPU è di 3,96 GHz.
$ cpufreq-info | grep 'current CPU fr'
  la frequenza attuale della CPU è di 4,00 GHz.
  la frequenza attuale della CPU è di 4,00 GHz.
  la frequenza attuale della CPU è di 4,00 GHz.
  la frequenza attuale della CPU è 3,94 GHz.
$ cpufreq-info | grep 'current CPU fr'
  la frequenza attuale della CPU è di 4,01 GHz.
  la frequenza attuale della CPU è di 4,00 GHz.
  la frequenza attuale della CPU è di 4,00 GHz.
  la frequenza attuale della CPU è di 3,98 GHz.

Questa fluttuazione è dovuta all'hardware, al BIOS, al kernel o ad altri fattori? C'è un modo per impostare la frequenza della CPU in modo che non fluttui affatto?


Che tipo di hardware del server stai usando? Quali sono le impostazioni di potenza del BIOS e delle prestazioni della CPU di quell'hardware?
ewwhite,

In realtà è una macchina desktop con una CPU i7. Ho caricato dmesg e cpuinfo qui: gist.github.com/vext01/73eea539eb041acf784b . Ri: impostazioni del BIOS, avrei bisogno di andare alla macchina e guardare. C'è qualche impostazione specifica che hai in mente?
Edd Barrett,

Non è "molto" fluttuazione rispetto alla normale variazione di pstate ... :)
rogerdpack

Risposte:


9

Dopo alcuni esperimenti, penso di poter rispondere alla mia domanda.

Come accennato in questo thread , su alcuni hardware Intel, ci sono due modi per gestire la frequenza della CPU:

  • Usando pstate.
  • Utilizzando ACPI normale.

Quando si usa pstate, il BIOS ha voce in capitolo sulla velocità di clock e sembra che questa sia la fonte delle fluttuazioni.

È possibile forzare pstate disattivando l'aggiunta intel_pstate=disableagli argomenti del kernel (modificare /etc/default/grube aggiungere l'arg a GRUB_CMDLINE_LINUX_DEFAULT. Infine eseguire sudo update-grub).

Dopo aver fatto ciò, l'output di cpufreq-infosembra molto diverso, e noto anche che un diverso set di regolatori CPU diventa disponibile (ad es. ondemandOra è disponibile).

performanceAncora più importante, dopo aver impostato il regolatore su , la velocità di clock è ora fissa (nel mio caso a 4,00 GHz).

È possibile cercare /sys/devices/system/cpu/cpu*/cpufreq/scaling_driverper determinare se pstate o ACPI vengono utilizzati per ridimensionare la CPU. Questi file possono assumere i valori acpi-cpufreqo intel_pstate.


Un altro trucco: usa "lsmod "per elencare i moduli caricati dal kernel, inserire nella blacklist tutti i moduli relativi al ridimensionamento della velocità della CPU / p-state / c-state / qualunque cosa e riavviare la macchina. Cerca "moduli del kernel nella lista nera".
Rufo El Magufo,


4

Per i processori Intel contemporanei, la frequenza è controllata dal processore stesso e gli stati P esposti al software sono correlati ai livelli di prestazioni. L'idea che la frequenza possa essere impostata su una singola frequenza è finzione per i processori Intel Core . Anche se il driver di ridimensionamento seleziona un singolo stato P, la frequenza effettiva a cui verrà eseguito il processore viene selezionata dal processore stesso. [1]

[1] https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt


Interessante. Quindi, questo vale ancora quando passo intel_pstate=disableal kernel? Sto invocando la "modalità legacy" quando lo faccio?
Edd Barrett,

1) non sono sicuro. è necessario consultare Intel Architectures Software Developer's Manual.2) sì. PS. Potresti anche voler giocare conx86_energy_perf_policy
SaveTheRbtz,

Grazie per i tuoi commenti Dato che non sono ancora sicuro, per ora sto lasciando la domanda aperta. Forse qualcuno farà luce sulla situazione in seguito.
Edd Barrett,

-1

ho letto questa discussione perché stavo troppo cercando di impostare una frequenza fissa per la mia cpu poiché la ventola non funziona più (ovviamente quelle cose accadono quando sei all'estero in un'isola perduta per il tempo libero!) quindi il mio punto era più da impostare la frequenza più bassa (800Mhz) ..i alla fine sono riuscito a cambiare scaling_max_freq in / sys / devices / system / cpu / cpu * / cpufreq / per ogni CPU della configurazione e ora va bene che la frequenza dovrebbe passare da 800Mhz a .... 800Mhz. Funziona e ha risolto il problema di surriscaldamento che ho avuto esperienza .. (la frequenza ora è 799 Mhz e non si muove, il che ha permesso alla CPU di rimanere intorno ai 50 ° C!)

PS: disabilito anche la modalità turbo (3,1 Ghz)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.