
Ich verwende zum Benchmarking eine Debian 8 amd64-Maschine. Während des Experimentierens möchte ich, dass die CPU mit einer festen Frequenz (vorzugsweise der maximal möglichen) läuft. Dadurch wird die CPU-Taktfrequenz als Quelle von Abweichungen in den Ergebnissen ausgeschlossen.
Nach einigem Lesen scheint es das Richtige zu sein, den CPU-Governor auf zu ändern performance
, was beschrieben wirdhier in der Linux-Kernel-Dokumentation:
Der CPUfreq-Regler „Leistung“ stellt die CPU statisch auf die höchste Frequenz innerhalb der Grenzen von scaling_min_freq und scaling_max_freq ein.
Leider werden keine weiteren Details zu scaling_min_freq
und scaling_max_freq
bereitgestellt. Hoffentlich sollte es keine Rolle spielen, da die verwendete CPU-Frequenz der Maximalwert des Intervalls ist.
Daher habe ich diesen Regler mit cpufreq-set aktiviert:
$ cat /sys/geräte/system/cpu/cpu*/cpufreq/scaling_governor Leistung Leistung Leistung Leistung
Und sicherheitshalber habe ich auch den Turbo-Boost-Modus im BIOS deaktiviert:
$ cat /sys/geräte/system/cpu/intel_pstate/no_turbo 1
Basierend auf der obigen Beschreibung des Leistungsreglers würde ich keine Schwankungen in der CPU-Taktrate erwarten. Wenn ich jedoch wiederholt ausführe cpufreq-info
, sehe ich, dass die Taktrate schwankt:
$ cpufreq-info | grep 'aktuelle CPU fr' Die aktuelle CPU-Frequenz beträgt 4,00 GHz. Die aktuelle CPU-Frequenz beträgt 3,99 GHz. Die aktuelle CPU-Frequenz beträgt 4,00 GHz. Die aktuelle CPU-Frequenz beträgt 4,00 GHz. $ cpufreq-info | grep 'aktuelle CPU fr' Die aktuelle CPU-Frequenz beträgt 4,00 GHz. Die aktuelle CPU-Frequenz beträgt 4,00 GHz. Die aktuelle CPU-Frequenz beträgt 4,00 GHz. Die aktuelle CPU-Frequenz beträgt 3,96 GHz. $ cpufreq-info | grep 'aktuelle CPU fr' Die aktuelle CPU-Frequenz beträgt 4,00 GHz. Die aktuelle CPU-Frequenz beträgt 4,00 GHz. Die aktuelle CPU-Frequenz beträgt 4,00 GHz. Die aktuelle CPU-Frequenz beträgt 3,94 GHz. $ cpufreq-info | grep 'aktuelle CPU fr' Die aktuelle CPU-Frequenz beträgt 4,01 GHz. Die aktuelle CPU-Frequenz beträgt 4,00 GHz. Die aktuelle CPU-Frequenz beträgt 4,00 GHz. Die aktuelle CPU-Frequenz beträgt 3,98 GHz.
Liegt diese Schwankung an der Hardware, dem BIOS, dem Kernel oder einem anderen Faktor? Gibt es eine Möglichkeit, die CPU-Frequenz so einzustellen, dass sie überhaupt nicht schwankt?
Antwort1
Nach einigen Experimenten denke ich, dass ich meine eigene Frage beantworten kann.
Wie erwähntin diesem Thread, auf bestimmter Intel-Hardware gibt es zwei Möglichkeiten, die CPU-Frequenz zu verwalten:
- Verwenden von pstate.
- Normales ACPI wird verwendet.
Wenn pstate verwendet wird, hat das BIOS einen gewissen Einfluss auf die Taktfrequenz und es scheint, dass hier die Ursache der Schwankungen liegt.
Sie können pstate zwangsweise deaktivieren, indem Sie es intel_pstate=disable
an die Kernel-Argumente anhängen (bearbeiten Sie /etc/default/grub
das Argument und fügen Sie es hinzu GRUB_CMDLINE_LINUX_DEFAULT
. Führen Sie abschließend aus sudo update-grub
).
Nachdem ich dies getan habe, sieht die Ausgabe cpufreq-info
ganz anders aus und ich stelle auch fest, dass ein anderer Satz von CPU-Governors verfügbar wird (z. B. ondemand
ist jetzt verfügbar).
Am wichtigsten ist, dass nach dem Einstellen des Reglers auf performance
die Taktfrequenz nun fest ist (in meinem Fall auf 4,00 GHz).
Sie können nachsehen, /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver
ob pstate oder ACPI zum Skalieren der CPU verwendet werden. Diese Dateien können die Werte acpi-cpufreq
oder annehmen intel_pstate
.
Antwort2
Bei modernen Intel-Prozessoren wird die Frequenz vom Prozessor selbst gesteuert und die der Software zugänglich gemachten P-Zustände hängen mit den Leistungsstufen zusammen. Die Idee, dass die Frequenz auf eine einzige Frequenz ist Fiktion für Intel Core ProzessorenAuch wenn der Skalierungstreiber nur einen einzigen P-Zustand auswählt, wird die tatsächliche Frequenz, mit der der Prozessor läuft, vom Prozessor selbst bestimmt. [1]
[1]https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt
Antwort3
ich habe diesen Thread gelesen, weil ich auch nach einer festen Frequenz für meine CPU gesucht habe, da der Lüfter nicht mehr funktioniert (natürlich passieren solche Dinge, wenn man zum Vergnügen auf einer einsamen Insel im Ausland taucht!), also ging es mir eher darum, die niedrigste Frequenz (800 MHz) einzustellen. Ich habe es endlich geschafft, die scaling_max_freq in /sys/devices/system/cpu/cpu*/cpufreq/ für jede CPU der Konfiguration zu ändern, und jetzt ist es in Ordnung, die Frequenz soll von 800 MHz auf … 800 MHz verschoben werden. Es funktioniert und hat das Überhitzungsproblem gelöst, das ich erlebt habe … (die Frequenz beträgt jetzt 799 MHz und ändert sich nicht, wodurch die CPU bei etwa 50 °C bleiben konnte!)
PS: Ich deaktiviere auch den Turbomodus (3,1 GHz).