第 11 章 KVM 客户端计时管理

KVM 使用很多先进 CPU 的恒定时间戳计数器(TSC)特性。一些没有恒定时间戳计数器的 CPU 会影响 KVM 中运行的客户端计时。无法准确计时的客户端可能会严重影响一些联网应用程序,因为您的客户端可能会比实际时间运行得快或者慢。

不准确的时钟和计数器为客户端带来的一些问题:

  • 时钟可能会无法与实际时间同步,这将导致会话无效并影响到网络。

  • 时钟慢一些的客户端迁移时会出现问题。

  • 客户端可能会停止或者崩溃。

这些问题在其它虚拟化平台中也存在,因此应经常测试计时。

NTP

应该在主机和客户端中运行网络时间协议(NTP)守护进程。请启用 ntpd 服务:

  1. # service ntpd start

请在默认启动序列中添加 ntpd 服务:

  1. # chkconfig ntpd on

使用 ntpd 服务应该可以在各种情况下最小化时钟偏移造成的影响。

确定您的 CPU 是否有恒定时间戳计数器

如果显示 constant_tsc 标签,那么您的 CPU 就有恒定时间戳计数器。要确定您的 CPU 是否有 constant_tsc 标签,请运行以下命令:

  1. $ cat /proc/cpuinfo | grep constant_tsc

如果有输出结果,说明您的 CPU 有 constant_tsc 字节。如果没有输出结果,请按以下步骤执行。

配置没有恒定时间戳计数器的主机

没有恒定时间戳计数器的系统需要进行额外配置。电源管理特性可影响准确计时,且必须在客户端中禁用以便使用 KVM 准确计时。

Note

这些说明仅用于 AMD 修订 F cpu。

If the CPU lacks the constant_tsc bit, disable all power management features (BZ#513138). Each system has several timers it uses to keep time. The TSC is not stable on the host, which is sometimes caused by cpufreq changes, deep C state, or migration to a host with a faster TSC. To stop deep C states, which cam stop the TSC, add “processor.max_cstate=1“ to the kernel boot options in grub on the host:

  1. term Fedora (vmlinuz-2.6.29.6-217.2.3.fc11)
  2. root (hd0,0)
  3. kernel /vmlinuz-vmlinuz-2.6.29.6-217.2.3.fc11 ro root=/dev/VolGroup00/LogVol00 rhgb quiet processor.max_cstate=1

要禁用 cpufreq(只在没有 cpufreq 的主机中需要),请编辑 /etc/sysconfig/cpuspeed 配置文件并将 MIN_SPEEDMAX_SPEED 变量改为可用的最高频率。有效上限请查看 /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_frequencies 文件。

在红帽企业版 Linux 客户端中使用半虚拟时钟

某些红帽企业版 Linux 客户端需要附加内核参数。这些参数的设置可通过在客户端 /boot/grub/grub.conf 文件的 /kernel 行结尾添加它们完成。

下表列出了红帽企业版 Linux 版本以及没有恒定时间戳计数器客户端所需要的参数。

红帽企业版 Linux附加客户端内核参数
使用半虚拟时钟的 5.4 AMD64/Intel 64不需要附加参数
没有半虚拟时钟的 5.4 AMD64/Intel 64divider=10 notsc lpj=n
使用半虚拟时钟的 5.4 x86不需要附加参数
没有半虚拟时钟的 5.4 x86divider=10 clocksource=acpi_pm lpj=n
5.3 AMD64/Intel 64divider=10 notsc
5.3 x86divider=10 clocksource=acpi_pm
4.8 AMD64/Intel 64notsc divider=10
4.8 x86clock=pmtmr divider=10
3.9 AMD64/Intel 64不需要附加参数
3.9 x86不需要附加参数
在 Windows 客户端中使用半虚拟时钟

在 Windows 客户端中编辑引导参数可启用半虚拟时钟。Windows 引导设置保存在 boot.ini 文件中。要弃用半虚拟时钟,请添加以下行:

  1. /use pmtimer

有关 Windows 引导设置以及 pmtimer 选项的详情请参考 Windows XP 可用切换选项以及 Windows 服务器 2003 boot.ini 文件