跨CPU内核的rdtsc准确性

我正在从一个线程发送网络数据包,并收到在不同CPU内核上运行的第二个线程的答复。我的过程测量每个数据包的发送和接收之间的时间(类似于ping)。我正在使用rdtsc来获取高分辨率,低开销的时序,这是我的实现所需的。

所有测量看起来都是可靠的。尽管如此,我仍担心rdtsc在内核之间的准确性,因为我一直在阅读一些文字,这些文章暗示tsc在内核之间不同步。

我在维基百科中找到了有关TSC的以下信息

稳定的TSC行为可确保

。这是面向所有英特尔处理器的架构行为。

更多信息

  • 我在Intel nehalem机器上运行我的过程。
  • 操作系统是Linux。
  • 为所有内核设置了“ ” cpu标志。

回答:

X86_FEATURE_CONSTANT_TSC+ X86_FEATURE_NONSTOP_TSCcpuid中的位(edx =

x80000007,位#8;Linux内核的检查功能以进行更多检查)

unsynchronized_tsc

英特尔设计师的vol3b,第16.11.1节“不变型TSC”中表示以下内容

“ 16.11.1不变式TSC

新型处理器中的时间戳计数器可以支持增强功能,称为不变TSC。CPUID.80000007H:EDX [8]指示处理器对不变TSC的支持。

不变的TSC将在所有ACPI

P-,C-中以恒定速率运行。和T状态。这是前进的架构行为。在具有不变TSC支持的处理器上,OS可以将TSC用于壁钟计时器服务(而不是ACPI或HPET计时器)。TSC读取效率更高,并且不会产生与环转换或访问平台资源相关的开销。”

因此,如果TSC可以用于壁钟,则可以保证它们是同步的。

以上是 跨CPU内核的rdtsc准确性 的全部内容, 来源链接: utcz.com/qa/410760.html

回到顶部