Amiya · 2023年03月29日 · 香港

ARM64 MPAM资源隔离特性介绍

作者:行信

特性介绍

MPAM 是 ARM v8.4引入的Cache QoS和 内存带宽QoS功能特性,是目前业界与之最接近的是 intel 的 RDT 特性。引入MPAM功能特性,主要是为了解决CPU访存过程中因为共享资源的竞争带来的关键性业务性能下降或者系统整体性能下降的问题,这对于混部业务的部署来说,尤为重要。
image.png
mpam资源控制框图 参考DDI0598B手册,可以知悉mpam先比X86 RDT对资源的控制拥有更丰富的控制方式和手段。

  • 针对L3cache,支持优先级配置和按照ways的划分方式,高优先级的程序拥有优先占有cache资源的权利。x86只支持ways方式划分。
  • 针对MB,拥有更低的控制粒度和min_mb设置,例如某arm64机器的控制粒度为2%,最小为2%, 而x86最小为10%,控制粒度为10%。
  • 针对VM, 支持虚拟内部划分共享资源,x86不支持。
  • 支持io resource隔离,以控制smmu设备对cache资源的占用,x86不支持。
  • 更好的资源信息提供手段。arm采用acpi方式上报mpam硬件资源信息,x86是寄存器访问方式。arm可拓展性更好。

但是相比x86 rdt,mpam并不是完全占上风,例如某arm64机器上可用监控组(rmid)数目远小于intel机器,如下表是某arm64机器和intel机器上的一个粗略对比,需要知晓的是该表不能代表所有支持mpam的arm64机器上所拥有的资源配置方面的能力,得结合具体芯片设计情况来看。

image.png

注:以上特性的支持需依据实际硬件设计为准 (CDP: cacd'd'd'd'dhe code & code 资源配置)。X86机器型号:Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz

使用方法和关键接口介绍

在某arm64机器上若想使用mpam功能的话,需要在启动项增加mpam功能支持。

1、arm机器上支持mpam功能需要在启动项增加对mpam的支持
    mpam=acpi or mpam // 根据实际代码约定为准
   
2、挂载
mount -t resctrl resctrl /sys/fs/resctrl/

3、创建控制组  #用于划分资源隔离组,一共16个
mkdir /sys/fs/resctrl/p1

4、创建监控组  #用于进一步细化对资源隔离组的监控
mkdir /sys/fs/resctrl/p1/mon_groups

5、配置 & 查看L3 cache ways大小
#cat /sys/fs/resctrl/p1/schemata
L3:0=7fff;1=7fff;2=7fff;3=7fff #表示每一个node节点15ways
#echo ”L3:0=1;1=1;2=1;3=1" > /sys/fs/resctrl/p1/schemata
#cat /sys/fs/resctrl/p1/schemata
L3:0=1;1=1;2=1;3=1

6、配置 & 查看带宽占比大小
#cat schemata
MB:0=100;1=100;2=100;3=100  #带宽占比最大为100%
#echo "MB:0=10;1=10;2=10;3=10" > schemata
#cat schemata
MB:0=10;1=10;2=10;3=10      # 配置占比为10%

7、查看L3 cache和MB监控值
#cat mon_data/mon_L3_00     # node 0
395264
cat mon_data/mon_L3_01      # node 1
296960
cat mon_data/mon_L3_02      # node 2
390144
cat mon_data/mon_L3_03      # node 3
459776

#cat mon_data/mon_MB_00     # node 0下带宽速率MB/s
2264
#cat mon_data/mon_MB_01
2072
#cat mon_data/mon_MB_02
1832
#cat mon_data/mon_MB_03
112

挂载后,可以在/sys/fs/resctrl目录下看到如下关键性文件和目录:

  • cpus:当前cpu bit mask,bit 1表示包含,bit 0表示不包括;
  • cpus_list :线上当前cpu范围,例如1-15,和cpus对应一致;
  • info目录:mpam支持的资源信息目录;
  • mon_data目录:实时显示资源的使用情况;
  • mon_groups目录:可以理解为子组,用于细分监测;
  • schemata : 组内配置的资源MB和cache的分配接口;
  • tasks:需要监控和控制的进程;

mpam资源隔离功能验证

L3 cache

在不考虑干扰因素的情况下,L3 cache按照ways的方式配置,ways总的大小为15ways, 通过schemata接口配置ways的大小,mon\_data/mon\_L3_0x接口查看cache的使用值,并与理想的cache ways大小进行对比。

L3 cache配置实际占有cache容量测试

numactl -m 0 ./bw_mem -P 8 -N 4 10240M rd

image.png结论: 抛开系统其它程序占用L3 cache之外, cache ways的配置在无其他干扰的情况下是合理的,从上图中可以看出通过配置cache的ways, 测试程序使用的cache大小随着ways的变小而变少,此外也需要说明的是,选取测试程序cache占有量并不和ideal有一定出入,并非监控值不对,而是测试过程中使用测试用例未设定好压力, 导致cache占用量不及预期。

L3 cache配置对mem latency变化的测试

latency作为一个重要的性能指标,在一些对时延敏感的场景来说,有很重要的参考作用,此处使用mem-lat作为测试工具, 测试cache在不同的ways下,内存latency的分布情况,也从侧面验证mpam对cache的隔离功能。

#设置步长为512字节
numactl -C 10 -m 0 ./lat_mem_rd -N 1 -P 1 145M 512

image.png
结论: 通过测试不同ways下的内存latancy, 可以看出随着cache ways的增加,在一定范围内,latency明显逐渐减少。

L3 cache抗干扰配置功能测试

默认配置项 控制组P1: L3:2=7FF0 控制组P2: 作为干扰项。 测试两种情况: 1、cache ways无重合L3:2=0001~17FF, 2、cache ways一直重重叠L3:2=1000~7FF1(用于测试共享cache ways情况下mpam对cache的抗干扰能力摸底。)

P1: numactl -N 2 -m 2 ./bw_mem -P 16 -N 300 128M rd
P2: numactl -N 2 -m 2 stress-ng --cache 10 --aggressive

image.png
结论:

  • 随着干扰项P2组cache ways的增多,P1组cache occupancy逐渐减少
  • 干扰项P2 cache ways的配置在overlap和非overlap配置下,P1组cache occupancy明显overlap少于非overlap, 并且overlap越多,降幅越明显。
  • 当干扰项P2 cache ways <= 4时, P1组cache occupancy下降幅度处于少于10%左右范围。
  • 当干扰项P2 cache ways明显增多时,尤其是overlap增加时,降幅明显。

注:随着干扰项P2 ovlerlap增多,造成的cache miss越多,P1 cache occupancy自身波动也越来越大。

memory bandwidth

带宽控制通过配置带宽占比实现,配置最小值为2%,最大值为100%,配置粒度为2%, 但是由于控制精度的问题,不建议按照如此小的配置粒度进行配置, 此处设置带宽控制粒度为4%。通过调节带宽的占比,由100%逐渐降低为2%左右。

单cpu MB配置功能测试

#workload
numactl -m 2 -C 50 bw_mem -P 1 -N 10 124M rd

image.png结论: 从上图来看,单cpu带宽20%左右就到达饱和状态,所以后续继续增加带宽占比并不起作用, 此外从monitor监控值来看,监控值比实测值低30%左右。

单node MB配置功能测试

#workload
numactl -m 2 -C 48-71 bw_mem -P 24 -N 5 124M rd

image.png
结论: 从上图中可以看出,带宽控制效果通过MB monitor与实际workload测试结果存在一定偏差,监控带宽和测试值有大约30%左右的下降。 但是从抑制角度来看,效果是明显的,这说明MB的配置和监控是有效的,且带宽有效配置占比范围为24%~80%左右。

all node MB配置功能测试

#workload
numactl -C 0-95 bw_mem -P 96 -N 10 124M rd

image.png
结论: 从上图可以看出,无论是单node下的MB配置验证还是all node下的带宽配置验证,通过mpam功能对带宽限制效果是较为明显的,但是和x86相比,优势也有,缺陷也有,优点在配置粒度更小,带宽有效配置占比范围更大,为24%~80%左右, 缺陷在于monitor值明显小于实测值,相比实测值,最少能少30%左右,而x86 rdt实测和监控值差异较小,不到8%。

模拟混部cache隔离特性验证

在此之前,对mpam的cache和mb都有过隔离特性的测试, 从测试中可以看出带宽并非导致性能瓶颈的绝对性因素,此外也考虑带宽控制精度的问题, 所以此处测试只考虑cache的混部隔离情况。 按照在L3 cache验证《L3 cache抗干扰配置功能测试》小节中,按照cache不衰减超过一定比例的原则分配cache ways,具体分配如下:

在线:
L3:0=7ff0;1=7ff0;2=7ff0;3=7ff0

离线:
L3:0=f;1=f;2=f;3=f

此处以SPECjbb2015模拟在线环境,stress-ng作为干扰源,模拟离线环境,在大约<200s的时间内,SPECjbb2015和stress-ng共享L3cache所有资源,在大约>=200s后,开始隔离在线和离线L3 cache资源的使用。
image.png

注:此测试过程中未考虑对cgroup对cpu资源使用的划分。 结论: 从上图中可以看出,在L3 cache资源共享的情况下,离线资源对在线资源干扰明显,在对L3 cache资源进行隔离后,一方面离线得到了持续有效的压制,L3 cache占有率大幅下降,另一方面在线性能提升明显,cache资源的占有率提升35%左右。

后记

限于篇幅,本文只介绍了mpam的基本使用,在实际的生产环境中,探索最佳的mpam配比仍然是一个很值得摸索的点,此外mpam在控制资源例如带宽,iommu方面功能存在的缺陷是不言而喻的,若后期两者若都能做到预想的效果,mpam拥有的实力将更加不容小觑,让我们一起期待吧。

文章来源:龙蜥社区
欢迎大家点赞留言,更多Arm技术文章动态请关注极术社区Arm技术专栏欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
23470
内容数
937
Arm相关的技术博客,提供最新Arm技术干货,欢迎关注
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息