linux - 时间戳计数器

标签 linux rdtsc

我通过查询寄存器在我的 C++ 程序中使用时间戳计数器。但是,我遇到的一个问题是获取时间戳的函数会从不同的 CPU 获取。我怎样才能确保我的函数总是从同一个 CPU 获取时间戳,或者无论如何都可以同步 CPU?顺便说一句,我的程序在 Fedora 13 64 位的 4 核服务器上运行。

谢谢。

最佳答案

请看下面英特尔手册的摘录。根据 16.12 节,我认为下面的“较新的处理器”是指任何比奔腾 4 更新的处理器。如果支持,您可以使用 rdtscp 指令同时原子地确定 tsc 值和核心 ID。不过我还没试过。祝你好运。

Intel 64 和 IA-32 架构软件开发人员手册

第 3 卷(3A 和 3B):系统编程指南:

第16.12.1章不变的TSC

较新处理器中的时间戳计数器可能支持增强功能,引用 作为不变的 TSC。处理器对不变 TSC 的支持由 CPUID.80000007H:EDX[8].

不变的 TSC 将在所有 ACPI P-、C- 中以恒定速率运行。和 T 状态。这是 建筑行为向前发展。在具有不变 TSC 的处理器上 支持,操作系统可以使用 TSC 来提供挂钟定时器服务(而不是 ACPI 或 HPET 定时器)。 TSC 读取效率更高,不会产生开销 与环转换或对平台资源的访问相关联。

英特尔还有一个代码执行基准测试指南,其中讨论了 cpu 与 rdtsc 的关联 - http://download.intel.com/embedded/software/IA/324264.pdf

关于linux - 时间戳计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4075727/

相关文章:

c - Linux 中的 malloc() - "there is no guarantee that the memory really is available"?

c - recv() 错误 C/C++ 套接字编程

c - 为什么第一个 printf 需要更长的时间?

c - RDTSC 和系统调用、sys_read 和 sys_write

c - rdtsc代码显示内存特性(如TLB未命中)对性能的影响

linux - 如何复制文本文件的一部分并将它们粘贴到新文件中

c - 如何使用 libpcap 通过 poll() 接收以太网帧

php - 从 php 代码在 debian 中安装驱动器

assembly - “rdtsc”之前的“cpuid”