当select的时钟源是Hyper V时,Linux内核抱怨TSC

我们在Windows Server 2012上运行HyperV上的RHEL 6盒。在我们的RHEL盒子上,我在/ var / log / messages中看到这个错误

kernel: Clocksource tsc unstable (delta = -62519781 ns). Enable clocksource failover by adding clocksource_failover kernel parameter. 

当前的时钟源是 –

 [root@server ~]# cat /sys/devices/system/clocksource/clocksource0/current_clocksource hyperv_clocksource 

可用的时钟源是 –

 [root@server ~]# cat /sys/devices/system/clocksource/clocksource0/available_clocksource hyperv_clocksource tsc acpi_pm jiffies 

我的问题是 – 1.当时钟源是HyperV时,为什么服务器抱怨tsc? 2.我应该select哪个时钟源作为故障切换?

PS – 我知道红帽解决scheme – https://access.redhat.com/site/solutions/434883 。 我只是想知道为什么会发生这种情况?

对于那些没有RedHat Access,解决scheme如下 –

将时钟源更改为系统上的另一个可用时钟首先,find可用的系统时钟源:

 $ cat /sys/devices/system/clocksource/clocksource0/available_clocksource 

****结果的一个例子如下:*

 $ cat /sys/devices/system/clocksource/clocksource0/available_clocksource tsc hpet acpi_pm 

接下来,检查当前使用的时钟源:

 $ cat /sys/devices/system/clocksource/clocksource0/current_clocksource 

****结果的一个例子如下:*

 $ cat /sys/devices/system/clocksource/clocksource0/current_clocksource tsc 

最后,设置新的时钟源:

 echo <new clock source selection> > /sys/devices/system/clocksource/clocksource0/current_clocksource 

要在系统重新启动时使此更改保持不变,必须将以下内容添加到/boot/grub/grub.conf中的内核命令行中:

 clocksource=<clock source choice> 

抱怨只是因为TSC的默认设置而失败,而您没有模块来检测最好的模块。 显然这是select正确的一个,所以这不是一个问题。

警告就在那里,所以如果内核默认select了错误的替代时钟源,你就知道该怎么做。

至于为什么TSC定时器不能生成可靠的定时器,这可能是虚拟机软件中的一个错误。 你可能想检查你的虚拟机手册。 在一些处理器中,C状态2和较低的CPU空闲状态也会中断TSC定时器。 无论哪种方式,我不认为这是一个主要的关注。