schlittermann

Langsame VMWare -- APM vs. VMWare

Symptom

Seit etwa Kernel 2.4.18 scheint es ein Problem zu geben, wenn der apm-Treiber geladen und der idle_threshold kleiner als 100% ist (CONFIG_APM_CPU_IDLE).

Sobald das Gast-System (das System in der virtuellen Maschine) idle ist, werden alle zeitabhängigen Aktionen sehr verzögert. Eine "Gast"-Sekunde wird dann ganz schnell zu 2 ... 10 "Host"-Sekunden.

Testen kann man diese Verhalten, wenn das Gast-System ziemlich idle ist und dann ein Ping gestartet wird. Normalerweise ist das Intervall zwischen den einzelnen Pings etwa eine Sekunde. Wenn man die Gast-Systemzeit vor und nach dem Ping vergleicht, sind auch etwa nur so viele Sekunden vergangen, wie Echo-Requests versand wurden. Sobald das Gast-System beschäftigigt wird (z.B Maus-Bewegungen), nähern sich die Gast-Sekunden den realen an.

Lösung

Die schnellste Lösung - die CPU-Idle-Calls zu unterbinden - ist nicht befriedigend. Ich würde die Idle-Calls gerne haben, wenn gerade kein VMWare läuft. Also erweiterte ich den apm-Treiber, so daß es jetzt möglich ist, den Idle-Schwellwert zur Laufzeit zu verändern. Es gibt nun im proc-Dateisystem einen neuen Eintrag: /proc/sys/kernel/idle_threshold.

Nutzung

Um den Proc-Eintrag zu aktivieren, muß der Treiber mit einer Idle-Schwelle unterhalb von 100% geladen werden. Entweder, in dem bei der Kernel-Konfiguration die "CPU Idle" Option gesetzt wird, oder in dem an den Treiber idle_threshold=95 übergeben wird.

Wenn das getan ist, dann kann jetzt von/nach /proc/sys/kernel/idle_threshold gelesen bzw. geschrieben werden.

Download (Kernel 2.4)
Download (Kernel 2.6)