Som*_*ame 3 assembly x86-64 intel cpu-architecture rdtsc
我曾经使用 rdtsc 对 Linux 系统调用进行基准测试,以获取系统调用前后的计数器差异。我将结果解释为挂钟定时器,因为 TSC 以恒定速率递增,并且在进入暂停状态时不会停止。
不变 TSC 概念描述为
不变的 TSC 将在所有 ACPI P-、C- 中以恒定速率运行。和 T 状态。
当状态从 C0(运行)更改为 C1(停止)时,恒定非不变tsc 是否可以改变频率?
我当前的观点是,它不能仅在性能(P)状态下更改频率。因此,在使用非不变 tsc 时,应用 rdtsc 获取用于系统调用的挂钟计时器并不可靠。
我在 my 中没有找到不变的 tsc 标志/proc/cpuinfo,只是constant_tsc意味着它没有必要不变。
混乱的根源是英特尔系统编程手册中的一句话:
较新处理器中的时间戳计数器可能支持增强功能,称为不变 TSC。
所以有些芯片(包括我的)具有恒定的 tsc,但不是不变的。
从 Nehalem 和 Saltwell 开始,所有英特尔处理器都支持不变 TSC,这意味着 TSC 在 P、C 和 T 状态(但不一定在 S 状态)上以恒定速率递增。
从 Pentium 4 Family 0F Model 03 开始,所有 Intel 处理器都支持恒定 TSC,这意味着 TSC 在 P 状态和 T 状态下以恒定速率递增。TSC 在 HLT 状态(称为自动停止或 C1/自动停止)下继续递增。TSC 在任何其他睡眠状态下都不会增加。此类处理器包括 Bonnell。
较旧的处理器不支持恒定 TSC。TSC 在 HLT 状态下继续递增,但在更深的睡眠状态下则不会。在其中一些处理器上,TSC 存在缺陷。
从 S 状态唤醒时,TSC 值可能会重新初始化(某些与 BIOS 相关的值)。
这是一个总结。“Y”表示 TSC 在指定类型的状态中继续以相同的速率增加。“N”表示 TSC 要么继续以不同的速率递增,要么停止递增。在一些处理器上,TSC 在 S3 状态及更低状态下递增(这称为始终开启的 TSC)。“N/A”表示不支持 TSC。
| T | P |C = HLT|C Other|S <= S3|S Other|
---------------------------------------------------
Nehalem+ | Y | Y | Y | Y | N | N |
Silvermont Merrifield+Moorefield, | Y | Y | Y | Y | Y | N |
Saltwell Penwell+Cloverview
Other Saltwell+ | Y | Y | Y | Y | N | N |
KNL+ | Y | Y | Y | Y | N | N |
P4 90nm+ | Y | Y | Y | N | N | N |
Enhanced Pentium M+ | Y | Y | Y | N | N | N |
Bonnell | Y | Y | Y | N | N | N |
Quark X1000 | Y | N | Y | N | N | N |
KNC | Y | N | Y | N | N | N |
P5+ | Y | N | Y | N | N | N |
Before P5 | N/A | N/A | N/A | N/A | N/A | N/A |
Other Quark | N/A | N/A | N/A | N/A | N/A | N/A |
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2906 次 |
| 最近记录: |