Beobachtung:
Ich habe einen HP Server mit einer AMD Dual-Core-CPU (Turion II Neo N40L), die Frequenzen von 800 bis 1500 MHz skalieren kann. Die Frequenzskalierung funktioniert unter FreeBSD 9 und unter Ubuntu 12.04 mit dem Linux-Kernel 3.5. Wenn ich FreeBSD 9 jedoch in eine KVM-Umgebung über Ubuntu lege, funktioniert die Frequenzskalierung nicht. Der Gast (also FreeBSD) erkennt die minimalen und maximalen Frequenzen nicht und skaliert daher nichts, wenn die CPU-Belegung höher wird. Auf dem Host (also Ubuntu) verbraucht der KVM-Prozess zwischen 80 und 140% der CPU-Ressource, aber es findet keine Frequenzskalierung statt. Die Frequenz bleibt bei 800 MHz, obwohl der On-Demand-Governor schnell ausgeführt wird, wenn ich einen anderen Prozess auf derselben Ubuntu-Box ausführe skaliert die Frequenz auf 1500 MHz!
Bedenken und Fragen:
Ich verstehe nicht, wie die CPU möglicherweise virtualisiert ist und ob es an dem Gast liegt, die richtige Skalierung durchzuführen. Müssen einige CPU-Funktionen für den Gast verfügbar gemacht werden, damit dies funktioniert?
Anhang:
Der folgende Versionshinweis zu Red Hat deutet darauf hin, dass die Frequenzskalierung auch in einer virtualisierten Umgebung funktioniert (siehe Kapitel 6.2.2 und 6.2.3). In diesem Hinweis wird jedoch nicht darauf eingegangen, mit welcher Virtualisierungstechnologie dies funktioniert (kvm, xen) , usw.?)
Zur Information cpufreq-info
lautet die Ausgabe unter Ubuntu:
$ cpufreq-info
cpufrequtils 007: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
driver: powernow-k8
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 8.0 us.
hardware limits: 800 MHz - 1.50 GHz
available frequency steps: 1.50 GHz, 1.30 GHz, 1000 MHz, 800 MHz
available cpufreq governors: conservative, ondemand, userspace, powersave, performance
current policy: frequency should be within 800 MHz and 1.50 GHz.
The governor "ondemand" may decide which speed to use
within this range.
current CPU frequency is 800 MHz.
cpufreq stats: 1.50 GHz:14.79%, 1.30 GHz:1.07%, 1000 MHz:0.71%, 800 MHz:83.43% (277433)
analyzing CPU 1:
driver: powernow-k8
CPUs which run at the same hardware frequency: 1
CPUs which need to have their frequency coordinated by software: 1
maximum transition latency: 8.0 us.
hardware limits: 800 MHz - 1.50 GHz
available frequency steps: 1.50 GHz, 1.30 GHz, 1000 MHz, 800 MHz
available cpufreq governors: conservative, ondemand, userspace, powersave, performance
current policy: frequency should be within 800 MHz and 1.50 GHz.
The governor "ondemand" may decide which speed to use
within this range.
current CPU frequency is 800 MHz.
cpufreq stats: 1.50 GHz:14.56%, 1.30 GHz:1.06%, 1000 MHz:0.79%, 800 MHz:83.59% (384089)
Der Grund, warum diese Funktion funktionieren soll, ist: Energie sparen, leiser (weniger heiß) laufen und auch einfach neugierig sein, besser zu verstehen, warum dies nicht funktioniert und wie es funktioniert.
cpufreq-info
auf dem Host-Betriebssystem ausgeführt werden, wird sich wahrscheinlich beschweren, dass kein Treiber verfügbar ist.
cpufreq-info
beschwert sich nicht und gibt die richtigen Informationen aus, so dass die CPU voll unterstützt wird (natürlich in gewisser Weise!). Der verwendete Treiber ist powernow-k8, was ebenfalls logisch ist.