Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

Auf einem virtuellen Linux-Computer mit Virtual Server 2005 R2 als Host läuft die Systemzeit zu schnell

Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
918461 The system time runs too fast on a Linux-based virtual machine that is hosted in Virtual Server 2005 R2
Problembeschreibung
Nachdem Sie einen virtuellen Linux-Computer in Microsoft Virtual Server 2005 R2 installiert haben, läuft die Systemzeit im Linux-Gastbetriebssystem zu schnell. Beispielsweise kann die Uhrzeit im Linux-Gastbetriebssystem etwa alle 48 Sekunden um eine Minute weitergehen. Nach einiger Zeit stellt der virtuelle Linux-Computer die Uhr auf die richtige Zeit zurück.

Dieses Problem tritt auf, wenn Sie mit einer Linux-Distribution arbeiten, die den Linux 2.6-Kernel verwendet.
Ursache
Dieses Verhalten ist darauf zurückzuführen, dass der Standardalgorithmus im Linux 2.6-Kernel bei verlorenen Zeitgeberticks eine Korrektur vornimmt. Wegen dieser Korrektur kann es dazu kommen, dass die Uhr des virtuellen Computers vorgeht.
Lösung
Fügen Sie den Parameter clock=pit zur Linux-Bootloader-Datei hinzu, um dieses Problem zu beheben. Der Parameter clock=pit bewirkt, dass der Linux 2.6-Kernel einen effizienteren Algorithmus für die Synchronisierung der Uhrzeit zwischen dem virtuellen Computer und dem Hostcomputer verwendet. Dieser Algorithmus nimmt bei verlorenen Ticks keine Korrektur vor. Deshalb geht die Uhr des virtuellen Computers bei Verwendung dieses Algorithmus nicht vor. Gehen Sie folgendermaßen vor, um diesen Parameter hinzuzufügen.

GRUB-Bootloader

  1. Öffnen Sie im Gastbetriebssystem die Datei "/boot/grub/menu.lst" mit einem Texteditor, z. B. Vi. Geben Sie beispielsweise folgenden Befehl an einer Konsole ein, und drücken Sie die [EINGABETASTE]:
    vi /boot/grub/menu.lst
    Diese Datei enthält die Linux-Startoptionen und sieht etwa so aus:
    title Linux   kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791   initrd (hd0,4)/initrdtitle windows   root (hd0,0)   makeactive   chainloader +1title floppy   root (fd0)   chainloader +1title failsafe   kernel (hd0,4)/vmlinuz.shipped root=/dev/hda7 ide=nodma apm=off acpi=off vga=normal nosmp maxcpus=0 3   initrd (hd0,4)/initrd.shipped
  2. Fügen Sie im Bereich title Linux dieser Datei den Parameter clock=pit zum Kernel-Eintrag hinzu. Dieser Bereich sollte etwa so aussehen:
    title Linux   kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791 clock=pit   initrd (hd0,4)/initrd
  3. Speichern Sie die Änderungen an der Datei, beenden Sie VI, und starten Sie den virtuellen Linux-Computer neu.

LILO-Bootloader

  1. Öffnen Sie im Gastbetriebssystem die Datei "/etc/lilo.conf" mit einem Texteditor, z. B. Vi. Geben Sie beispielsweise folgenden Befehl an einer Konsole ein, und drücken Sie die [EINGABETASTE]:
    vi /etc/lilo.conf
    Diese Datei enthält die Linux-Startoptionen und sieht etwa so aus:
    ### LILO global section boot    = /dev/hda           # LILO installation target: MBR vga     = normal             # normal text mode (80x25 chars) read-only lba32                        # Use BIOS to ignore                              # 1024 cylinder limit prompt password = q99iwr4           # LILO password (example) timeout = 80                 # Wait at prompt for 8 s before                              # default is booted message = /boot/message      # LILO's greeting ### LILO Linux section (default)   image  = /boot/vmlinuz     # Default   label  = linux   root   = /dev/hda7         # Root partition for the kernel   initrd = /boot/initrd ### LILO Linux section (fallback)   image  = /boot/vmlinuz.shipped   label  = Failsafe   root   = /dev/hda7   initrd = /boot/initrd.suse   optional ### LILO other system section (Windows)   other  = /dev/hda1         # Windows partition   label  = windows ### LILO memory test section (memtest)   image  = /boot/memtest.bin   label  = memtest86
  2. Geben Sie im Bereich ### LILO Linux section (default) dieser Datei den folgenden Eintrag ein:
    Append = "clock=pit"
    Dieser Bereich sollte etwa so aussehen:
    ### LILO global section boot    = /dev/hda           # LILO installation target: MBR vga     = normal             # normal text mode (80x25 chars) read-only lba32                        # Use BIOS to ignore                              # 1024 cylinder limit prompt password = q99iwr4           # LILO password (example) timeout = 80                 # Wait at prompt for 8 s before                              # default is booted message = /boot/message      # LILO's greeting ### LILO Linux section (default)   image  = /boot/vmlinuz     # Default   label  = linux   root   = /dev/hda7         # Root partition for the kernel   initrd = /boot/initrd ### LILO Linux section (fallback)   image  = /boot/vmlinuz.shipped   label  = Failsafe   root   = /dev/hda7   initrd = /boot/initrd.suse   optional ### LILO other system section (Windows)   other  = /dev/hda1         # Windows partition   label  = windows ### LILO memory test section (memtest)   image  = /boot/memtest.bin   label  = memtest86
  3. Speichern Sie die Änderungen an der Datei, und beenden Sie Vi.
  4. Führen Sie den Befehl lilo aus. Geben Sie beispielsweise folgenden Befehl ein, und drücken Sie die [EINGABETASTE]:
    /sbin/lilo
  5. Starten Sie den virtuellen Linux-Computer neu.
Weitere Informationen
Bei virtuellen Computern gibt es allgemein Probleme mit der Synchronisierung der Uhrzeit mit dem physischen Hostcomputer. Zwar sind die Microsoft Virtual Server 2005 Virtual Machine Additions dafür ausgelegt, zur Behebung dieses Problems beizutragen, jedoch können Zeitsynchronisierungsprobleme abhängig davon auftreten, auf welche Weise das Gastbetriebssystem die Systemzeit ermittelt. Jedes Betriebssystem hat dafür seine eigene Methode. Der Linux 2.6-Kernel verwendet drei Arten von Algorithmen, um die Systemzeit zu ermitteln. Diese Algorithmen sind effizienter als die Algorithmen, die vom Linux 2.4-Kernel und früheren Versionen des Linux-Kernels verwendet werden.

Zeitsynchronisierung auf einem virtuellen Computer

Ein Betriebssystem ermittelt die Uhrzeit im Allgemeinen anhand der periodischen Interrupts, die von einem bestimmten Hardwaregerät erzeugt werden. In der Regel erhält ein Betriebssystem die Uhrzeit während seines Startvorgangs von einer batteriebetriebenen CMOS-Uhr (CMOS = Complimentary Metal Oxide Semi-conductor). Das Betriebssystem konfiguriert dann ein Zeitgebergerät, das periodische Interrupts erzeugt. Das Betriebssystem ermittelt die Zeit, indem es diese Interrupts zählt.

Bei einem virtuellen Computer wird die physische Hardware vom Hostbetriebssystem und vom Gastbetriebssystem gemeinsam genutzt. Wenn ein virtueller Computer einen Zeit-Interrupt erzeugt, kann das Gastbetriebssystem ausgeführt werden oder auch nicht. Deshalb werden einige dieser Interrupts vom Gastbetriebssystem nicht sofort registriert. Zur Umgehung dieses Problems erstellt der virtuelle Computer ein Protokoll dieser Interrupts. Außerdem erhöht der virtuelle Computer die Frequenz der Zeitgeber-Interrupts, wenn er in Betrieb ist. Die erhöhte Frequenz der Zeitgeber-Interrupts soll bewirken, dass das Gastbetriebssystem die korrekte Uhrzeit behält. Jedoch kann die erhöhte Frequenz dieser Interrupts auch dazu führen, dass das Gastbetriebssystem einige der Interrupts nicht registriert. Diese fehlenden Interrupts werden als "verlorene Ticks" (lost ticks) bezeichnet. Verlorene Ticks können dazu führen, dass die Systemzeit des Gastbetriebssystems langsamer läuft als die tatsächliche Zeit. Dieses Problem kann zwar auch auf einem physischen Computer auftreten, tritt jedoch mit höherer Wahrscheinlichkeit in einem Gastbetriebssystem auf, das auf einem virtuellen Computer ausgeführt wird.

Der Linux 2.4-Kernel und frühere Versionen des Linux-Kernels verwenden die Zeitgeber-Interrupts, die vom Zeitgeber geliefert werden. Die Algorithmen, die im Linux 2.4-Kernel für die Zeitsynchronisierung implementiert sind, berücksichtigen verlorene Ticks nicht. Das kann dazu führen, dass die Systemzeit des Linux-Gastbetriebssystems langsamer läuft als die tatsächliche Uhrzeit. Zur Behebung dieses Problems enthalten manche Linux-Distributionen einen Patch für den Linux 2.4-Kernel, damit Zeitgeber-Interrupts in einem schnelleren Takt erfolgen. Jedoch können im Linux-Gastbetriebssystem auch weiterhin Synchronisierungsprobleme wegen verlorener Ticks auftreten.

Der Linux 2.6-Kernel implementiert effizientere Algorithmen zur Behebung des Zeitsynchronisierungsproblems. Im Gegensatz zu den Linux 2.4-Algorithmen berücksichtigen Linux 2.6-Algorithmen verlorene Ticks und nehmen eine entsprechende Korrektur vor. Jedoch kann diese Korrektur dazu führen, dass die Uhr des virtuellen Linux-Computers vorgeht. Der Linux 2.6-Kernel hat drei verschiedene Uhrparameter, die zur Startzeit an den Kernel übergeben werden können. Verwenden Sie diese Parameter, um die Algorithmen für die Zeitsynchronisierung auszuwählen. Weitere Informationen zu diesen Algorithmen finden Sie im Abschnitt "Zeitbestimmung in Linux". Jeder dieser Algorithmen für die Zeitbestimmung hat Vorteile und Nachteile. Die Nachteile machen sich jedoch auf einem virtuellen Computer stärker bemerkbar als auf einem physischen Computer.

Computerzeitgeber-Hardware

Jedes Betriebssystem hat seine eigene Methode für die Zeitbestimmung. Es gibt verschiedene Zeitgebermechanismen, die für die Bestimmung der Zeit auf einem Computer verwendet werden:
  • Programmable Interval Timer (PIT)
  • CMOS Real Time Clock (RTC)
  • Local Advanced Programmable Interrupt Controller (APIC-Timer)
  • Advanced Configuration and Power Interface (ACPI) (Dieser Mechanismus ist auch als "Chipset-Timer" bekannt).
  • Time Stamp Counter (TSC)
  • High Precision Event Timer (HPET)

Zeitbestimmung in Linux

Auf einer x86-Plattform interagiert der Linux 2.6-Kernel mit den folgenden Uhrtypen, um die Zeit zu bestimmen:
  • Power Management Timer (PMTMR)
    Diese Uhr hat folgende Merkmale:
    • Sie wird mit dem Kernel-Parameter clock=pmtmr eingestellt.
    • Sie verwendet den ACPI-Timer.
    • Sie kann etwas vorgehen.
  • Time Stamp Counter (TSC)
    Diese Uhr hat folgende Merkmale:
    • Sie wird mit dem Kernel-Parameter clock=tsc eingestellt. (Dies ist der Standardparameter).
    • Sie verwendet den PIT-Zähler und den TSC für die Zeitinterpolation.
    • Sie kann in einer Umgebung mit virtuellen Computern eine zu starke Korrektur bewirken. Deshalb kann es vorkommen, dass die Uhr des Gastbetriebssystems zu schnell läuft.
    • Sie kann um bis zu 10 Prozent vorgehen.
  • Programmable Interval Timer (PIT)
    Diese Uhr hat folgende Merkmale:
    • Sie wird mit dem Kernel-Parameter clock=pit eingestellt.
    • Sie verwendet nur den PIT-Zähler für die Zeitinterpolation.
    • Sie verwendet den einfachsten der verfügbaren Algorithmen.
    • Sie geht nicht vor, da bei verlorenen Ticks keine Korrektur vorgenommen wird.
Weitere Informationen zu Virtual Server 2005 finden Sie auf folgender Microsoft-Website:Die in diesem Artikel genannten Fremdanbieterprodukte stammen von Herstellern, die von Microsoft unabhängig sind. Microsoft gewährt keine implizite oder sonstige Garantie in Bezug auf die Leistung oder Zuverlässigkeit dieser Produkte.
timesync
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Eigenschaften

Artikelnummer: 918461 – Letzte Überarbeitung: 05/04/2006 23:24:22 – Revision: 1.2

Microsoft Virtual Server 2005 R2 Standard Edition, Microsoft Virtual Server 2005 R2 Enterprise Edition

  • kbtshoot kbenv kbdeployment kbprb KB918461
Feedback