L'ora di sistema viene eseguito troppo velocemente su una macchina virtuale basato su Linux che è ospitata in Virtual Server 2005 R2

Sintomi

Dopo aver installato una macchina virtuale basato su Linux in Microsoft Virtual Server 2005 R2, l'ora di sistema nel sistema operativo guest Linux viene eseguito troppo velocemente. Ad esempio, l'ora corrente nel sistema operativo guest Linux può far avanzare un minuto ogni 48 secondi circa. In un secondo momento, la macchina virtuale basato su Linux Reimposta l'orologio sull'ora corretta.

Questo problema si verifica se si esegue una distribuzione Linux che utilizza il kernel 2.6 Linux.

Causa

Questo comportamento si verifica perché l'algoritmo predefinito nel kernel 2.6 Linux regola per la possibile perdita di segni di graduazione. A causa di questa modifica, la macchina virtuale può ottenere l'ora.

Risoluzione

Per risolvere questo problema, aggiungere il orologio = fossa parametro per il file del caricatore di avvio di Linux. Il orologio = fossa parametro fa sì che il kernel 2.6 Linux utilizzare un algoritmo più efficiente per la sincronizzazione dell'ora tra la macchina virtuale e il computer host. Questo algoritmo non regolare di segni di graduazione perse. Di conseguenza, l'algoritmo non causa la macchina virtuale ottenere l'ora. Per aggiungere questo parametro, attenersi alla seguente procedura.

Per il caricatore di avvio GRUB

  1. Nel sistema operativo guest, aprire il file /boot/grub/menu.lst utilizzando un editor di testo come Vi. Ad esempio, digitare il seguente comando da una console e quindi premere INVIO:
    vi /boot/grub/menu.lst
    Questo file contiene le opzioni di avvio di Linux e analogo al seguente:
    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. Nell'area del titolo Linux di questo file, aggiungere il orologio = fossa parametro per la voce del kernel. Quest ' area sarà simile al seguente:
    title Linux   kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791 clock=pit
    initrd (hd0,4)/initrd
  3. Salvare le modifiche al file, Vi uscire e riavviare la macchina virtuale basato su Linux.

Per il caricatore di avvio LILO

  1. Nel sistema operativo guest, aprire il file /etc/lilo.conf utilizzando un editor di testo come Vi. Ad esempio, digitare il seguente comando da una console e quindi premere INVIO:
    vi /etc/lilo.conf
    Questo file contiene le opzioni di avvio di Linux e analogo al seguente:
    ### 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. Nella # # # sezione LILO Linux (predefinita) area di questo file, digitare la seguente voce:
    Append = "orologio = fossa"
    Quest ' area sarà simile al seguente:
    ### 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. Salvare le modifiche apportate al file e quindi uscire da Vi.
  4. Eseguire il comando lilo . Ad esempio, digitare il comando seguente e premere INVIO:
    /sbin/lilo
  5. Riavviare la macchina virtuale basato su Linux.

Ulteriori informazioni

In genere, una macchina virtuale ha difficoltà a sincronizzare l'ora con il computer host fisico. Sebbene Microsoft Virtual Server 2005 Virtual Machine Additions sono utili per risolvere il problema, che si verifichino problemi di sincronizzazione dell'ora a causa del modo in cui il sistema operativo guest di registrare l'ora di sistema. Ogni tipo di sistema operativo ha il proprio modo di tenere traccia dell'ora di sistema. Il kernel 2.6 Linux utilizza tre diversi tipi di algoritmi di tenere traccia dell'ora di sistema. Questi algoritmi sono più efficienti gli algoritmi utilizzati per il kernel Linux 2.4 e per i kernel Linux precedenti.

Sincronizzazione dell'ora in una macchina virtuale

Un sistema operativo in genere registra ora tramite gli interrupt generati da uno specifico dispositivo hardware tempo periodico. In genere, un sistema operativo consente di ottenere l'ora da un clock gratuito Metal Oxide semiconduttori (CMOS) batteria durante la procedura di avvio del sistema operativo. Quindi il sistema operativo consente di configurare un dispositivo timer per generare interrupt periodico. Il sistema operativo tiene traccia dell'ora contando questi interrupt.

Per una macchina virtuale, l'hardware fisico effettivo è condiviso dal sistema operativo host e dal sistema operativo guest. Quando una macchina virtuale viene generato un interrupt di tempo, il sistema operativo guest potrebbe essere in esecuzione o non è in esecuzione. Di conseguenza, il sistema operativo guest non immediatamente conto di alcuni di questi interrupt. Per risolvere questo problema, la macchina virtuale mantiene un backlog di tali interrupt. Inoltre, la macchina virtuale aumenta la frequenza del timer interrupt quando è in esecuzione. La maggiore frequenza del timer interrupt deve mantenere il sistema operativo guest l'ora corretta. Tuttavia, la maggiore frequenza di tali interrupt potrebbe causare il sistema operativo guest di perdita di alcuni gli interrupt. Tali interrupt sono noti come "perse eventi Tick". Perso causa l'ora del sistema operativo guest di segni di graduazione a rimanere indietro il tempo effettivo. Sebbene si verifichi questo problema in un computer fisico, si è più probabile riscontrare questo problema in un sistema operativo guest in esecuzione su una macchina virtuale.

Il kernel Linux 2.4 e precedenti kernel Linux si basano sugli interrupt di timer che vengono consegnati dal timer. Gli algoritmi implementati per la sincronizzazione del kernel Linux 2.4 non tiene conto di segni di graduazione perse. Questo comportamento può causare il guest Linux ora del sistema operativo rimanere indietro l'orologio effettivo. Per risolvere questo problema, alcune distribuzioni Linux patch del kernel Linux 2.4 per gli interrupt di timer di offrire una maggiore velocità. Tuttavia, di Linux, sistema operativo guest possono ancora verificarsi problemi di sincronizzazione di perdita di segni di graduazione.

Il kernel 2.6 Linux implementa gli algoritmi più efficienti per risolvere il problema di sincronizzazione di tempo. A differenza di algoritmi di Linux 2.4, gli algoritmi di 2.6 Linux regolare di segni di graduazione perse. Tuttavia, questa regolazione può causare la macchina virtuale basato su Linux ottenere l'ora. Il kernel 2.6 Linux dispone di tre parametri di orologio diverso che possono essere passati al kernel in fase di avvio. Utilizzare questi parametri per selezionare gli algoritmi da utilizzare per la sincronizzazione dell'ora. Per ulteriori informazioni su questi algoritmi, vedere la sezione "Misurazione del tempo in Linux". Ognuno di questi algoritmi di misurazione del tempo presenta vantaggi e svantaggi. Tuttavia, si è più probabile notare gli svantaggi in una macchina virtuale rispetto a un computer fisico.

Hardware del computer timer

Ogni sistema operativo ha un proprio metodo per gestire i problemi di misurazione del tempo. Esistono vari tipi di meccanismi di timer che vengono utilizzate per mantenere l'ora in un computer. Questi meccanismi di timer di seguito:
  • Timer intervallo programmabile (FOSSA)
  • Orologio CMOS a tempo reale (RTC)
  • Locale Advanced Programmable Interrupt Controller (APIC) timer
  • Power Interface (ACPI) (questo meccanismo è noto anche come un Chipset Timer.) e configurazione avanzata
  • Timestamp contatore TSC)
  • Timer di precisione eventi (HPET)

Misurazione del tempo in Linux

Su una piattaforma basata su x86, il kernel 2.6 Linux interagisce con i seguenti tipi di orologi per tenere traccia del tempo:
  • Timer del risparmio energia (PMTMR)
    Questo orologio presenta le seguenti caratteristiche:
    • Questo orologio viene impostato utilizzando il orologio = pmtmr parametro kernel.
    • Questo orologio utilizza il timer ACPI.
    • Questo orologio può causare più piccoli guadagni di tempo.
  • Timestamp contatore TSC)
    Questo orologio presenta le seguenti caratteristiche:
    • Questo orologio viene impostato utilizzando il orologio tsc = parametro kernel. (Questo è il parametro predefinito).
    • Questo orologio utilizza il contatore di monitoraggio delle vetture e il contatore TSC per l'interpolazione di tempo.
    • Questo clock potrebbe overcorrection in un ambiente di macchina virtuale. Di conseguenza, l'orologio di sistema operativo guest venga eseguito troppo velocemente.
    • Questo clock potrebbe guadagni di tempo del 10%.
  • Timer intervallo programmabile (FOSSA)
    Questo orologio presenta le seguenti caratteristiche:
    • Questo orologio viene impostato utilizzando il orologio = fossa parametro kernel.
    • Questo orologio utilizza solo il contatore di monitoraggio delle vetture per l'interpolazione di tempo.
    • Questo orologio utilizza il più semplice degli algoritmi disponibili.
    • Questo clock non ottenere il tempo perché utilizza il codice di correzione di perdita dei segni di graduazione.
Per ulteriori informazioni su Virtual Server 2005, visitare il seguente sito Web Microsoft:I prodotti di terze parti descritti in questo articolo sono forniti da società indipendenti da Microsoft. Microsoft esclude ogni garanzia, implicita o esplicita, relativamente alle prestazioni o all'affidabilità di questi prodotti.

Proprietà

ID articolo: 918461 - Ultima revisione: 31 gen 2017 - Revisione: 1

Feedback