Ich verwende eine Debian 8 amd64-Maschine zum Benchmarking. Während des Experimentierens möchte ich, dass die CPU mit einer festen Frequenz (vorzugsweise der maximal möglichen) arbeitet. Dies schließt die CPU-Taktrate als Quelle für Abweichungen in den Ergebnissen aus.
Nach einigem Lesen scheint es richtig zu sein, den CPU-Regler auf zu ändern performance
, was hier in der Linux-Kernel-Dokumentation beschrieben wird :
Der CPUfreq-Regler "Leistung" setzt die CPU statisch auf die höchste Frequenz innerhalb der Grenzen von scaling_min_freq und scaling_max_freq.
Leider werden weitere Details zu scaling_min_freq
und scaling_max_freq
nicht geliefert. Hoffentlich sollte es keine Rolle spielen, da die verwendete CPU-Frequenz der Maximalwert des Intervalls ist.
Also habe ich diesen Governor mit cpufreq-set aktiviert:
$ cat / sys / device / system / cpu / cpu * / cpufreq / scaling_governor Performance Performance Performance Performance
Und für ein gutes Maß habe ich auch den Turbo-Boost-Modus im BIOS deaktiviert:
$ cat / sys / device / system / cpu / intel_pstate / no_turbo 1
Basierend auf der obigen Beschreibung des Leistungsreglers würde ich keine Schwankung der CPU-Taktrate erwarten. Wenn ich jedoch wiederholt renne 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?
quelle
Antworten:
Nach einigen Experimenten denke ich, dass ich meine eigene Frage beantworten kann.
Wie in diesem Thread erwähnt , gibt es auf bestimmter Intel-Hardware zwei Möglichkeiten, die CPU-Frequenz zu verwalten:
Wenn pstate verwendet wird, hat das BIOS ein gewisses Mitspracherecht bei der Taktrate, und es scheint, dass dies die Ursache für die Schwankungen ist.
Sie können pstate deaktivieren, indem Sie
intel_pstate=disable
an die Kernel-Argumente anhängen (bearbeiten/etc/default/grub
Sie das Argument und fügen Sie es hinzuGRUB_CMDLINE_LINUX_DEFAULT
. Führen Sie es schließlich aussudo update-grub
).Danach
cpufreq-info
sieht die Ausgabe von ganz anders aus, und ich stelle auch fest, dass ein anderer Satz von CPU-Reglern verfügbar wird (z. B.ondemand
jetzt verfügbar).Am wichtigsten ist, dass nach dem Einstellen des
performance
Reglers die Taktrate jetzt 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 wird. Diese Dateien können die Werteacpi-cpufreq
oder annehmenintel_pstate
.quelle
[1] https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt
quelle
intel_pstate=disable
an den Kernel übergebe? Rufe ich dabei den "Legacy-Modus" auf?Intel Architectures Software Developer's Manual.
2) ja konsultieren . PS. Sie können auch mitx86_energy_perf_policy
Ich habe diesen Thread gelesen, weil ich zu sehr darauf aus war, eine feste Frequenz für meine CPU einzustellen, da der Lüfter nicht mehr funktioniert (natürlich passieren diese Dinge, wenn Sie im Ausland auf einer verlorenen Insel sind, um zu tauchen!), also war mein Punkt mehr zu setzen Die niedrigste Frequenz (800 MHz) ..i hat es endlich geschafft, die Skalierung_max_freq in / sys / device / system / cpu / cpu * / cpufreq / für jede CPU der Konfiguration zu ändern. Jetzt ist es in Ordnung, dass sich die Frequenz von 800 MHz bewegt bis .... 800Mhz. Es funktioniert und hat das Überhitzungsproblem gelöst, das ich erlebt habe. (Die Frequenz beträgt jetzt 799 MHz und bewegt sich nicht, wodurch die CPU bei etwa 50 ° C bleiben konnte!)
PS: Ich deaktiviere auch den Turbomodus (3,1 GHz)
quelle