gpt4 book ai didi

assembly - 常量非不变 tsc 可以跨 cpu 状态改变频率吗?

转载 作者:行者123 更新时间:2023-12-01 21:30:50 25 4
gpt4 key购买 nike

我曾经使用 rdtsc 对 Linux 系统调用进行基准测试,以获取系统调用前后的计数器差异。我将结果解释为挂钟计时器,因为 TSC 以恒定速率递增并且在进入暂停状态时不会停止。

Invariant TSC 概念被描述为

The invariant TSC will run at a constant rate in all ACPI P-, C-. andT-states.

当状态从 C0(运行)更改为 C1(停止)时,常量非不变 tsc 能否改变频率?

我目前的观点是,它不能仅在 Performance(P) 状态下更改频率。因此,在使用非不变 tsc 时,应用 rdtsc 获取系统调用的挂钟计时器是不可靠的。

我没有在我的 /proc/cpuinfo 中找到不变的 tsc 标志,只有 constant_tsc 意味着它不需要不变

困惑的根源是英特尔系统编程手册中的一句话:

The time stamp counter in newer processors may support an enhancement,referred to as invariant TSC.

所以有些芯片(包括我的)有常数,但不是不变的 tsc。

最佳答案

从 Nehalem 和 Saltwell 开始,所有英特尔处理器都支持不变的 TSC,这意味着 TSC 在 P、C 和 T 状态(但不一定在 S 状态)之间以恒定速率递增。

从奔腾 4 系列 0F 型号 03 开始​​,所有英特尔处理器都支持恒定 TSC,这意味着 TSC 在 P 和 T 状态下以恒定速率递增。 TSC 在 HLT 状态(称为 Auto Halt 或 C1/Auto Halt)中继续递增。 TSC 不会在任何其他 sleep 状态下增加。此类处理器包括 Bonnell。

较旧的处理器不支持常量 TSC。 TSC 在 HLT 状态下继续增加,但在更深的 sleep 状态下不会增加。在其中一些处理器上,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 |

关于assembly - 常量非不变 tsc 可以跨 cpu 状态改变频率吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62492053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com