在一个相关问题我询问了双 CPU 系统在增加 L3 缓存方面的好处。
然而,我注意到 Xeon E5-2600 系列 CPU 确实2.5 MB L3 缓存每个核心。
这让我相信操作系统为每个核心保留了 2.5 MB 的 L3 缓存。然而,我也有矛盾的印象,即 L3 缓存共享在所有核心中。关于这一点的信息或讨论出奇地少。
我主要担心的是低优先级的后台应用程序是否会“霸占”L3 缓存并降低高优先级前台应用程序的性能。我有两个具体的性能问题促使我提出这个问题。
在我当前的 VS 2008 开发系统上,编译某个 C++ 程序需要 25 分钟,而在另一个系统上,速度要快得多,在 VS 2008 上采用相同设置只需要 5 分钟 - 尽管我拥有近乎高端的 i7-970 CPU 和足够的 RAM。
在我的系统上,程序通常需要 20 秒才能运行(即显示其主窗口);另请注意,尽管我尝试限制上下文菜单条目(目前可能除了默认值之外还有 10 个其他条目),但 Windows shell 仍需要 10 秒才能显示 Windows 资源管理器上下文菜单(相关行为也需要大约同样长的时间)。
我的系统确实装载了大量这些年来我安装(和卸载)的应用程序,但我仍然尽力简化系统。
我还运行了许多低优先级的后台应用程序;特别是冗余云备份软件(例如 CrashPlan),它们通常会占用此 6 核 12 线程系统上总 CPU 利用率的约 25%。
我将购买一台新电脑。我知道我将继续运行许多后台应用程序,并安装/卸载许多程序。如果我认为购买双 CPU 系统(不仅内核数量增加一倍,而且 L3 缓存也增加一倍)将有助于克服糟糕的 C++ 编译器性能和总体系统速度变慢的问题,我会很乐意这么做。
那里应该这不是高端系统运行如此缓慢的原因,即使运行了许多程序和后台应用程序也是如此。但如果无论我为系统提供多少 CPU 能力和 L3 缓存,问题都会出现,仅仅是因为我安装并运行了如此多的程序和后台应用程序,那么我不想在双 CPU 系统上浪费额外的 2,500 美元,因为这无法解决我的问题。
任何建议,特别是关于我的问题,即 L3 缓存是否在所有核心之间共享(这样低优先级的后台应用程序可能会占用 L3 缓存,从而减慢高优先级程序的速度),或者更确切地说它是否与单个核心绑定,都将不胜感激。
答案1
在这些 CPU 上,每个物理核心都有自己的 L2 缓存。L3 缓存由所有核心共享,并且是包容性的 - 也就是说,任何核心的 L2 缓存中的任何数据也驻留在 L3 缓存中。
虽然这看起来是在浪费 L3 空间,但实际上 L3 对于加速内核间内存操作非常有用。L3 缓存的主要用途是充当内核的交换机和暂存区。例如,如果一个内核想知道某个内存区域是否可能被另一个内核缓存,它可以检查 L3 缓存。如果信息由一个内核处理,接下来需要由另一个内核处理,它们会通过 L3 缓存而不是较慢的片外内存进行处理。除此之外,除了不常见的算法外,它对性能的影响并不大——L2 缓存足够大,可以处理小东西,而 L3 缓存太小,无法处理大东西。
因此,虽然每个核心都有自己的 256KB L2 缓存,并且在 L3 缓存中有效保留了 256KB,但所有核心共享剩余空间。其他核心中不太重要的活动可能会损害受益于使用 L3 空间的更重要任务的性能。但出于我提到的原因,这在实践中通常不会产生重大影响,并且除了优化“批量数据”操作(例如压缩和扫描)以最大限度地减少缓存污染之外,通常不值得担心。(例如,使用非时间操作。)
答案2
据我所知,所有级别的缓存都是直接在芯片上实现的,并且 L2 和 L3 是同一个(只有 Intel 认识到了差异,AMD 将它们结合在一起)。考虑到这一点,我可以想象 CPU 上的 L3 缓存不会在双插槽主板上的 CPU 之间共享。考虑到通常每个 CPU 都有单独的 RAM 内存通道,这也是有道理的。
如果我错了,请纠正我。