Kernel 4.14的RDT配置

之前发过一个帖子介绍了RDT在Kernel4.10中的使用方法,当kernel迭代到4.14之后,相对应的接口有了变化,最主要的就是增加了对于CMT和MBM这类监控接口。同时,由于上面提及的帖子还没有介绍CDP方面的内容,这次就一并补上。

需要说明的是,目前可以使用RDT部分的功能的CPU仅限于Xeon V4 broadwell和Xeon V5 skylake。其中V4硬件上不支持MBA也就是对内存带宽的分配,除此之外不需要任何处理;而不知是处于什么目的,对于V5的支持,git上的历史记录是先通过一个提交实现再通过一个提交关闭的,你需要关注一下更新列表就能很简单的将V5 CPU上的相应功能全部打开。

具体的内核便宜选项相对4.10版本没有任何变化,这里就不再累述,您可以直接参考我之前的帖子。便宜好内核之后直接启动新的内核。

几个术语

COS: class of service可以理解为CDP、CAT和MBA的策略打包,策略都必须绑定一个COS之后才能启用。

RMID:resource monitor ID CMP和MBM的策略打包,类似COS,监控器也需要打包。

LLC: last level cache,严格意义上的LLC并不等价于三级缓存L3,但对于本文来说LLC可以与L3混为一谈。

【补漏】CDP的使用

由于当下的架构设计使得整个CPU socket上的所有核心虽然独享自己的一级、二级缓存但都分享同一块三级缓存,而且事实上各个核心对于三级缓存的访问是透明的,严格意义上这种设定会导致安全问题。而CDP就给了用户这样一个接口,它允许用户将不同的指令三级缓存和数据三级缓存分开来存放在不同的缓存流水线中,从物理上杜绝了某些不安全的核心访问敏感数据的可能性。

mount -t resctrl resctrl [-o cdp] /sys/fs/resctrl

加上-o cdp选项之后就会开启系统对于CDP的支持。需要注意的是,RDT的实现是有一个COS数量的限制的,基于CPU型号的不同,skylake xeon是16个 ,由于CDP的开启需要将指令缓存和数据缓存分开来算作两个COS,用户可用的COS减半。

开启CDP之后,对于L3的配置会有L3DATA和L3CODE两种

# cat /sys/fs/resctrl/schemata 
L3DATA:0=3ff;1=3ff 
L3CODE:0=3ff;1=3ff
...

ps: 对于使用pqos命令调用RDT的用户可以通过如下命令开启系统的CDP支持

# pqos -R l3cdp-on

Monitor group

monitor group是4.14新加的内容,用法同样也是像极了cgroup的那种“建目录+写进程ID到目录下的task文件”方式。

# cd /sys/fs/resctrl
# mkdir mon_groups/m01 #建立m01的group
# mkdir mon_groups/m02 #建立m02的group

# echo 3478 > /sys/fs/resctrl/mon_groups/m01/tasks # pid 3478 加入m01
# echo 2467 > /sys/fs/resctrl/mon_groups/m02/tasks # pid 2467 加入m02

# cat /sys/fs/resctrl/mon_groups/m01/mon_L3_00/llc_occupancy
31234000  # m01 的L3实时占用情况
# cat /sys/fs/resctrl/mon_groups/m02/mon_L3_00/llc_occupancy
31234000 # m02 的L3实时占用

同样,受CPU硬件rmid数量上的限制,monitor group也是有数量上限的,/sys/fs/resctrl/info/L3/num_rmids 文件可以获得平台允许的最大mon group数量。

推荐阅读:
CPU各级缓存

被问起CPU的各级缓存,才想起

PMU Event counter的使用状况检测

题目用中文反而有点绕,How

AMD Rome benchmark数据到架构特征推导

这几天,拿到了一套最新的AMD

一个测试性能不稳定的问题

经常会通过一些通用的测试工具测

发表评论

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

请补全下列算式: *

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