“clocksource tsc 不稳定”是什么意思?

bwD*_*aco 10 linux clock

每当我看到 Linux 启动时,我都会看到以下消息:

时钟源 tsc 不稳定(增量 = NNNNNNNN ns)

其中 NNNNNNNN 是一些非常大的数字,可能是正数或负数。

这个消息是什么意思?我应该担心这个吗?

Der*_*ler 8

老实说,我今天第一次看到这条消息,不知道它的实际含义。

话虽如此,我阅读了关于时间戳计数器的维基百科文章(这是tsc错误消息中的 代表)。文章在第二段提到了TSC的一个问题:

直到最近,时间戳计数器一直是一种出色的高分辨率、低开销的获取 CPU 计时信息的方式。随着多核/超线程 CPU、多 CPU 系统和“休眠”操作系统的出现,不能依赖 TSC 来提供准确的结果— 除非非常小心地纠正可能的缺陷:滴答速率以及所有内核(处理器)在其计时寄存器中是否具有相同的值。无法保证单个主板上多个 CPU 的时间戳计数器会同步。在这种情况下,程序员只能通过将代码锁定到单个 CPU 来获得可靠的结果。即便如此,由于操作系统或 BIOS 采取的节能措施,CPU 速度可能会发生变化,或者系统可能会休眠并稍后恢复(重置时间戳计数器)。在后一种情况下,为了保持相关性,必须定期重新校准计数器(根据您的应用程序所需的时间分辨率)。

简而言之,在现代系统中,TSC 无法准确测量时间。这就是消息告诉你的。在您的系统上,TSC 不是一个稳定的时间源。

delta所指出的,我会承担,是TSC两个刻度之间的报告时间增量。意思是,每次 TSC 计数时1NNNNNNNNN都会经过纳秒。所以,这就是您通常可以保持非常准确的时间的方式。

linux 内核会多次检查这个频率(以确定源是否稳定)并且得到不同的结果。因此,消息。


那么,你需要担心吗?
老实说我不知道​​。据我了解,这个问题是由于进程在内核之间“移动”(每个内核可能具有不同的 TSC 频率)或内核更改其内核频率(如省电)而引起的。

最有可能的是,该消息仅被打印出来,因为内核自己检测到了这个问题,现在会相应地进行调整。

而且,从我在内核源代码 ( arch/x86/kernel/tsc.c) 中读到的内容来看,我认为我的假设并没有偏离太远。

我怀疑该消息是否意味着危急情况。我的基础是假设你现在就知道它是否重要。

  • 引自同一篇文章,一些现代 CPU 还提供了 *constant* 时间戳计数器:*最近的 Intel 处理器包括一个恒定速率 TSC(由 Linux 的 /proc/cpuinfo 中的 constant_tsc 标志标识)。对于这些处理器,无论实际 CPU 运行速率如何,TSC 都会以处理器的最大速率读取。* (2认同)
  • 我只想添加信息。今天我在我们的一台超微服务器上遇到了这个问题。操作系统是 RHEL 6.5,它给出了相同的消息。该服务器现在正在以蜗牛般的速度爬行。已经一个小时了,启动还没有完成。我的下一步将是更改计数器并通过进入救援模式在 grub.conf 文件中添加信息。因为单用户模式也不起作用 (2认同)