Kann ich mehrere Kerne mit unterschiedlichen Taktraten betreiben?

7

Ich sehe, dass die Kerne eines Intel i5-Computers, den ich betrachte, nur mit derselben Taktrate ausgeführt werden können: /sys/devices/system/cpu/cpu1/cpufreq/related_cpusListet alle CPUs auf. Durch Einstellen der Taktrate von cpu1 werden die CPUs wie erwartet geändert.

Angeblich sollte die von mir ausgeführte AMD A6-4400M-Maschine in der Lage sein, jeden Kern mit einer anderen /sys/devices/system/cpu/cpu1/cpufreq/related_cpuTaktrate auszuführen : listet nur CPU1 auf. Wenn ich die Taktrate von CPU1 mithilfe des Leistungsreglers einstelle und 1400000 an wiedergebe scaling_max_freq, bleibt die Taktrate von CPU00 erwartungsgemäß bei 2700000. Scaling_cur_freq von Cpu1 liest wie erwartet 1400000.

Die CPU1 cpuinfo_cur_freqliest jedoch 2700000. Aus dem Benchmarking geht hervor, dass CPU1 tatsächlich immer noch mit 2,7 GHz läuft. Vermisse ich etwas oder ist etwas kaputt?

Ich verwende Linux 2.6.35 und übergebe idle=mwaitdie Kernel-Befehlszeile.

Matt
quelle

Antworten:

4

Dies ist noch keine endgültige Antwort. Stattdessen sind einige Vorschläge zu lang, um in Kommentare zu passen.

Ich befürchte, Sie könnten die Bedeutung der sysfs cpufreq-Parameter leicht falsch interpretieren. Auf meinem Core Duo- Laptop werden beispielsweise die related_cpuParameter für beide Kerne gelesen. 0 1Dies würde Ihrer Interpretation zufolge bedeuten, dass die Kerne die Frequenzen nicht unabhängig voneinander wechseln können. Das ist aber nicht der Fall - ich kann jede Frequenz nach Belieben einstellen. Im Gegensatz dazu affected_cpuslistet der Parameter für jeden Kern nur die jeweilige CPU-Nummer auf.

Vielleicht haben Sie einen Blick auf Kernel - Dokumentation für die CPU-Frequenz zu bekommen , ein besseres Verständnis der Parameter wie nehmen wollen affected_cpus, related_cpus, scaling_*und cpuinfo_*. Die Dokumentation wird normalerweise mit Kernel-Quellpaketen verteilt. Insbesondere empfehle ich zu lesen <kernel-sources-dir>/Documentation/cpu-freq/user-guide.txt, wo <kernel-sources-dir>normalerweise für /usr/src/linuxoder stehen würde /usr/src/linux-<kernel-version>. (Wenn ich jetzt die Dokumentation selbst durchblättere, muss ich jedoch zugeben, dass ich einige der Nuancen im Zusammenhang mit der Frequenzskalierung nicht verstehe. Um diese vollständig zu verstehen, muss man wahrscheinlich zuerst ein solides Verständnis der CPU-Architekturen erlangen.)

Zurück zu Ihrer Frage. Und noch ein Testfall meinerseits: Wenn ich den Wert von scaling_max_freq(mit einem userspaceoder performanceeinem verwendeten Regler) ändere , schaltet die Uhr des Kerns automatisch auf dieses neue Maximum um. Das unterschiedliche Verhalten, das Sie beobachten, kann eines der folgenden sein:

  • spezifisch für die Hardware-Implementierung von Frequenzskalierungsmechanismen auf Ihrer CPU,
  • aufgrund von Unterschieden zwischen dem Standardmodul cpufreqund dem, phc-inteldas ich verwende,
  • normales Verhalten (nennen Sie es einen Fehler oder eine Funktion, wenn Sie so wollen) des cpufreqModuls, das sich seitdem geändert hat 2.6.35(meine aktuelle Kernel-Version ist 3.6.2),
  • Ergebnis eines Fehlers bei der cpufreqImplementierung Ihrer CPU (oder der gesamten Familie),
  • spezifisch für die Implementierung des performanceCPU-Reglers ab 2.6.35.

Einige der Dinge, die Sie tun könnten, um Ihre Untersuchung weiter voranzutreiben:

  • Lesen Sie das user-guide.txtund spielen Sie mehr mit anderen cpufreqParametern.
  • Wiederholen Sie die Tests, während Sie einen neueren Kernel ausführen. Am einfachsten ist es, eine Live-CD / DVD / USB zu starten.

Wenn Sie weiterhin unerwartetes Verhalten feststellen und mehr Gründe für die Annahme erhalten, dass es sich um einen Fehler handelt (dies muss unbedingt mit der neuesten kleineren Kernelversion überprüft werden), melden Sie dies auf kernel.org bugzilla .

rozcietrzewiacz
quelle