【问题标题】:Intel CPU Cache Policy英特尔 CPU 缓存策略
【发布时间】:2012-09-28 15:20:00
【问题描述】:

我有一台配备 Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz 处理器的笔记本电脑。 我在 Ubuntu 12.04 (x86_64) 上,正在尝试查找有关我的处理器的一些信息。

我能够找到我正在寻找的大部分信息

cat /proc/cpuinfo

lscpu

我还想知道在每个缓存级别上使用的缓存策略。是回写还是直写?

有什么工具可以用来查找此类信息吗?

提前致谢。

【问题讨论】:

  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地点。
  • 您经常可以在Intel ARK 上查看您的 CPU 规格。这是英特尔的产品规格网站。
  • 也称为内存类型而不是缓存策略。缓存策略是是否缓存读/写,是否分配它们以及如何逐出行(替换策略)以及写是否更新内存和放置策略(直接映射、完全关联和集合关联等)。缓存一致性协议是MESI(F)等

标签: linux caching cpu policy


【解决方案1】:

这不是你可以从 CPUID 等查询的东西,也不能配置你的 CPU 来做其中一个或另一个,因此不存在用于查询的工具。您可以查询的是缓存关联性、缓存行大小和缓存大小,例如通过/proc/cpuinfo

在过去一/二十年中,所有与 Intel 兼容的 CPU 都对缓存使用了回写策略(假定首先获取缓存行以允许部分写入)。当然这是理论,现实比这要复杂一些。

几乎所有处理器(包括您的型号)都具有一种或多种形式的写入组合(或自 Merom 以来英特尔称其为填充缓冲区),并且除了最古老的英特尔兼容 CPU 之外,所有处理器都支持来自 SSE 寄存器的未缓存写入(这又是使用一种写组合的形式)。当然,还有片上缓存一致性协议和窥探过滤等机制来确保一个处理器的内核之间以及多处理器系统中不同处理器之间的缓存一致性。
尽管如此——一般的缓存策略仍然是回写的。

【讨论】:

  • 感谢您回答达蒙。我正在 MATLAB 上运行一些测试,教授要求我们找到我们将在其上运行测试的 CPU 的缓存策略,如果可以的话。我做了一些搜索,但我找不到任何东西,这就是我问的原因。
  • AMD Bulldozer 系列 CPU 使用回写式缓存。看我的回答。
  • @PeterCordes:感谢您指出这一点。我正要买一台新笔记本,顺便买了一个 AMD Bulldozer 处理器。你所说的是一个令人信服的理由不这样做。
  • 更新:Bulldozer-family L2 是回写的。只有 L1D 使用小型写入组合缓冲区进行直写。在 Ryzen 中,所有缓存都是回写式的,但每个 4 核集群都有单独的 L3。 (我刚刚用一些链接更新了我的答案,并指出缓存层次结构不仅仅是回写与直写,尤其是对于多线程代码。)
【解决方案2】:

David Kanter 非常出色的英特尔 Sandybridge 文章涵盖了 the memory subsystem and cache architecture:L1D 是英特尔常用的回写,而每个内核的 L2 也是回写。 L3 也是如此(这是一个由芯片上所有内核共享的大型包容性缓存)。

另请参阅Which cache mapping technique is used in intel core i7 processor?,了解有关各代 Intel CPU 的更多详细信息。


AMD 采用了截然不同的方法:Their L1 cache is write-through, but with a tiny 4k write-combining-cache. 在 AMD 上不断重写大于 4k 的缓冲区将在(慢)L2 而不是 L1 上出现瓶颈。

Agner 博客上的帖子中的一张海报声称 BD 的 L2 也是直写的,但 Paul Clayton 的 cmets 对此答案不同意。 (我倾向于相信保罗。)

AMD Ryzen 幸运的是使用了普通的回写 32kiB 8 路 L1D,带有私有回写 512kiB L2。 L3 是共享的 8MB 受害者缓存。它是回写的,但受害者缓存意味着数据仅在从 L1/L2 驱逐时才进入它,而不是直接用于加载/预取。每个 4 核的核心集群(CCX 模块)都有自己的 8MB L3,以及latency/bandwidth between cores in different clusters is bad

关于缓存层次结构的意义远不止回写与直写,尽管大多数差异对于单线程程序并不重要。 (除非操作系统的进程调度程序在 Ryzen 上的集群之间移动它们,在这种情况下它很糟糕。)


在我的 SnB 系统上:

sudo dmidecode

产生的输出包括:

Handle 0x0005, DMI type 7, 19 bytes
Cache Information
        Socket Designation: L1-Cache
        Configuration: Enabled, Not Socketed, Level 1
        Operational Mode: Write Back
        Location: Internal
        Installed Size: 32 kB
        Maximum Size: 32 kB
        Supported SRAM Types:
                Other
        Installed SRAM Type: Other
        Speed: Unknown
        Error Correction Type: None
        System Type: Unified
        Associativity: 8-way Set-associative

所以缓存是回写的事实至少在 BIOS 中,如果这是值得信赖的。我很好奇它在 AMD CPU 上显示了什么,或者 BIOS 编写者是否倾向于“编造一些东西”,有时会在那里输入错误的值。

正如this question 指出的那样,L2 的信息有点虚假:它总计私有 256k-per-core L2:

Handle 0x0006, DMI type 7, 19 bytes
Cache Information
        Socket Designation: L2-Cache
        Configuration: Enabled, Not Socketed, Level 2
        Operational Mode: Varies With Memory Address
        Location: Internal
        Installed Size: 1024 kB
        Maximum Size: 1024 kB
        Supported SRAM Types:
                Other
        Installed SRAM Type: Other
        Speed: Unknown
        Error Correction Type: None
        System Type: Unified
        Associativity: 8-way Set-associative

Handle 0x0007, DMI type 7, 19 bytes
Cache Information
        Socket Designation: L3-Cache
        Configuration: Enabled, Not Socketed, Level 3
        Operational Mode: Unknown
        Location: Internal
        Installed Size: 6144 kB
        Maximum Size: 6144 kB
        Supported SRAM Types:
                Other
        Installed SRAM Type: Other
        Speed: Unknown
        Error Correction Type: None
        System Type: Unified
        Associativity: Other

这是在 i5-2500k(四核 SnB 和 6MiB 的 L3)上

【讨论】:

  • Bulldozer L2 不是直写而是回写。 IBM 的 zSeries — 并不是说​​有使用这种处理器的笔记本电脑! —(例如z196 described by David Kanter,它确实具有直写L2)倾向于积极使用直写。
  • 对此进行更新:Bulldozer 的 L1d(不是 L2)是直写的,带有一个小的 4k 写组合缓冲区。
猜你喜欢
  • 2012-06-30
  • 2022-01-19
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 2022-01-14
  • 2015-01-14
相关资源
最近更新 更多