Intel RDT

RDT技术,全称为Resource Director Technology,Intel跟随4代Xeon(Broadwell)发布了该技术。该技术旨在通过一系列的CPU指令从而允许用户直接对每个CPU核心(附加了HT技术后为每个逻辑核心)的L3缓存(LLC)以及内存带宽进行监控和分配。

Intel rdt modules

上图为整个RDT的组成部分。

对于处在下面的内存带宽监控和分配来说,由于事实上内存带宽分配的功能还没有实现,现阶段仅存一个基于核心的内存带宽技术器可以使用。也就是说:目前可以通过CPU指令直接查看每个逻辑核心的实时内存带宽大小,方便了开发者在多进程,多处理器的场景中找出内存带宽的瓶颈。

对于LLC来说,Intel提供了CMT技术可以直接监控每个核心的LLC使用量,访问的命中、miss统计等关键性指标数据。而对应的CAT则可以对现有的LLC划分多个区块并在这些区块的基础上控制每个核心访问的区块从而实现了为不同的核心分配不同大小LLC的目的。这一部分的功能是相对完整且闭环的。

当下的X86架构的处理器已经很难通过频率的提升来提升性能了,似乎使用更多的高速缓存成为了一种简单粗暴的方法,比如V4版本的xeon已经采用了40M的LLC。不同于基于CPU物理核心的L1/L2缓存,LLC的频率较低,而且LLC是在所有的核心之间共享的。那显然,在多个核心都达到了高负载的场景之后,LLC势必会面临争抢。

SPECcpu LLC

摘自09年Jacob Machina的论文Predicting Cache Needs and Cache Sensitivity for Applications in Cloud Computing on CMP Servers with Configurable Caches

上图为SPECcpu2000的不同测试用例在不同的LLC下测试结果的线性变化。由于此文发表于09年,最高的LLC也仅仅只有4M而已,但从图中可以明显的看出来,作为线性最为陡峭的MCF测试和最平坦的SIXTRACK测试。可以理解为:MCF对于LLC的大小表现的最为敏感,而ST则相反。那假设一颗CPU的不同核心上同时进行了MCF和ST测试,最合理的方式是给MCF分配大部分的LLC,仅分配够用的LLC给ST即可。

问题来了,如何简单的使用CAT技术?

目前,Linux内核还没有正式接受CAT技术,在之前的Kernel 4.4-rc上曾经加入了CAT技术,不过在相对稳定且功能完善的rc7上被无理由直接剔除(其实开源社区的勾心斗角一点也不比官场差,只有更严重)。在这个版本上,CAT技术是通过一个独立的cgroup选项——intel_rdt来实现进程级别对LLC的手工分配。好吧,其实作为Litrin本人来讲,这个方式也显得有点奇怪。

紧接着对应的功能稍加修改就被提交到了Kernel 4.10,直到截稿时该版本还没有正式发布,最新的rc8还保留着对应的rdt功能。我们这里只能期望Kernel团队不要再次霸道了。

如果对于上述两种rc版本的kernel还存有疑虑的话,其实Intel自己早已发布了一个开源工具包,它允许用户绕开内核直接调度LLC。具体的发布地址为:https://github.com/01org/intel-cmt-cat
此软件包包含了一个pqos工具允许用户直接调试CMT/CAT,同时还提供了一个libpqos链接库允许开发者自行开发。

此外,还有一个同为Intel的开源工具包:Intel PCM https://github.com/opcm/pcm 也支持用户态的CAT/CMT管理,这里也就不再详述了。

推荐阅读:
经常会通过一些通用的测试工具测
首先,提个问题:64bit x
接到一个黑盒的case:一套双

“Intel RDT”的6个回复

  1. intel是不是只有服务器级别的处理器支持RDT技术,比如至强

    如何查看是否支持呢RDT呢

    i5-6440EQ也是skylake架构,但是我允许pqos,就提示好多不支持

    1. 是的,RDT目前还是仅对Intel的服务器CPU开放。
      另:AMD的最新架构也有自己的RDT技术,且接口跟Intel保持一致,不过同样仅针对服务器CPU。

  2. (1)linux下如何bypass intel 集成gpu对 L3 cache的访问?
    (2)如何关闭L3 cache,是在集成gpu驱动修改,还是在cache相关的内核代码修改?

    麻烦您指点一二!
    多谢!!!

    1. 首先要说的是RDT技术本身是架构在L2 cache和imc之间的,由于gpu或者PCIe总线对内存地址的访问并不会使用L2。接着要说的是对于L1~L3的访问本身对kernel来说是透明的,kernel无法直接影响CPU对各级cache的访问行为。所以你提到的两个场景并不存在。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请补全下列算式: *

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据