# Permanente Zeitabweichung mit Gentoo als VBox-Guest

## Jimini

Aloha,

ich habe mehrere VMs aufgesetzt. Host- als auch Gastsystem sind Gentoo. Eine der VMs hat nun das Problem, dass die Zeit permanent falsch geht, der Grad der Abweichung variiert dabei. Mal sind es sechs Minuten, nach einem Reboot dann acht Minuten, nach einem weiteren Reboot drei Minuten. Auf allen drei VMs sind die virtualbox-guest-additions installiert. Ich bootete die VM, deren Uhr falsch geht, testweise von der Gentoo-Install-CD, hier ging die Uhr dann um genau eine Stunde vor, was ich auf die Zeitzone schiebe. Es liegt also nicht an der VM, sondern an der Gentoo-Installation. 

NTP ist auf keinem der Systeme installiert, das Syncen sollten eigentlich die Guest Additions übernehmen (die Uhrzeit auf dem Host ist korrekt).

Starte ich die Guest Additions von Hand, werden folgende Zeilen geloggt:

 *Quote:*   

> [2011-03-22 19:55:08] debug kern kernel [11232.970060] vboxguest: Successfully loaded version 3.2.12 (interface 0x00010004)
> 
> [2011-03-22 19:55:08] warning kern kernel [11232.986952] vboxsf: Unknown symbol utf32_to_utf8 (err 0)
> 
> [2011-03-22 19:55:08] warning kern kernel [11232.986997] vboxsf: Unknown symbol load_nls (err 0)
> ...

 

Das tritt allerdings auch auf einem System auf, dessen Zeit stimmt.

Nächste Anlaufstelle war /etc/conf.d/clock:

 *Quote:*   

> CLOCK="UTC"
> 
> TIMEZONE="Europe/Berlin"
> 
> CLOCK_OPTS=""
> ...

 

Auch diese Datei unterscheidet sich nicht von dem Exemplar auf den beiden anderen VMs.

Die Konfiguration der VMs habe ich verglichen, hier unterscheiden sich nur Name, MAC-Adressen - der übliche Kram eben. 

Ich glaube, dass das Problem auftritt, seit ich heute morgen versehentlich die Mountoptionen für / auf zwei VMs auf nosuid, noexec und nodev setzte, was ich erst beim nächsten Reboot bemerkte. Ich behob den Fehler, indem ich von der Install-CD bootete, die Systeme scheinen jetzt - bis auf die Zeit beim einen System - auch wieder fehlerfrei zu laufen. 

Bisher kenne ich nur die üblichen Probleme, was die Uhrzeit angeht - also dass beispielsweise eine falsche Zeitzone eingestellt ist; hier handelt es sich aber um Minuten. Was könnte mir da noch dazwischenschießen?

MfG Jimini

Edit: kleine Offtopic-Frage - ist es irgendwie möglich, die Module der Guest Additions zu nutzen, wenn man einen Kernel ohne Modul-Support laufen hat? Also die Module irgendwie fest einzubetten? Es wurmt mich ein bisschen, wenn ich nur wegen den Guest Additions generell das Laden von Modulen ermöglichen muss.

----------

## Jimini

Ich konnte das Problem partout nicht finden und hatte jetzt auch keinen Bock mehr, noch länger zu suchen, also habe ich das Image der einwandfrei laufenden VM geklont und angepasst. Jetzt laufen alle Uhren wieder genau.

MfG Jimini

----------

## Jimini

...oder auch nicht. Nachdem das komplette System rund einen halben Tag ausgeschaltet war, geht die Uhr einer VM 2 Sekunden nach, auch nach mehreren Reboots. Die Guest Additions laufen.

Any ideas? So langsam nervt mich der Hickhack, es kann ja wohl nicht so schwer sein, 3 VMs mit korrekt gehenden Uhren laufen zu haben, ohne gleich die ganze NTP-Maschinerie in Gang setzen zu müssen...

MfG Jimini

----------

## Beforegod

Gibt es für die VM Spezifische Parameter.

- CPU

- RAM

- IO-APIC

- VM-T

- Nested Paging

?

----------

## Josef.95

Hmm.., mit NTP in einer VM wäre ich eher vorsichtig.

Siehe zb die Kommentare aus diesem Blog --> VirtualBox Guest Additions und die Zeit

----------

## schmutzfinger

Das Uhren in VMs driften ist ganz normal. Ein Betriebssystem programmiert normalerweise ein Timer-Gerät um regelmässig (Linux CONFIG_HZ) oder zu bestimmten Zeitpunkten (Linux CONFIG_NO_IDLE_HZ) von der Hardware einen Interrupt zu bekommen. Dabei geht es davon aus, dass diese Interrupts auch zum festgelegten Zeitpunkt ankommen. Ausserdem kann ein OS die CPU auch fragen, wie viele Instruktionen sie bisher ausgeführt hat. Anhand der Taktfrequenz der CPU kann man dann auch eine Zeitspanne zwischen zwei Messpunkten errechnen.

In einer VM sind die Timer-Geräte üblicherweise emuliert und liefern die Interrupts nicht mit der gewünschten Frequenz aus. Und die CPU wird mit dem Host und anderen VMs geteilt. Der Instruktions-Zähler der CPU kann also auch nicht als Grundlage für eine genaue Uhr verwendet werden. Der Gast kann sehen, dass Zeit vergangen ist. Aber in der Zeit lief eventuell eine andere VM oder der Host.

Wenn deine VMs Internet-Zugang haben dann würde ich einfach auf ntp zurückgreifen und einen ntp-Server aus dem Internet verwenden. Wenn sie keinen Internetzugang haben dann ist es vielleicht eine gute Idee auf dem Host einen ntp-Server laufen zu lassen.

In der Dokumentation von Vbox gibt es auch ein Kapitel zur Synchronisation mit Hilfe der guest additions

http://www.virtualbox.org/manual/ch09.html#id419820

Dort sind auch noch andere Möglichkeiten beschrieben. Zum Beispiel die Anpassung des Instruktions-Zählers (TSC) entsprechend der Erwartungen des Gastes.

In Linux kann man einstellen, welche Methode zur Zeitmessung verwendet werden soll.

Siehe dazu /sys/devices/system/clocksource/clocksource*/.

Du kannst dir dabei die Datei available_clocksource mit cat angucken und einen der Werte dann mit echo in current_clocksource schreiben.

zB:

```

echo hpet > /sys/devices/system/clocksource/clocksource0/current_clocksource

```

Was du da zur Auswahl hast hängt von deinem Kernel ab. "hpet" wäre für eine VM mit hoher Wahrscheinlichkeit ungünstig und würde zu einem starken Driften führen.

"tsc" zusammen mit "VBoxInternal/TM/TSCTiedToExecution" könnte hingegen eine ziemlich stabile Variante sein. Wobei diese Anpassung viel Arbeit für VBox und damit entsprechend overhead bedeuted.

Je besser die Quelle für die Zeitmessung desto seltener muss man synchronisieren. Ich würde dir raten einfach oft zu synchronisieren. Entweder mit ntp oder mit VBox.

----------

## schmutzfinger

 *Josef.95 wrote:*   

> Hmm.., mit NTP in einer VM wäre ich eher vorsichtig.
> 
> 

 

Dieser Blog-Eintrag hat mit dem Thema nix zu tun.

In einer VM einen ntp-Server laufen zu lassen ist ... naja Schwachsinn. Ein ntp-Server muss eine "gute" Uhr haben und wird von clients mit "schlechten" Uhren verwendet. In die VM gehört der client, der die "guten" Atomuhren aus dem Internet benutzt.

----------

## Josef.95

@schmutzfinger

Danke für deine ausführliche Erklärung zum Thema.

Thumbs up

----------

## Hanisch

Hallo,

ich hänge mich hier mal mit rein. Auch meine Uhr im Gentoo-Gast läuft immer einige Sekunden hinterher.

Das aber ist  nicht mein Problem, sondern siehe meinen Thread  "Guest Additions installieren", wo es einfach nicht gelingt, die GuestAdditions zu installieren.

Da Ihr ja alle die GuestAdditions installiert habt, könnt Ihr mir vielleicht mitteilen, wie das geht (Bitte im Thread "Guest Additions installieren").

Danke.

Gruß

Ch. Hanisch

----------

## Jimini

 *Beforegod wrote:*   

> Gibt es für die VM Spezifische Parameter.
> 
> - CPU
> 
> - RAM
> ...

 

Natürlich - aber da z.B. beim Booten von der Install-CD die Uhr um genau eine Stunde falsch ging, schiebe ich den schwarzen Peter dem Betriebssystem und nicht der VM zu. Zudem haben alle drei VMs die gleichen Parameter (von Festplattenimage, MAC-Adresse und VRDP-Port mal abgesehen).

Hier die Parameter:

VM1:

http://nopaste.info/8b4442486c.html

VM2:

http://nopaste.info/90c72245d6.html

Zuerst machte VM2 Zicken, also klonte ich das Image von VM1 und passte es entsprechend an. Dann machte auf einmal VM1 Probleme.

@ schmutzfinger: zunächst einmal danke für den ausführlichen Beitrag. Ich würde bei den VMs gerne komplett auf NTP verzichten - wie du schon schreibst, ist das theoretisch (und eigentlich auch praktisch) unnötig, da die Guest Additions das übernehmen können - im Supportchannel von VirtualBox riet man mir auch davon ab, NTP in einer VM zu nutzen.

Zudem hatte ich generell große Probleme, die Zeitsynchronisation mittels NTP hinzubekommen - es nervt, wenn beim Booten des Hosts die VMs "fortgesetzt" werden, die Uhr um beispielsweise 7 Stunden falsch geht, NTP aber nicht synct. Daher versprach ich mir sehr viel von den Guest Additions - auch wenn ich hierbei leider das Laden von Modulen erlauben muss.

Meine VMs verwenden als Methode übrigens "TSC". 

Den Link werde ich mir mal zu Gemüte führen, besten Dank!

MfG Jimini

Edit: ach ja, bevor jetzt jemand den Fehler sucht - momentan laufen die Uhren korrekt.

----------

