我试图找出有关缓存的细节(特别是哪些缓存在核心之间共享,哪些不共享),但发现了不一致的情况。
sudo lshw
说
*-cache:0
description: L1 cache
physical id: a
slot: Internal Cache
size: 64KiB
capacity: 64KiB
capabilities: synchronous internal write-back
*-cache:1
description: L2 cache
physical id: b
slot: External Cache
size: 8MiB
capabilities: synchronous internal write-back
但lscpu
声称
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
我不太担心指令和数据缓存加在一起,但是 L2 去哪儿了?
在运行 Ubuntu 10.10 的机器上观察,或者说uname -a
:
Linux name 2.6.35-32-generic #66-Ubuntu SMP Mon Feb 13 21:04:32 UTC 2012 x86_64 GNU/Linux
这是一个一般性问题,但请注意,最精确的问题都不是制造商规格我也找不到维基百科确实有必要的细节。
不相关的额外问题:是否External Cache
意味着缓存在(四个)核心之间共享(反之亦然Internal Cache
)?
答案1
感谢您在问题中添加有关处理器的额外信息。了解您发布的示例是有帮助的Intel Core i7-920 Processor
。
提供的信息lscpu
更加准确,因为它包括所有三级缓存:L1、L2 和 L3。看来lshw
只是进行了最小程度的修改,以反映英特尔在其 CPU 中添加 L3 缓存的情况。有关 L3 缓存大小的信息显然被报告为 L2 缓存,而不是显示有关所有三个缓存级别的信息。
我假设您查看的规格不包括 L1 和 L2 缓存,因为在给定的微架构中它们都是相同的。例如,对于尼哈勒姆这是”64 KB L1 缓存/核心(32 KB L1 数据 + 32 KB L1 指令)和 256 KB L2 缓存/核心。”。
我相信为每个核心提供自己的 L1 和 L2 以及一个更大的通用 L3 是作为Nehalem(微架构)(2008 年 11 月?)。
我不知道为什么lshw
使用这个词External Cache
来指代L3。但它让我觉得具有误导性,因为 L3 缓存位于 CPU 芯片上,而不是我所考虑的外部的。同样,这感觉就像尝试使用旧软件来描述新硬件,而只对软件进行最小的更改。
(也许通过查看实际的源代码可以学到更多,但我没有时间尝试这样做。)
最后,是的,L3 缓存在内核/线程之间共享。以下引用来自上面链接的维基百科文章,“重新引入超线程并减少 L2,L2 已合并为 L3 缓存所有核心都可以使用。”