La hora del sistema se ejecuta demasiado rápido en una máquina virtual basada en Linux que se hospeda en Virtual Server 2005 R2

Síntomas

Después de instalar una máquina virtual basada en Linux en Microsoft Virtual Server 2005 R2, la hora del sistema en el sistema operativo de invitado de Linux se ejecuta demasiado rápido. Por ejemplo, la hora actual del sistema operativo de invitado de Linux puede avanzar un minuto aproximadamente cada 48 segundos. Después de algún tiempo, el equipo virtual basado en Linux, restablece el reloj a la hora correcta.

Experimenta este problema si está ejecutando una distribución de Linux que utiliza el kernel de Linux 2.6.

Causa

Este comportamiento se produce porque el algoritmo predeterminado en el kernel de Linux 2.6 se ajusta para la posible pérdida de pasos de temporizador. Debido a este ajuste, la máquina virtual pueden llegar a tiempo.

Solución

Para resolver este problema, agregue el reloj = pit parámetro para el archivo de cargador de arranque de Linux. El reloj = pit parámetro hace que el kernel de Linux 2.6 utilizar un algoritmo más eficaz para sincronizar la hora entre la máquina virtual y el equipo host. Este algoritmo no se ajusta para pasos perdidos. Por lo tanto, el algoritmo no hace que la máquina virtual para ganar tiempo. Para agregar este parámetro, siga estos pasos.

Para el cargador de arranque GRUB

  1. En el sistema operativo invitado, abra el archivo /boot/grub/menu.lst utilizando un editor de texto como Vi. Por ejemplo, escriba el siguiente comando desde una consola y, a continuación, presione ENTRAR:
    VI /boot/grub/menu.lst
    Este archivo contiene las opciones de inicio de Linux y similar al siguiente:
    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. En el área de título Linux de este archivo, agregue el reloj = pit parámetro para la entrada del núcleo. Esta área debería parecerse al siguiente:
    title Linux   kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791 clock=pit
    initrd (hd0,4)/initrd
  3. Guardar los cambios en el archivo, salir Vi y, a continuación, reinicie el equipo virtual basado en Linux.

Para el cargador de arranque LILO

  1. En el sistema operativo invitado, abra el archivo /etc/lilo.conf mediante un editor de texto como Vi. Por ejemplo, escriba el siguiente comando desde una consola y, a continuación, presione ENTRAR:
    VI /etc/lilo.conf
    Este archivo contiene las opciones de inicio de Linux y similar al siguiente:
    ### 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. En el ### LILO Linux sección (predeterminado) área de este archivo, escriba la entrada siguiente:
    Append = "reloj = pit"
    Esta área debería parecerse al siguiente:
    ### 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. Guardar los cambios en el archivo y salga de Vi.
  4. Ejecute el comando lilo . Por ejemplo, escriba el comando siguiente y, a continuación, presione ENTRAR:
    /sbin/lilo
  5. Reinicie el equipo virtual basado en Linux.

Más información

Generalmente, una máquina virtual tiene dificultades para sincronizar su hora con el equipo host físico. Aunque Microsoft Virtual Server 2005 Virtual Machine Additions está diseñado para ayudarle a corregir este problema, puede experimentar problemas de sincronización de tiempo debido a la forma en que el sistema operativo invitado realiza un seguimiento de la hora del sistema. Cada tipo de sistema operativo tiene su propia manera de hacer un seguimiento de la hora del sistema. El kernel de Linux 2.6 utiliza tres tipos diferentes de algoritmos para realizar un seguimiento de la hora del sistema. Estos algoritmos son más eficaces que los algoritmos que se utilizan por el kernel de Linux 2.4 y anteriores kernels de Linux.

Sincronización de hora en una máquina virtual

Un sistema operativo generalmente realiza el seguimiento de tiempo mediante el uso de las interrupciones de tiempo periódico que se generan mediante un dispositivo de hardware específico. Por lo general, un sistema operativo obtiene la hora de un reloj de cortesía Metal Oxide Semiconductor (CMOS) con respaldo de batería durante el procedimiento de inicio del sistema operativo. El sistema operativo, a continuación, se configura un dispositivo temporizador para generar interrupciones periódicas. El sistema operativo mantiene un seguimiento del tiempo contando estas interrupciones.

Para una máquina virtual, el hardware físico real es compartido por el sistema operativo host y por el sistema operativo invitado. Cuando una máquina virtual genera una interrupción del tiempo, el sistema operativo invitado puede estar ejecutándose o no esté ejecutándose. Por lo tanto, el sistema operativo invitado no cuenta inmediatamente para algunas de estas interrupciones. Para evitar este problema, la máquina virtual mantiene un registro de estas interrupciones. Además, la máquina virtual aumenta la frecuencia de las interrupciones de temporizador cuando se está ejecutando. La mayor frecuencia de interrupciones de temporizador está pensada para ayudar a que el sistema operativo invitado mantener la hora correcta. Sin embargo, la mayor frecuencia de estas interrupciones podría provocar el sistema operativo invitado se pierda algunas de las interrupciones. Estas interrupciones perdidas se conocen como "pasos perdidos". Perdió garrapatas causa la hora del sistema operativo invitado se retrase en tiempo real. Aunque puede experimentar este problema en un equipo físico, es más probable que experimente este problema en un sistema operativo invitado que se ejecuta en una máquina virtual.

El kernel de Linux 2.4 y anteriores kernels de Linux se basan en las interrupciones de temporizador que se entregan por el temporizador. Pasos perdidos no cuenta los algoritmos que se implementan para la sincronización de hora en el kernel de Linux 2.4. Este comportamiento puede hacer que el invitado de Linux sistema tiempo de funcionamiento se retrase el reloj real. Para resolver este problema, algunas distribuciones Linux parche el kernel de Linux 2.4 para entregar las interrupciones de temporizador a mayor velocidad. Sin embargo, el sistema operativo invitado todavía podría experimentar problemas de sincronización porque el tiempo de Linux perdido tics.

El kernel de Linux 2.6 implementa los algoritmos más eficientes para resolver este problema de sincronización de tiempo. A diferencia de los algoritmos de Linux 2.4, los algoritmos de Linux 2.6 ajustan para pasos perdidos. Sin embargo, este ajuste puede provocar la máquina virtual basada en Linux ganar tiempo. El kernel de Linux 2.6 tiene tres parámetros de reloj diferentes que pueden pasarse al núcleo durante el arranque. Utilice estos parámetros para seleccionar los algoritmos que se utilizan para la sincronización de hora. Para obtener más información acerca de estos algoritmos, consulte la sección "Sincronización de hora en Linux". Cada uno de estos algoritmos de hora normal tiene ventajas e inconvenientes. Sin embargo, es más probable que observe inconvenientes en una máquina virtual que en un equipo físico.

Hardware de temporizador de equipo

Cada sistema operativo tiene su propio método para tratar problemas de sincronización de hora. Hay varias clases de mecanismos de temporizador que se utilizan para mantener el tiempo en un equipo. Estos mecanismos de temporizador son las siguientes:
  • Temporizador de intervalos programable (PIT)
  • Reloj de tiempo Real (RTC) de CMOS
  • Local avanzado de interrupción programable (APIC) del controlador temporizadores
  • Avanzada de configuración y Power Interface (ACPI) (este mecanismo es también conocida como un temporizador de Chipset.)
  • Contador de marca de tiempo (TSC)
  • Temporizador de sucesos de precisión alta (HPET)

Hora normal en Linux

En una plataforma basada en x86, el kernel de Linux 2.6 interactúa con los siguientes tipos de relojes para realizar un seguimiento de tiempo:
  • Temporizador de administración de energía (PMTMR)
    Este reloj tiene las siguientes características:
    • Este reloj está configurado utilizando el reloj = pmtmr parámetro de kernel.
    • Este reloj utiliza el temporizador ACPI.
    • Este reloj puede causar aumentos de tiempo menor.
  • Contador de marca de tiempo (TSC)
    Este reloj tiene las siguientes características:
    • Este reloj está configurado utilizando el reloj = tsc parámetro de kernel. (Es el parámetro predeterminado).
    • Este reloj utiliza el contador PIT y el TSC para interpolación de tiempo.
    • Este reloj puede provocar overcorrection en un entorno de máquina virtual. Por lo tanto, el reloj del sistema operativo invitado puede ejecutar demasiado rápido.
    • Este reloj puede causar aumentos de tiempo de hasta un 10 por ciento.
  • Temporizador de intervalos programable (PIT)
    Este reloj tiene las siguientes características:
    • Este reloj está configurado utilizando el reloj = pit parámetro de kernel.
    • Este reloj utiliza sólo el contador PIT para interpolación de tiempo.
    • Este reloj utiliza el más simple de los algoritmos disponibles.
    • Este reloj no ganar tiempo porque no utiliza el código de corrección de graduación perdido.
Para obtener más información acerca de Virtual Server 2005, visite el siguiente sitio Web de Microsoft:Los productos de terceros que se indican en este artículo están fabricados por compañías independientes de Microsoft. Microsoft no otorga ninguna garantía, implícita o de otro tipo, respecto al rendimiento o la confiabilidad de estos productos.

Propiedades

Id. de artículo: 918461 - Última revisión: 14 ene. 2017 - Revisión: 1

Comentarios