禁止CPU核心使用LL缓存



我有以下问题:我有一个低延迟应用程序运行在核心0上,一个常规应用程序运行在核心1上。我想确保core 0应用程序获得尽可能多的缓存,因此,我想让core 1绕过L3缓存(根本不使用它),直接在内存中获取数据。

是否有其他方法可以使core 0应用程序在使用L3缓存时获得优先级?

部分Intel cpu支持在不同的工作负载或虚拟机之间对L3 cache进行分区,cache Allocation Technology (CAT)。它从Haswell Xeon (v3)开始支持,显然是第11代台式机/笔记本电脑cpu。

假设您需要让每个工作负载都有一些L3,甚至可能在Skylake-Xeon和后来的L3不包括在内的地方,但是您可能能够给它一个相当小的份额,仍然实现您的目标。


更一般地说,https://github.com/intel/intel-cmt-cat有工具(用于Linux和FreeBSD)来管理它和英特尔现在称为"资源总监技术(RDT)"的其他部分;用于监控、CAT和内存带宽分配。它也有一个按CPU划分的特性表。

你所描述的在桌面英特尔CPU(或Skylake之前的至强)上是不可能的,因为它们使用包容性L3缓存:如果一行位于L3,则只能位于L2/L1(至少是标签,而不是数据,如果核心处于Modified或Exclusive状态)。Skylake-X和后来的xeon有不包含的L3,所以理论上是可能的;IDK如果CAT允许你给一组核心零L3。


我不知道是否有AMD或ARM的cpu有类似的东西。我只是碰巧知道英特尔的硬件支持这个,而不是我自己去寻找或使用的东西。

在AMD Epyc上:如果您可以将低延迟应用程序移动到一个独立的核心复核中,那将是很好的。

在Zen 2中,4个内核共享16 MB的L3切片。在Zen 3中,8个内核共享一个32 MB的切片。确保您的低延迟应用程序是唯一可以接触到它运行的核心的L3切片的应用程序。

最新更新