cpuid:报告的微架构似乎模棱两可

cpuid: reported micro-architecture seems ambiguous

Ubuntu 20.04 LTS。注意 (unknown type) 报告:

$ cpuid | less
CPU 0:
   vendor_id = "GenuineIntel"
   version information (1/eax):
      processor type  = primary processor (0)
      family          = 0x6 (6)
      model           = 0xe (14)
      stepping id     = 0xd (13)
      extended family = 0x0 (0)
      extended model  = 0x9 (9)
      (family synth)  = 0x6 (6)
      (model synth)   = 0x9e (158)
      (simple synth)  = Intel Core (unknown type) (Kaby Lake / Coffee Lake) {Skylake}, 14nm
      .
       . 
        .
   (uarch synth) = Intel Coffee Lake {Skylake}, 14nm
   (synth) = Intel Xeon E-2200 (Coffee Lake R0) {Skylake}, 14nm
cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 158
model name      : Intel(R) Xeon(R) E-2278G CPU @ 3.40GHz
stepping        : 13
microcode       : 0xea
cpu MHz         : 3400.000
cache size      : 16384 KB
physical id     : 0
siblings        : 16
core id         : 0
cpu cores       : 8
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
. . .

那么这个处理器是什么?卡比?咖啡?还是天湖?我问是因为我正在做 PMU 编程。我想确保根据架构做正确的事情。

这是 cpuid 命令的 http://www.etallen.com/cpuid.html 版本,而不是 msr-tools 软件包的一部分。


根据 Intel's web site,“Intel(R) Xeon(R) E-2278G”是 Coffee Lake,因为您的 cpuid shell 命令从其他 CPUID 信息,可能包括品牌字符串。

具体来说,according to wikichip,它是 Coffee Lake E(“客户端”内核的 Xeon-badged 版本)的 Coffee Lake Refresh 迭代,因此是 Coffee Lake ER。

作为 Coffee Lake 意味着 IA 内核在微体系结构上与 Skylake(和 Kaby Lake)相同,尽管它具有更新的 GPU 和额定速度更高的内存控制器。

对于 CPU 内核,改进只是硅工艺 (14nm++) 的改进。

除了一些针对 Meltdown、L1TF 或其他相关漏洞的硬件修复。并且可能改进 Spectre 缓解措施。但尚未修复需要在微代码或 JCC 勘误表中禁用 LSD(循环缓冲区)的错误,因此这两个性能问题仍然 self-inflicted 其微代码即使在极端情况下也能确保正确性。

据我所知,PMU 硬件在 SKL、KBL 和 CFL 中是相同的,除了可能(?)一些勘误表已修复。我假设事件 ID 都是相同的。


理解command-linecpuid输出:

 version information (1/eax):
 ... family/model/stepping/...
 (simple synth)  = Intel Core (unknown type) (Kaby Lake / Coffee Lake) {Skylake}, 14nm

猜测 这就是说 family/model/stepping 和 extended-model/family 字段不区分 KBL 和 CFL(因此类型未知) ,但确实暗示其中之一。 {Skylake} 提醒您 KBL 和 CFL 都是 Skylake 的迭代。

“(未知类型)”可能表示它不知道它是 i3/5/7/9 还是 Pentium 或 Celeron。

在我的 i7-6700k Skylake 台式机上,我明白了。来自 cpuid version 20170122 来自旧的 Arch Linux AUR 安装,它在 CPU 本身发布后仍然超过一年,它可能比你拥有的版本更旧。

   version information (1/eax):
      processor type  = primary processor (0)
      family          = Intel Pentium Pro/II/III/Celeron/Core/Core 2/Atom, AMD Athlon/Duron, Cyrix M2, VIA C3 (6)
      model           = 0xe (14)
      stepping id     = 0x3 (3)
      extended family = 0x0 (0)
      extended model  = 0x5 (5)
      (simple synth)  = Intel Core i3-6000 / i5-6000 / i7-6000 / Pentium G4000 / Celeron G3900 / Xeon E3-1200 (Skylake), 14nm

所以是的,(简单的合成器)可能是它能够从那片叶子中的东西而不是品牌字符串中预测出来的。

从最新版本的工具,version 20220224

   version information (1/eax):
      processor type  = primary processor (0)
      family          = 0x6 (6)
      model           = 0xe (14)
...
      (family synth)  = 0x6 (6)
      (model synth)   = 0x5e (94)
      (simple synth)  = Intel Core (unknown type) (Skylake-H R0) {Skylake}, 14nm
    ...
   (uarch synth) = Intel Skylake {Skylake}, 14nm
   (synth) = Intel Core i*-6000 (Skylake-H R0) {Skylake}, 14nm

所以 (unknown type) 看起来完全正常,这只是英特尔在 i3/5/7.

中没有改变系列、型号、步进数字的结果

您的 Ubuntu 20.04 LTS 中的 cpuid 版本似乎确实了解 Coffee Lake。也许还不够新,无法了解 Coffee Lake Refresh,因为您的“R0”代表您的,与我的 Skylake 的“R0”相同(不是“刷新”;没有CPU 的 t 个新迭代作为 Skylake 发布。他们在 SKL 之后直接转移到 Kaby Lake。)

无论如何,您的 cpuid 版本最终会根据各种信息对您的 CPU 进行正确且完全准确的描述。

   (synth) = Intel Xeon E-2200 (Coffee Lake R0) {Skylake}, 14nm

我不确定 cpuid R0 的确切含义。也许是“修订版 0”,如果它不知道“Coffee Lake Refresh”,这将是有意义的。我想知道更新的 cpuid 是否会报告 R1 或拼出“刷新”?

不愧是Coffee Lake家族的E-22xx系列Xeon。 CPU 核心与 Skylake 基本相同,采用 14nm(++) 工艺制造。 IDK 如果英特尔在 CFL 和 CFL-refresh 之间的内核内部进行了任何调整,那么对于它进行编程,您拥有所需的所有信息。

其他“R”实例出现在 CPUID 输出中,表示“注册商标”,例如品牌字符串 Intel(R) Xeon(R) E-2278G CPU @ 3.40GHz 中的“Intel(R) Xeon(R)”,Linux 通过具有不同 ECX 输入的 CPUID 机器指令的 the EAX=0017h leaf 直接从 CPU 中拉出。但我认为 R0 可能被用来表示“第一次迭代”(第 0 次刷新?),因为它不仅仅是复制像“Xeon(R)”这样的字符串。