L’heure du système s’exécute trop rapidement sur un ordinateur virtuel basé sur Linux qui tourne dans Virtual Server 2005 R2

Symptômes

Après l’installation d’une machine virtuelle Linux dans Microsoft Virtual Server 2005 R2, l’heure du système dans le système d’exploitation invité Linux s’exécute trop rapidement. Par exemple, l’heure actuelle dans le système d’exploitation invité Linux peut passer en une minute environ toutes les 48 secondes. Après un certain temps, la machine virtuelle Linux réinitialise l’horloge sur l’heure correcte.

Vous rencontrez ce problème si vous exécutez une distribution Linux qui utilise le noyau Linux 2.6.

Cause

Ce problème se produit car l’algorithme par défaut dans le noyau Linux 2.6 ajuste la perte possible de graduations de la minuterie. En raison de cet ajustement, l’ordinateur virtuel peuvent acquérir des temps.

Résolution

Pour résoudre ce problème, ajoutez le horloge = pit paramètre dans le fichier de chargeur de démarrage de Linux. Le horloge = pit paramètre entraîne le noyau Linux 2.6 à utiliser un algorithme plus efficace pour synchroniser l’heure entre la machine virtuelle et l’ordinateur hôte. Cet algorithme n’ajuste pas de graduations perdues. Par conséquent, l’algorithme n’entraîne pas la machine virtuelle pour gagner du temps. Pour ajouter ce paramètre, procédez comme suit.

Pour le chargeur de démarrage GRUB

  1. Dans le système d’exploitation invité, ouvrez le fichier /boot/grub/menu.lst à l’aide d’un éditeur de texte tel que Vi. Par exemple, tapez la commande suivante à partir d’une console et appuyez sur ENTRÉE :
    VI /boot/grub/menu.lst
    Ce fichier contient les options de démarrage Linux et semblable au suivant :
    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. Dans la zone titre Linux de ce fichier, ajoutez la horloge = pit paramètre à l’écriture du noyau. Cette zone doit ressembler à ceci :
    title Linux   kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791 clock=pit
    initrd (hd0,4)/initrd
  3. Enregistrer les modifications dans le fichier et quittez Vi puis redémarrez la machine virtuelle Linux.

Pour le chargeur de démarrage LILO

  1. Dans le système d’exploitation invité, ouvrez le fichier /etc/lilo.conf à l’aide d’un éditeur de texte tel que Vi. Par exemple, tapez la commande suivante à partir d’une console et appuyez sur ENTRÉE :
    VI /etc/lilo.conf
    Ce fichier contient les options de démarrage Linux et semblable au suivant :
    ### 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. Dans la ### LILO Linux section (par défaut) zone de ce type de fichier, tapez l’entrée suivante :
    Append = « horloge = pit »
    Cette zone doit ressembler à ceci :
    ### LILO Linux section (default)   image  = /boot/vmlinuz     # Default 
    label = linux
    root = /dev/hda7 # Root partition for the kernel
    initrd = /boot/initrd
    Append = "clock=pit"
  3. Enregistrer les modifications dans le fichier et quittez Vi.
  4. Exécutez la commande lilo . Par exemple, tapez la commande suivante et appuyez sur ENTRÉE :
    /sbin/lilo
  5. Redémarrez la machine virtuelle Linux.

Plus d'informations

Généralement, un ordinateur virtuel a des difficultés à synchroniser l’heure avec l’ordinateur hôte physique. Bien que Microsoft Virtual Server 2005 Virtual Machine Additions sont destinés à aider à corriger ce problème, vous pouvez rencontrer des problèmes de synchronisation de temps en raison de la façon dont le système d’exploitation invité effectue le suivi de l’heure du système. Tous les types de système d’exploitation a sa propre méthode pour effectuer le suivi de l’heure du système. Le noyau Linux 2.6 utilise trois différents types d’algorithmes pour effectuer le suivi de l’heure du système. Ces algorithmes sont plus efficaces que les algorithmes qui sont utilisés par le noyau Linux 2.4 et des noyaux Linux antérieures.

Synchronisation de l’heure dans une machine virtuelle

Un système d’exploitation suit généralement le temps à l’aide des interruptions périodiques qui sont générées par un périphérique matériel spécifique. En règle générale, un système d’exploitation Obtient l’heure à partir d’une horloge gratuit métal oxyde semi-conducteur (CMOS) avec batterie de secours au cours de la procédure de démarrage du système d’exploitation. Le système d’exploitation configure ensuite un périphérique timer pour générer des interruptions périodiques. Le système d’exploitation enregistre de temps en comptant ces interruptions.

Pour une machine virtuelle, le matériel physique réel est partagé par le système d’exploitation hôte et par le système d’exploitation invité. Lorsqu’une machine virtuelle génère une interruption de temps, le système d’exploitation invité peut être en cours d’exécution ou ne peut pas être exécuté. Par conséquent, le système d’exploitation invité ne prend pas immédiatement compte certaines de ces interruptions. Pour contourner ce problème, l’ordinateur virtuel conserve un retard de ces interruptions. En outre, la machine virtuelle augmente la fréquence des interruptions de minuterie lorsqu’il est exécuté. L’augmentation de la fréquence des interruptions de la minuterie est destinée à préserver le système d’exploitation invité l’heure correcte. Toutefois, l’augmentation de la fréquence de ces interruptions peut provoquer le système d’exploitation invité de manquer certaines de ces interruptions. Ces interruptions manquées sont appelées « battements perdues ». Perdu graduations cause l’heure du système d’exploitation invité à retard de l’heure réelle. Bien que vous pouvez rencontrer ce problème sur un ordinateur physique, vous êtes plus susceptible de rencontrer ce problème dans un système d’exploitation invité qui s’exécute sur une machine virtuelle.

Le noyau Linux 2.4 et des noyaux Linux antérieures s’appuient sur les interruptions de la minuterie qui sont fournies par la minuterie. Les algorithmes sont implémentés pour la synchronisation de l’heure dans le noyau Linux 2.4 ne tiennent pas compte des graduations perdues. Ce comportement peut provoquer l’invité Linux durée de système de fonctionnement à souffrir de l’horloge réelle. Pour résoudre ce problème, certaines distributions Linux correctif du noyau Linux 2.4 afin de fournir des interruptions de la minuterie à une vitesse plus rapide. Cependant, le Linux de système d’exploitation invité pourrait rencontrez toujours des problèmes de synchronisation en raison des perdu des graduations.

Le noyau Linux 2.6 implémente des algorithmes plus efficaces pour résoudre ce problème lors de la synchronisation. Contrairement aux algorithmes Linux 2.4, les algorithmes de Linux 2.6 ajustement pour les graduations perdues. Toutefois, cet ajustement peut provoquer la machine virtuelle Linux gagner du temps. Le noyau Linux 2.6 a trois paramètres d’horloge différents qui peuvent être passés dans le noyau au moment du démarrage. Utilisez ces paramètres pour sélectionner les algorithmes à utiliser pour la synchronisation de l’heure. Pour plus d’informations sur ces algorithmes, reportez-vous à la section « Synchronisation d’horloge de Linux ». Chacun de ces algorithmes d’horlogerie a des avantages et des inconvénients. Toutefois, vous ne risquez davantage d’observer des inconvénients sur une machine virtuelle que sur un ordinateur physique.

Matériel de minuteur

Chaque système d’exploitation a sa propre méthode pour gérer les problèmes de synchronisation d’horloge. Il existe différents types de mécanismes de minuteur qui sont utilisés pour conserver l’heure sur un ordinateur. Ces mécanismes de minuterie sont les suivants :
  • Minuterie programmable (PIT)
  • Horloge temps réel CMOS (RTC)
  • Local Advanced Programmable Interrupt contrôleur (APIC) temporisations
  • Configuration avancée et Power Interface (ACPI) (ce mécanisme est également appelé une minuterie Chipset).
  • Compteur d’horodatage (TSC)
  • Compteur d’événement de précision élevée (HPET)

Synchronisation d’horloge sous Linux

Sur une plate-forme x86, le noyau Linux 2.6 interagit avec les types d’horloges pour effectuer le suivi des temps suivants :
  • Horloge de gestion de puissance (PMTMR)
    Cette horloge présente les caractéristiques suivantes :
    • Cette horloge est définie en utilisant la horloge = pmtmr paramètre de noyau.
    • Cette horloge utilise le compteur ACPI.
    • Cette horloge peut entraîner des gains de temps plus petites.
  • Compteur d’horodatage (TSC)
    Cette horloge présente les caractéristiques suivantes :
    • Cette horloge est définie en utilisant la horloge = tsc paramètre de noyau. (C’est le paramètre par défaut.)
    • Cette horloge utilise le compteur PIT et le TSC pour l’interpolation de temps.
    • Cette horloge peut provoquer des overcorrection dans un environnement de machine virtuelle. Par conséquent, l’horloge du système d’exploitation invité peut exécuter trop rapidement.
    • Cette horloge peut entraîner des gains de temps jusqu'à 10 pour cent.
  • Minuterie programmable (PIT)
    Cette horloge présente les caractéristiques suivantes :
    • Cette horloge est définie en utilisant la horloge = pit paramètre de noyau.
    • Cette horloge utilise uniquement le compteur PIT pour l’interpolation de temps.
    • Cette horloge utilise la plus simple des algorithmes disponibles.
    • Cette horloge ne peut pas accéder de temps car il n’utilise pas de code de correction des graduations perdues.
Pour plus d’informations sur Virtual Server 2005, visitez le site Web de Microsoft à l’adresse suivante :Les produits tiers dont traite cet article sont fabriqués par des sociétés indépendantes de Microsoft. Microsoft ne fait aucune garantie, implicite ou autre, concernant les performances ou la fiabilité de ces produits.

Propriétés

ID d'article : 918461 - Dernière mise à jour : 17 janv. 2017 - Révision : 1

Commentaires