英特尔CPU缓存策略

feu*_*tos 5 linux cpu policy caching

我有一台带有2.50GHz处理器的Intel®Core™i5-2450M CPU的笔记本电脑。我在Ubuntu 12.04(x86_64)上,尝试查找有关我的处理器的信息。

我能够找到我一直在寻找的大多数信息

cat /proc/cpuinfo
Run Code Online (Sandbox Code Playgroud)

lscpu
Run Code Online (Sandbox Code Playgroud)

我还想找出在每个缓存级别上使用的缓存策略。是回写还是透写?

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

提前致谢。

Dam*_*mon 8

您不能从CPUID等查询此内容,也不能将CPU配置为做一个或另一个,因此没有查询工具。您可以查询的是缓存关联性,缓存行大小和缓存大小,例如通过/proc/cpuinfo

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

几乎所有处理器(包括您的型号)都具有一种或几种形式的写合并(或自Merom以来称为Intel所称的填充缓冲区),除最古老的Intel兼容CPU外,所有处理器均支持SSE寄存器的未缓存写操作(再次使用一种形式)。写合并)。然后,当然还有诸如片上缓存一致性协议和探听过滤之类的东西以及其他机制,以确保一个处理器的内核之间以及多处理器系统中不同处理器之间的缓存一致性。
尽管如此,常规缓存策略仍在回写中。

  • AMD Bulldozer系列CPU *不要*使用回写式缓存。看我的答案。 (2认同)
  • 对此进行更新:推土机系列L2已回写。只有L1D具有小的写合并缓冲区的直写。在Ryzen中,所有缓存都是回写的,但是每个4核的群集都有一个单独的L3。(我只是用一些链接更新了我的答案,并指出,与回写和直写相比,缓存层次结构具有更多的优势,尤其是对于多线程代码而言。) (2认同)

Pet*_*des 5

David Kanter的非常出色的Intel Sandybridge编写涵盖了内存子系统和缓存体系结构:L1D是Intel常见的写回,而每核L2也是写回。L3也是如此(L3是芯片上所有内核共享的大型包含缓存)。

另请参阅Intel Core i7处理器中使用了哪种缓存映射技术?有关各代Intel CPU的更多详细信息。


AMD采用了一种非常不同的方法:他们的L1高速缓存是直写式的,但是只有一个很小的4k写合并高速缓存。 在AMD上不断重写大于4k的缓冲区将成为(慢速)L2而不是L1的瓶颈。

Agner博客上该主题的发帖人之一声称BD的L2也是直写的,但是Paul Clayton对这个答案的评论不同意。(我倾向于相信保罗。)

幸运的是,AMD锐龙使用普通的回写式32kiB 8路L1D和专用的回写式512kiB L2。L3是共享的8MB受害者缓存。这是回写操作,但是受害者缓存意味着数据仅在从L1 / L2退出时才进入数据,而不是直接用于加载/预取。每个4个核心的核心群集(CCX模块)都有自己的8MB L3,并且不同群集中的核心之间的延迟/带宽很差

关于高速缓存层次结构,除了回写与直写之外,还有更多要说的,尽管对于单线程程序而言,大多数差异并不重要。(除非操作系统的进程调度程序将它们在Ryzen上的群集之间移动,否则很糟糕。)


在我的SnB系统上:

sudo dmidecode
Run Code Online (Sandbox Code Playgroud)

产生的输出包括:

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
Run Code Online (Sandbox Code Playgroud)

因此,如果值得信赖,则至少在BIOS中存在缓存是回写的事实。我很好奇它在AMD CPU上显示的内容,或者BIOS编写者是否倾向于“弥补”并有时在其中输入错误的值。

正如这个问题所指出的那样,L2的信息有点虚假:总计每个核心256k 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
Run Code Online (Sandbox Code Playgroud)

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