在为我公司产品的BIOS调试不稳定的tsc问题后,我怀疑当唯一的其他clockource是jiffies时,tsc可能总是不稳定。
我得到的错误就像
Clocksource tsc unstable (delta = -531266231 ns).
然后内核选择了除tsc之外的jiffies。
只有两个时钟源是tsc和jiffies。
我用i386和x64尝试了Linux内核2.6和3.2。内核说CPU实际上支持常量tsc和不变tsc。
检查Linux源代码后,我发现tsc有一个标志CLOCKSOURCE_MUST_VERIFY
而jiffies没有。{1}}我想如果只有两个clockources,jiffies和tsc,jiffies将成为clocksource监视器。
然而,与tsc相比,jiffies是一个非常差的时钟源,因此我怀疑在这种情况下tsc总是“不稳定”,因为有一个坏的监视器来验证它。
我还检查了其他一些运行良好的tsc系统,并发现它们有其他时钟源,如Hpet或acpi_pm。
因此,我如何判断tsc不稳定是由于jiffies还是其他地方的错误造成的?
答案 0 :(得分:2)
今天我用最少的安装测试了CentOS 6.6 i386映像。内核默认有三个时钟源:Card
。 Clocksource tsc是正在使用的。
然后我尝试了tsc acpi_pm jiffies
选项,发现只有两个clockources acpi=off
。但是,tsc并不稳定,仍然用作主要的时钟源。因此看门狗jiffies并不总是否认tsc。
我在戴尔桌面上进行了上述实验。然而,使用我公司的BIOS在另一台计算机中使用完全相同的硬盘驱动器,tsc仍然不稳定(也只有两个时钟源:tsc和jiffies,但使用的是jiffies)。我怀疑有一些关于BIOS的问题。我知道我的BIOS还不支持acpi,但我不确定这是什么原因。
因此它跳到了另一个问题:BIOS中的某些配置是否会导致tsc不稳定?我的BIOS支持Intel CPU,并且已禁用CPU电源管理。
答案 1 :(得分:1)
在Linux上 - 在用户应用程序中 - 阅读time(7)并且不要直接使用 TSC,而是使用clock_gettime(2)(可能使用CLOCK_REALTIME
)。< / p>
如果计算机已连接到Internet,请安装一些NTPD客户端守护程序。
答案 2 :(得分:0)
经过一些实验,我得出了一个临时结论:tsc
稳定性与ACPI设置有关。我测试了Aptio BIOS版本2.15.1236和标准Linux内核3.2.68。
首先,我在内核配置中打开了ACPI并构建了一个bzImage,其tsc结果运行良好(与其他clocksource acpi_pm
和hpet
)。此外,即使我尝试在内核命令行中使用acpi=off
来禁用acpi,clockource tsc
仍然可以与clocksource jiffies
一起使用。
我第二次关闭内核配置中的ACPI。在这段时间内,clocksource tsc
在构建的内核映像中不稳定。唯一剩下的其他时钟源是jiffies
。
经过一些其他实验后,我怀疑当BIOS和内核都支持ACPI时,tsc只是稳定的。我检查了一些论坛,并被告知即使在Linux启动命令行中使用acpi=off
,ACPI也没有完全关闭。我公司自己的BIOS在ACPI表上有一些错误,因此无法在Linux内核映像中维护稳定的tsc。
然而,这只是我的猜测。我希望有专家告诉我,我是对还是错。我将尝试修复我公司BIOS的ACPI表错误并更新我的进一步实验的结果。