Sandy-Bridge E Xeon CPU 的所有内核是否共享 L3 缓存?

Dan*_*aum 12 performance cache xeon

在一个相关的问题中,我询问了双 CPU 系统在将 L3 缓存加倍方面的好处。

但是,我注意到 Xeon E5-2600 系列 CPU 的每个内核恰好具有2.5 MB 的 L3 缓存

这让我相信操作系统为每个内核保留了 2.5 MB 的 L3 缓存。但是,我也有一个矛盾的印象,即 L3 缓存在所有内核之间共享。令人惊讶的是,关于这一点的信息或讨论很少。

我主要担心的是低优先级的后台应用程序是否会“占用”L3 缓存并降低更高优先级的前台应用程序的性能。我有两个具体的性能问题激发了这个问题。

  1. 在我当前的 VS 2008 开发系统上编译某个 C++ 程序需要 25 分钟,而在另一个系统上编译速度要快得多,在具有相同设置的 VS 2008 上只需要 5 分钟 - 尽管事实上我有一个接近高端的 i7- 970 CPU 和足够的内存。

  2. 程序通常需要长达 20 秒才能在我的系统上运行(即显示它们的主窗口);并且在相关说明中,尽管我尝试限制上下文菜单条目(目前可能还有 10默认)。

多年来,我的系统肯定加载了大量我安装(和卸载)的应用程序,但我仍尽力简化系统。

我还有很多低优先级的后台应用程序在运行;特别是像 CrashPlan 这样的冗余云备份软件,在这个 6 核 12 线程系统上,它通常加起来使用大约 25% 的总 CPU 使用率。

我将得到一台新电脑。我知道我将继续运行许多后台应用程序,并安装/卸载许多程序。如果我认为获得一个双 CPU 系统不仅使内核加倍而且 L3 缓存加倍将有助于克服可怕的 C++ 编译器性能和一般系统减速,我会很乐意这样做。

即使有许多程序和后台应用程序,高端系统也应该没有理由运行如此缓慢。但是,如果无论我给系统提供多少 CPU 功率和 L3 缓存,我的问题都会发生,仅仅因为我确实安装并运行了这么多程序和后台应用程序,我不想在双 CPU 上浪费 2,500 美元的额外费用无助于解决我的问题的系统。

任何建议,特别是关于我关于 L3 缓存是否在所有内核之间共享的问题(这样低优先级的后台应用程序可能会占用 L3 缓存,减慢更高优先级的程序),或者更确切地说,它是否与单个内核相关联核心,将不胜感激。

Dav*_*rtz 15

在这些 CPU 上,每个物理内核都有自己的 L2 缓存。L3 缓存由所有内核共享并且是包容性的——也就是说,驻留在任何内核的 L2 缓存中的任何数据也驻留在 L3 缓存中。

虽然这似乎是对 L3 空间的浪费,但它实际上使 L3 对加速内核间内存操作非常宝贵。L3 缓存的主要目的是充当内核的交换机和暂存区。例如,如果一个内核想知道一个内存区域是否可能被另一个内核缓存,它可以检查 L3 缓存。如果信息由一个内核处理,而下一个需要由另一个内核处理,则它们通过 L3 缓存而不是较慢的片外存储器传递。除此之外,它的性能影响并不大,除了不寻常的算法——L2 缓存对于小东西来说足够大,而 L3 缓存对于大东西来说太小了。

因此,虽然每个内核确实有自己的 256KB L2 缓存,并且在 L3 缓存中有效地保留了 256KB,但平衡由所有内核共享。其他内核中不太重要的活动可能会损害从使用 L3 空间中受益的更重要任务的性能。但是由于我提到的原因,它在实践中通常不会产生显着影响,除了优化“批量数据”操作(例如压缩和扫描)以最大程度地减少缓存污染之外,通常不值得担心。(例如,使用非时间操作。)