Linux 怎么调整虚拟机内部的时钟源提升准确性

冬萱大大_8689

冬萱大大_8689

2026-08-14

793人浏览

原创

根本原因是tsc时钟源在虚拟机挂起恢复时因vcpu暂停导致计时失真,需改用kvm-clock等虚拟化感知时钟源,并配合chronyd微调;查看当前时钟源用cat /sys/devices/system/clocksource/clocksource0/current_clocksource,强制启用kvm-clock需在grub中添加clocksource=kvm-clock参数。

linux 怎么调整虚拟机内部的时钟源提升准确性

虚拟机里时间不准,根本原因不是“没同步”,而是底层时钟源被调度器打断、CPU暂停导致计时失真。光靠 chronyd 或 ntpd 补偏移,治标不治本。真正提升准确性,得从时钟源(clock source)本身入手。

确认当前使用的时钟源

Linux 内核启动时会自动选择一个时钟源,但在虚拟机中常默认用 tsc(时间戳计数器),而它在 VM 中易受 vCPU 调度影响,造成严重漂移。

查看当前生效的时钟源:

  • cat /sys/devices/system/clocksource/clocksource0/current_clocksource
  • 列出所有可用时钟源:cat /sys/devices/system/clocksource/clocksource0/available_clocksource

常见输出中,tsc、hpet、acpi_pm、kvm-clock(KVM 专用)、hyperv_clocksource(Hyper-V)、vmware_pit(VMware)等都可能出现。其中 kvm-clock 和 hyperv_clocksource 是专为对应虚拟化平台优化的稳定时钟源,优先级应高于 tsc。

强制启用虚拟化感知的时钟源

多数现代虚拟化平台(KVM/QEMU、Hyper-V、VMware)都提供了 guest-aware 的时钟机制,需在内核启动参数中显式启用。

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载
  • KVM/QEMU:确保启动参数含 clocksource=kvm-clock。编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX 行末尾添加该参数,然后运行 sudo update-grub && sudo reboot
  • Hyper-V:添加 clocksource=hyperv_clocksource,并确认已加载 hv_vmbus 和 hv_utils 模块
  • VMware:启用 vmware_clocksource(部分内核版本支持),或确保 VMware Tools / open-vm-tools 已安装并运行 —— 它会自动注册 vmware_pit 并协助时间补偿

重启后再次检查 current_clocksource,应显示对应平台的专用源,而非 tsc。

配合 chrony 做平滑校准

即使换了更稳的时钟源,仍需 NTP 客户端做长期微调。chrony 比 ntpd 更适合虚拟机,因其能更好应对间歇性停顿和网络抖动。

  • 确保 chronyd 正在运行:systemctl is-active chronyd
  • 配置中启用关键选项(/etc/chrony.conf):
    makestep 1.0 -1(允许开机时对 >1 秒偏差做步进修正)
    rtcsync(持续将系统时间同步到硬件时钟,减少重启误差)
    bindcmdaddress 127.0.0.1(增强安全性)
  • 使用国内低延迟源,例如:
    server ntp.ntsc.ac.cn iburst
    server cn.pool.ntp.org iburst

验证同步效果:chronyc tracking 查看 offset(建议长期保持在 ±10ms 内),chronyc sources -v 确认源状态为 ^*(优选)。

额外加固:禁用 tsc 不稳定性

某些内核版本下,即使指定了 kvm-clock,tsc 仍可能被误用。可在 grub 启动参数中加 notsc 或 nohpet(视情况)来排除干扰源;也可通过 sysctl 临时屏蔽:

  • echo 'options kvm ignore_msrs=1' > /etc/modprobe.d/kvm.conf(防止 MSR 异常影响时钟)
  • 对 KVM guest,确认宿主机已启用 host-passthrough 或 qemu64 CPU 模式,并开启 invtsc(Intel)或 stibp(AMD)相关扩展(需宿主机 BIOS 支持)

这些设置不改变功能,但能减少因硬件特性误判引发的时钟跳变。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3850

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3313

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2453

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5910

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5542

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3273

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2765

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

2979

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

277

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习