我过去常常用rdtsc对Linux系统调用进行基准测试,以获得系统调用前后的计数器差异。我将结果解释为挂钟计时器,因为TSC以恒定的速率递增,进入暂停状态时不会停止。
不变的TSC概念被描述为
不变的TSC将在所有的消费物价指数P-,C-中以恒定的速率运行。和T状态。
当将状态从C0 (操作)更改为C1 (停止)?时,常数非不变 tsc是否可以改变频率?
我目前的观点是,它不能只在性能(P)状态之间改变频率。因此,在使用非不变tsc时,应用rdtsc获取系统调用的壁时钟定时器是不可靠的。
我没有在我的/proc/cpuinfo中找到不变的tsc标志,只有constant_tsc,这意味着它不是必要的不变量。
令人困惑的原因是英特尔系统编程手册中的一句话:
--新处理器中的时间戳计数器--可以支持一种增强,称为不变时标。
因此,一些芯片(包括我的芯片)具有常数,但不是不变的tsc。
发布于 2020-08-01 03:15:40
从Nehalem和Saltwell开始,所有Intel处理器都支持不变的TSC,这意味着TSC在P-、C-和T-状态之间以恒定的速率递增(但不一定跨越S-状态)。
从奔腾4族0F型号03开始,所有英特尔处理器都支持恒定的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 |https://stackoverflow.com/questions/62492053
复制相似问题