我正在一个线程中发送网络数据包,并在运行在不同CPU核心上的第二个线程中接收回复。我的进程测量每个数据包的发送和接收之间的时间(类似于ping)。我使用rdtsc获取高分辨率,低开销的计时,这是我实现所需的。
所有的测量看起来都很可靠。但是,我还是担心rdtsc在不同核心之间的准确性,因为我读到一些文本暗示tsc在核心之间没有同步。
我在维基百科上找到了以下关于TSC的信息:
“恒定的TSC行为确保每个时钟周期的持续时间是均匀的,并支持即使处理器核心更改频率也可以将TSC用作墙时钟计时器。这是未来所有英特尔处理器的架构行为。”
尽管如此,我仍然担心跨核心的精度问题,这就是我的问题。
更多信息:
我在Intel Nehalem机器上运行我的进程。
操作系统是Linux。
对于所有核心,设置了“constant_tsc”CPU标志。
所有的测量看起来都很可靠。但是,我还是担心rdtsc在不同核心之间的准确性,因为我读到一些文本暗示tsc在核心之间没有同步。
我在维基百科上找到了以下关于TSC的信息:
“恒定的TSC行为确保每个时钟周期的持续时间是均匀的,并支持即使处理器核心更改频率也可以将TSC用作墙时钟计时器。这是未来所有英特尔处理器的架构行为。”
尽管如此,我仍然担心跨核心的精度问题,这就是我的问题。
更多信息:
我在Intel Nehalem机器上运行我的进程。
操作系统是Linux。
对于所有核心,设置了“constant_tsc”CPU标志。