4

在调试了我公司产品的 BIOS 的不稳定 tsc 问题后,我怀疑当唯一的其他时钟源是 jiffies 时,tsc 可能总是不稳定。

我得到了这样的错误, Clocksource tsc unstable (delta = -531266231 ns).然后内核选择了 tsc 以外的 jiffies。仅有的两个时钟源是 tsc 和 jiffies。我用 i386 和 x64 尝试了 Linux 内核 2.6 和 3.2。内核说CPU其实支持constant tsc和invariant tsc。

检查Linux源代码后,我发现 tsc 有一个标志CLOCKSOURCE_MUST_VERIFY,而 jiffies 没有。我猜如果只有两个时钟源,jiffies 和 tsc,那么 jiffies 将是时钟源看门狗。但是,与 tsc 相比,jiffies 是一个非常差的时钟源,因此我怀疑这种情况下的 tsc 将始终“不稳定”,因为有一个糟糕的看门狗来验证它。

我还检查了其他一些运行良好的 tsc 系统,发现它们还有其他时钟源,如 Hpet 或 acpi_pm。

因此,我如何判断 tsc 不稳定是由 jiffies 还是其他地方的错误引起的?

4

3 回答 3

2

今天我用最少的安装测试了 CentOS 6.6 i386 镜像。默认情况下,内核具有三个时钟源:tsc acpi_pm jiffies. Clocksource tsc 是正在使用的。

然后我尝试acpi=off了选项,发现只有两个时钟源,tsc jiffies. 但是,tsc 不是不稳定的,仍然用作主要时钟源。因此看门狗 jiffies 不会总是拒绝 tsc。

我在戴尔台式机上进行了上述实验。但是,在另一台计算机上完全相同的硬盘驱动器使用我公司的 BIOS,tsc 仍然不稳定(也只有两个时钟源:tsc 和 jiffies,但使用了 jiffies)。我怀疑BIOS有问题。我知道我的 BIOS 还不支持 acpi,但我不确定这是不是这个原因。

因此它跳到另一个问题:BIOS中的某些配置是否会导致tsc不稳定?我的 BIOS 支持 Intel CPU 并且已经禁用 CPU 电源管理。

于 2015-05-04T18:25:55.147 回答
1

在 Linux 上 - 在用户应用程序中 - 读取time(7)并且不要直接使用 TSC,而是使用clock_gettime(2)(可能与CLOCK_REALTIME)。

如果计算机连接到 Internet,请安装一些 NTPD 客户端守护程序。

于 2015-05-03T07:09:38.573 回答
1

经过一番实验,我暂时得出一个结论:tsc稳定性与ACPI设置有关。我使用 Aptio BIOS 版本 2.15.1236 和标准 Linux 内核 3.2.68 进行了测试。

起初,我在内核配置中打开了 ACPI 并构建了一个 bzImage,其 tsc 运行良好(与其他时钟源acpi_pmhpet)。此外,即使我尝试acpi=off在内核命令行中使用来禁用 acpi,clocksourcetsc仍然可以很好地与 clocksource 一起使用jiffies

第二次我在内核配置中关闭了 ACPI。此时时钟源tsc在构建的内核映像中不稳定。唯一剩下的时钟源是jiffies.

经过其他一些实验,我怀疑 tsc 只有在 BIOS 和内核都支持 ACPI 时才稳定。acpi=off我查看了一些论坛并被告知即使在 Linux 启动命令行中也没有完全关闭 ACPI 。我公司自己的 BIOS 在 ACPI 表上有一些错误,因此它无法在 Linux 内核映像中保持稳定的 tsc。

然而,这只是我的猜测。我希望有专家告诉我我是对还是错。我将尝试修复我公司 BIOS 的 ACPI 表错误并更新我进一步实验的结果。

于 2015-05-22T19:14:55.167 回答