MPAM (Memory System Resource Partitioning and Monitoring)是Armv8.4的feature,用于cache和内存带宽的监控和限制。截至现在,该feature在linux kernel的实现还在推进,最新一版参见https://git.kernel.org/pub/scm/linux/kernel/git/morse/linux.git/log/?h=mpam/snapshot/v6.5-rc1。要了解mpam的原理参见https://developer.arm.com/documentation/ddi0598/latest/
MPAM原理
mpam是和intel rdt类似的feature。mpam的目的是在进程级别对cache和内存带宽的使用做限制。要实现这个目标就要搞清楚几个问题:
- 谁来发出限制请求?
- 谁来执行?
- 限制谁?
- 怎么限制?
计算机里干活的是PE,这个请求自然由它来担任,当然也可以是device。具体执行部件是cache和MSC(Memory-System Component)。被限制的主体自然是前面提到的进程。怎么限制是指策略,比如按百分比限制内存带宽,按way限制cache。搞清楚这几个问题,mpam实现的基本框架也就出来了:首先构建进程ID与限制策略的映射,这里对于每个需要限制的pid都对应一个PARTID;将PARTID保存在PE的某个寄存器里(MPAMn_ELx),当PE访问cache或MSC时携带该信息,cache或MSC收到该信息就会找到对应的策略进行限制。为了可以在用户态使用mpam,kernel复用了intel rdt的resctlfs。下面简单展示一下如何使用mpam。放一张图在这里:
MPAM的使用
目前只有最新的arm机器可能带有MPAM的硬件支持,能够支持MPAM的OS可能只有欧拉和龙蜥。本测试基于倚天+龙蜥。
1. 安装龙蜥OS;
2. 查看是否存在/sys/fs/resctrl/,如果没有可能时没kernel config没打开;
3. 如果resctrlfs里面是空的,需要先mount,
mount -t resctrl resctrl /sys/fs/resctrl
之后会看到在该目录下自动生成多个文件。
4,在resctrl下创建一个目录
# mkdir test # ls test cpus cpus_list id mode mon_data mon_groups schemata size tasks
这里最重要的是tasks和schemata,tasks用于存放需要做限制的进程pid,schemata用于设置限制策略。
查看schemata:
# cat schemata MB:0= 100;1= 100 L3:0=ffff;1=ffff
MB代表memory bandwidth,后面0,1代表numa node,100代表100%,也就是内存带宽的百分比; L3代表L3cache,0,1代表numa node,f代表bitmap,也就是每个cache有16way,全1代表占用所有way。
5. 修改schemata
# echo "MB:0= 50;1= 50" > schemata # echo "L3:0=1;1=1" > schemata
现在我改成占用50%的内存带宽和1路cache。
6. 加入进程ID
准备工作好了,现在开始对task进行限制。
当前所有的pid默认都放在resctrl top dir下面的tasks里面,我们可以从那里面找一个进程写到本层目录的tasks里面。
比如100
# cat ../tasks | grep 100 100 1000 1001 # echo 100 > tasks
# cat tasks
100 # cat ../tasks | grep 100 1000 1001
可见一旦我们把一个pid写到某个tasks里面,pid就从原来的tasks里面消失了。这是正确的,毕竟对一个task实施两种策略是不合理的。
这样就完成了对task的限制操作,非常简单。
MPAM源码分析
进入到最难的部分,源码分析。首先clone代码:
git clone https://git.kernel.org/pub/scm/linux/kernel/git/morse/linux.git git checkout mpam_6.5_rc1
Jams的patch有上百个,看patch非常耗时,参考https://neoverse-reference-design.docs.arm.com/en/main/mpam/mpam-resctrl.html可以更好的理解mpam的实现脉络。
未完待续。。。
标签:kernel,tasks,mpam,cache,源码,schemata,100 From: https://www.cnblogs.com/banshanjushi/p/17696429.html