“clocksource tsc stable”是什么意思?

“clocksource tsc stable”是什么意思?

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

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

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

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

答案1

说实话,我今天第一次看到这条消息,根本不知道它到底意味着什么。

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

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

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

delta认为,所记录的是 TSC 两次计时之间的时间差。这意味着,每次 TSC 计数时1NNNNNNNNN都会经过纳秒。因此,通常这就是您保持非常准确的时间的方法。

Linux 内核将多次检查此频率(以确定源是否稳定),并得到不同的结果。因此,出现该消息。


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

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

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

我怀疑这条信息意味着病情危急。我之所以这么说,是因为我认为如果病情危急,你现在应该已经知道了。

相关内容