系统时间运行基于 Linux 的 Virtual Server 2005 R2 中承载的虚拟机上的速度太快

文章翻译 文章翻译
文章编号: 918461 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

症状

Microsoft Virtual Server 2005 R2 中安装基于 Linux 的虚拟机后,Linux 在来宾操作系统中的系统时间会运行速度太快。例如,通过一分钟大约每隔 48 秒点可能晋升 Linux 在来宾操作系统中的当前时间。稍后,基于 Linux 的虚拟机将时钟为正确的时间重置。

如果您正在使用 Linux 2.6 内核 Linux 分发,则会遇到此问题。

原因

因为 Linux 2.6 内核中的默认算法将调整的计时器计时周期可能中断,将发生此问题。由于这种调整,虚拟机可能获得时间。

解决方案

若要解决此问题,请添加时钟 = pit到 Linux 启动程序文件的参数。时钟 = pit参数,会导致 Linux 2.6 内核使用更有效的算法将虚拟机和主机之间的时间同步。此算法不会丢失的计时周期的调整。因此,该算法不会导致虚拟机以获取时间。若要添加此参数,请执行以下步骤。

有关 GRUB 引导加载程序

  1. 在来宾操作系统中,使用文本编辑器 (如 Vi 打开 /boot/grub/menu.lst 文件。例如,键入下面的命令从一个控制台,,然后按 enter 键:
    vi /boot/grub/menu.lst
    此文件包含 Linux 引导选项,类似如下内容:
    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. 在该文件的Linux 标题区域中,添加时钟 = pit参数与内核项。该区域应如下所示:
    title Linux
       kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791 clock=pit
       initrd (hd0,4)/initrd
  3. 保存对文件所做的更改,退出 Vi,然后重新启动基于 Linux 的虚拟机。

对于 LILO 启动程序

  1. 在来宾操作系统中,使用文本编辑器 (如 Vi 打开 /etc/lilo.conf 文件。例如,键入下面的命令从一个控制台,,然后按 enter 键:
    vi /etc/lilo.conf
    此文件包含 Linux 引导选项,类似如下内容:
    ### 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. # # # LILO Linux 节 (默认)区域的此文件,请键入下面的项:
    追加 ="时钟 = 维修站"
    该区域应如下所示:
    ### 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. 将更改保存到文件,然后退出 Vi。
  4. 运行lilo的命令。例如,键入下面的命令,然后按 enter 键:
    / sbin/lilo
  5. 重新启动基于 Linux 的虚拟机。

更多信息

虚拟机通常都有与物理主机计算机同步其时间的困难。虽然 Microsoft 虚拟 2005年虚拟机添加服务器来帮助解决这一问题,您可能会遇到时间同步问题跟踪的来宾操作系统的系统时间的方式。操作系统的每一种都有其自己的方式来跟踪的系统时间。Linux 2.6 内核使用三种不同的算法来跟踪的系统时间。这些算法都 Linux 2.4 内核和早期的 Linux 内核使用的算法比效率更高。

在虚拟机中的时间同步

通常,操作系统通过定期时间中断生成的特定硬件设备跟踪时间。通常情况下,操作系统获得时间备有电池的互补金属氧化物半导体 (CMOS) 时钟从操作系统的启动过程中。然后,操作系统配置生成周期性间隔计时器设备。操作系统跟踪的时间的方法是计算这些中断。

为虚拟机,由主机操作系统和来宾操作系统共享的实际物理硬件。当一个虚拟机生成时间中断时,来宾操作系统可能正在运行,或可能未在运行。因此,来宾操作系统不立即考虑某些这些中断。要变通解决此问题,该虚拟机保留这些中断的积压。此外,虚拟机在运行时增加计时器中断的频率。计时器中断的频率增加旨在帮助来宾操作系统维护的正确时间。但是,这些中断的频率增加可能会导致错过一些中断的来宾操作系统。这些丢失的中断被称为"丢失的滴答"。丢失原因的访客操作系统时间刻度要滞后于实际的时间。虽然您可能会遇到此问题,在一台物理计算机上的,您将很可能会遇到此问题在来宾操作系统的虚拟机上运行。

Linux 2.4 内核和早期的 Linux 内核依赖由计时器计时器中断。丢失的刻度不考虑实施了 Linux 2.4 内核中的时间同步的算法。此行为可能导致 Linux 来宾操作系统的系统时间要滞后于实际的时钟。为了解决此问题,有些 Linux 发布修补程序要快的速度提供计时器中断的 Linux 2.4 内核。但是,来宾操作系统可能仍会遇到的时间同步问题由于 Linux 丢失计时周期。

Linux 2.6 内核实现更有效的算法来解决此时间同步问题。不同的 Linux 2.4 算法,Linux 2.6 算法调整丢失的刻度数。但是,这种调整可能会导致基于 Linux 的虚拟机,以获得时间。Linux 2.6 内核有三个不同的时钟参数可以传递给内核启动时。使用这些参数来选择要用于时间同步的算法。有关这些算法的详细信息,请参阅"Linux 计时"一节。每种计时算法都有优点和缺点。不过,您也更容易注意到比在物理计算机上的虚拟机上的缺点。

计算机计时器硬件

每个操作系统都有它自己的方法来处理计时问题。有各种类型的计时器机制,用于在计算机上保留的时间。这些计时器机制如下所示:
  • 可编程的间隔计时器 (PIT)
  • CMOS 实时时钟 (RTC)
  • 本地高级可编程中断控制器 (APIC) 计时器
  • 高级配置和电源接口 (ACPI) (这种机制是也称为芯片组计时器。
  • 时间戳计数器 (TSC)
  • 高精度事件计时器 (HPET)

在 Linux 中的计时

在基于 x86 的平台上,Linux 2.6 内核与以下类型的时钟来跟踪时间进行交互:
  • 电源管理计时器 (PMTMR)
    此时钟具有以下特征:
    • 此时钟通过设置 时钟 = pmtmr 内核参数。
    • 此时钟使用 ACPI 计时器。
    • 此时钟可能导致更小的时间提高。
  • 时间戳计数器 (TSC)
    此时钟具有以下特征:
    • 此时钟通过设置 时钟 = tsc 内核参数。(这是默认参数)。
    • 此时钟使用时间插值的 PIT 计数器和 TSC。
    • 在虚拟机环境中,此时钟可能导致 overcorrection。因此,来宾操作系统的系统时钟可能运行速度太快。
    • 此时钟可能会导致时间达 10%的收益。
  • 可编程的间隔计时器 (PIT)
    此时钟具有以下特征:
    • 此时钟通过设置 时钟 = 维修站 内核参数。
    • 此时钟的时间内插使用仅 PIT 计数器。
    • 此时钟使用最简单的可用的算法。
    • 此时钟不能时间,因为它不使用丢失的刻度线纠正代码。
Virtual Server 2005 的更多信息,请访问下面的 Microsoft 网站:
http://www.microsoft.com/windowsserversystem/virtualserver/default.mspx
本文讨论的第三方产品是由与 Microsoft 无关的公司生产的。Microsoft 对这些产品的性能或可靠性不做任何暗示或其他形式的保证。

属性

文章编号: 918461 - 最后修改: 2013年9月29日 - 修订: 2.0
这篇文章中的信息适用于:
  • Microsoft Virtual Server 2005 R2 Standard Edition
  • Microsoft Virtual Server 2005 R2 Enterprise Edition
关键字:?
kbtshoot kbenv kbdeployment kbprb kbmt KB918461 KbMtzh
机器翻译
重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。
点击这里察看该文章的英文版: 918461
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

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