avn*_*ner 31 linux multicore rdtsc
我正在从一个线程发送网络数据包,并在另一个运行在不同CPU核心上的线程上接收回复.我的进程测量每个数据包的发送和接收之间的时间(类似于ping).我正在使用rdtsc来获得高分辨率,低开销的时序,这是我的实现所需要的.
所有测量看起来都很可靠.尽管如此,我仍然担心核心的rdtsc准确性,因为我一直在阅读一些暗示tsc未在核心之间同步的文本.
恒定的TSC行为可确保每个时钟周期的持续时间均匀,并支持将TSC用作挂钟定时器,即使处理器内核更改频率也是如此.这是所有英特尔处理器的架构行为.
我仍然担心核心的累积性,这是我的问题
osg*_*sgx 28
X86_FEATURE_CONSTANT_TSC+ X86_FEATURE_NONSTOP_TSCcpuid中的位(edx = x80000007,位#8;检查linux内核的函数以获取更多检查) unsynchronized_tsc
英特尔设计师的vol3b,第16.11.1节不变TSC,它说如下
"16.11.1不变的TSC
较新处理器中的时间戳计数器可以支持增强,称为不变TSC.处理器对不变TSC的支持由CPUID.80000007H:EDX [8]指示.
不变的TSC将在所有ACPI P-,C-中以恒定速率运行.和T状态.这是向前发展的建筑行为.在具有不变TSC支持的处理器上,OS可以将TSC用于挂钟计时器服务(而不是ACPI或HPET计时器).TSC读取效率更高,并且不会产生与环转换或访问平台资源相关的开销."
因此,如果TSC可用于挂钟,则可保证它们同步.
| 归档时间: |
|
| 查看次数: |
20315 次 |
| 最近记录: |