Ant*_*ony 2 cpu intel cpu-cache
鉴于 CPU 现在是多核的并且有自己的 L1/L2 缓存,我很好奇 L3 缓存是如何组织的,因为它由多个内核共享。我会想象,如果我们有 4 个内核,那么 L3 缓存将包含 4 个页面的数据,每个页面对应于特定内核引用的内存区域。假设我有点正确,就这样吗?例如,它可以将这些页面中的每一个划分为子页面。这样,当多个线程在同一个内核上运行时,每个线程都可以在其中一个子页面中找到它们的数据。我只是突然想到了这个,所以我非常有兴趣让自己了解幕后真正发生的事情。任何人都可以分享他们的见解或为我提供一个链接来治愈我的无知吗?
提前谢谢了。
单插槽芯片中有单个(切片)L3 缓存,以及多个 L2 缓存(每个真实物理核心一个)。L3缓存以64字节大小的段(缓存行)缓存数据,L3和不同L2/L1之间(以及NUMA/ccNUMA多路系统中的几个芯片之间也有特殊的Cache一致性协议);它跟踪哪个缓存线是实际的,哪个缓存线在几个缓存之间共享,这些缓存线刚刚被修改(并且应该从其他缓存中失效)。一些协议(缓存行可能的状态和状态转换):https://en.wikipedia.org/wiki/MESI_protocol,https://en.wikipedia.org/wiki/MESIF_protocol, https://en.wikipedia.org /wiki/MOESI_protocol
在较旧的芯片(Core 2 的时代)中,缓存一致性在共享总线上被监听,现在在目录的帮助下进行检查。
在现实生活中,L3 不仅仅是“单个”,而是分成几个切片,每个切片都有高速接入端口。有一些基于物理地址选择切片的方法,它允许多核系统在每一时刻进行多次访问(每次访问将通过未公开的方法定向到某个切片;当两个内核使用相同的物理地址时,它们的访问将被服务通过相同的切片或将进行缓存一致性协议检查的切片)。有关 L3 缓存切片的信息在几篇论文中被颠倒:
随着最近的芯片程序员能够在应用程序“缓存分配技术”(v4 系列)之间划分 L3 缓存:https: //software.intel.com/en-us/articles/introduction-to-cache-allocation-technology https: //software.intel.com/en-us/articles/introduction-to-code-and-data-prioritization-with-usage-models https://danluu.com/intel-cat/ https://lwn.net /文章/659161/