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

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 918461 - Produkte anzeigen, auf die sich dieser Artikel bezieht
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
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.
Alles erweitern | Alles schließen

Auf dieser Seite

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)/initrd
    title windows
       root (hd0,0)
       makeactive
       chainloader +1
    title floppy
       root (fd0)
       chainloader +1
    title 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:
http://www.microsoft.com/windowsserversystem/virtualserver/default.mspx
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.

Eigenschaften

Artikel-ID: 918461 - Geändert am: Donnerstag, 4. Mai 2006 - Version: 1.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Virtual Server 2005 R2 Standard Edition
  • Microsoft Virtual Server 2005 R2 Enterprise Edition
Keywords: 
kbtshoot kbenv kbdeployment kbprb KB918461
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com