我在 RHEV 主机上运行了几个虚拟化的 RHEL 6。主机和虚拟机的正常运行时间均超过 1 年。
直到最近两天,他们才开始偶尔随机抛出这些内核消息
kernel: Clocksource tsc unstable (delta = -17179878652 ns). Enable clocksource failover by adding clocksource_failover kernel parameter.
很好:我会遵循建议。但奇怪的是,我没有使用 tsc 作为时钟源
[~]# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
kvm-clock
研究clocksource框架的文档时,我提出的问题比答案还多。
首先,为什么内核会抱怨系统不应该使用的时钟源?内核是否会循环使用所有可用的时钟源?如果是,那么原因是什么?
据我所知,该消息意味着当前时钟源与看门狗时钟源的偏差超过,
WATCHDOG_THRESHOLD
但当前看门狗时钟源是什么?它不可能是 kvm-clock,因为它通常已CLOCK_SOURCE_MUST_VERIFY
设置。有没有办法在运行时显示它?我知道 tsc 由于节流/省电功能而不被认为与现代 CPU 兼容,但
/proc/cpuinfo
它表明 VM 看到的处理器具有该constant_tsc
标志。因此我认为 tsc 也可以提供相当可靠的计时。该标志是底层真实 CPU 的“旁路”还是只是一个模拟的 CPU,运行自己的计数器?在第一种情况下,我可以推测主机的调度程序将 VM 进程切换到具有漂移计数器的另一个核心。这有道理吗?