31

啥都吃的豆芽 · 2023年04月07日 · 北京市

龙蜥 ANCK 5.10 倚天平台 MPAM 用户手册

一、引言

MPAM(Memory System Resource Partitioning and Monitoring)是 ARM v8 引入的新特性,对标 x86 的 RDT 特性,可以实现对 Cache、内存带宽、SMMU 等资源的分配及监控功能。该特性可以从硬件层面减少不同工作负载之间的性能干扰,确保高优先级任务性能的稳定性,在虚拟化、混部等业务中取得了良好的效果。

二、MPAM特性简介

2.1 MPAM整体框架

MPAM 特性的整体框架如图1所示。其中,MPAM 硬件上是通过 MSC(Memory System Component)实现的。MPAM 将提供资源管理功能组件称为 MSC,可以对资源请求进行处理。完整的系统模型中一般拥有多个 MSC,分别负责管理不同资源。MPAM 为资源访问请求添加了 PARTID 和 PMG 标识,MSC 可以对该标识进行区分处理,进而实现资源的隔离和监控功能。

根据 MPAM 手册的介绍,除了基本的 Cache 和内存带宽资源隔离和监控外,MPAM 可以实现比 Intel RDT 更为丰富的资源隔离和监控特性,包括:

  • 提供对 SMMU 资源的支持
  • 提供对 Cache 和内存带宽资源进行最大最小值限制
  • 提供基于优先级的资源隔离支持

image.png

MPAM 驱动作为核心部分,对下完成了 MPAM 硬件功能的访问和设置,包括 MPAM 资源的获取和初始化、MPAM 中断初始化以及对 MPAM 相关寄存器的读写,对上则与 resctrl fs 用户态接口层进行交互。

resctrl fs 接口层以资源调配 group 为单位提供了资源隔离和监控的用户态接口,并通过 info 接口暴露 MPAM 硬件相关信息。此外,其底层还完成了 PARTID 和 PMG 的分配和回收。

2.2 MPAM资源隔离特性

MPAM 资源隔离特性的关键是由 MSC 组件维护的资源配置表。资源配置表中包含了不同 PARTID 和对应资源分配方案的映射。

image.png

对于每一次资源请求,该资源对应的 MSC 会通过请求中的 PARTID 查找自身的配置表,然后按照表中与该 PARTID 相对应的方案进行资源分配。这样,通过将不同业务应用或VM与不同PARTID相绑定,就可以达到资源隔离的目的。

通过图2左侧部分可以看到,不同资源分配方案的表示方法是有所区别的,这与资源的拆分方式不同有关。Cache 资源使用了 Bit Map,每一bit表示了对应的 Cache way 是否能够被分配;内存带宽资源则使用了百分比,表示该方案能够分配的内存带宽比例。

2.3 MPAM资源监控特性

资源监控可以看做是 MPAM 在支持资源隔离功能后的附加功能。MPAM 除了拥有资源隔离组件外,还拥有一定数目的资源 monitor。资源 monitor 可以实现对特定标识的资源使用情况的监控。

为了实现对使用同一个 PARTID 的不同 task 分别进行资源监控,MPAM引入了PMG(Performance Monitoring Group)的概念。资源监控接口通过选取对应的 PARTID 和 PMG,即可获取到对应的资源使用情况。

image.png

2.4 龙蜥 OS 对倚天 MPAM 特性的支持

龙蜥 OS 5.10.134-12.al8 版本基于 resctrl 文件系统实现了对倚天芯片的 MPAM 特性的支持,同时保证了对 x86 RDT 特性和鲲鹏的 MPAM 特性的兼容。对应的代码仓库在https://gitee.com/anolis/cloud-kernel中。其中,MPAM 支持相关代码路径包括:

  • drivers/platform/mpam —— MPAM 驱动代码
  • drivers/acpi/arm64 —— MPAM ACPI 解析代码
  • fs/resctrl —— 用户态接口实现代码
  • arch/x86/kernel/cpu/resctrl —— x86 RDT 特性架构相关代码
  • drivers/staging/kunpeng/mpam —— 鲲鹏 MPAM 特性相关代码

目前,龙蜥 OS 针对倚天芯片提供了 L3 Cache 和内存带宽两种资源的资源隔离和监控接口。接口的主要特性如下:

  • 提供最大 64 个 PARTID 支持
  • 提供 4 个 monitor 支持
  • 支持 per-numa 的 16 way L3 CAT(Cache Allocation Technology)特性
  • 支持 per-numa 的 16 way L3 CDP(Code and Data Prioritization)特性
  • 支持 per-numa 的 L3 Cache 资源监控特性
  • 支持 per-numa 的粒度为 5% 的 MBA(Memory Bandwidth Allocation)特性(受硬件限制,该特性目前效果较差)
  • 支持 per-numa 的内存带宽资源监控特性
  • 支持 MPAM 寄存器错误中断检测

对应测试文档在https://openanolis.cn/sig/ARM\_ARCH\_SIG/doc/657742613244594693

三、MPAM的使用

3.1 开启MPAM

  1. 首先需要确保当前内核支持 MPAM 功能,需要设置CONFIG_ARM64_MPAMCONFIG_RESCTRL_FS
  2. 在 cmdline 或 grub.cfg 文件中添加mpam=acpi,使能 MPAM 功能;
  3. 系统启动后,需要手动挂载 resctrl 文件系统到 /sys/fs/resctrl 目录。
mount -t resctrl resctrl /sys/fs/resctrl

3.2 MPAM 用户态接口

MPAM 的用户态接口复用了 Intel RDT 功能的 resctrl 文件系统。resctrl 文件系统的目录结构如下图。

image.png

3.2.1 资源调配 group

开启 MPAM 功能后,操作系统中的每个进程(线程)都会与 resctrl 文件系统中的一个资源调配 group 相绑定。每个资源调配 group 在 MPAM 中对应着一个 PARTID。在 /sys/fs/resctrl 下新创建的每个目录将分别对应一个新的资源调配 group,每个资源调配 group 中会自动添加以下文件和目录:

|-- cpus
|-- cpus_list
|-- id
|-- mode
|-- mon_data
|-- mon_groups
|-- schemata
|-- size
`-- tasks

其中各文件和目录的作用为:

schemata:表示该 group 对各个资源的分配方案,可读写。

mon_data:该目录中各个文件包含了对各个资源的监控值,只读。

cpus:以 bitmask 的形式表示该 group 所控制的逻辑 CPU,可读写。

cpus_list: 与 cpus 含义一致,但以 range 的形式(如0-63)表示该 group 所控制的逻辑 CPU,可读写。

tasks:表示该 group 所控制的 task pid,可读写。

id:创建 group 时随机生成,用于唯一标识一个 group,只读。

mode:表示当前 group 的分配方式,目前仅支持 shareable 方式。

mon_groups: 该目录用于创建仅用于监控功能的子 group,暂不可用。

size:表示该 group 下各个资源所能使用的资源大小,只读。

观察 /sys/fs/resctrl 目录可以发现,该目录自带了一个资源调配 group。这个 group 是作为 MPAM 开启后各 cpu 和 task 使用的默认 group 使用的。该 group 默认可以实现对各资源 100% 的占用。

3.2.2 资源隔离与schemata文件

使用资源隔离特性的关键是 schemata 文件,schemata 中包含了对该 group 的资源分配方案。其基本格式为如下:

MB:0= 100;1=  80
L3:0=ffff;1=fff0

其中,

  • L3 cache 资源的分配以 bit mask 进行表示,L3:0=ffff;1=fff0表示所属该 group 的 cpu 和 task 可以分配到 NUMA 0 的 L3 cache 的完整 16 way,NUMA 1 的 L3 cache 的高 12 way。
  • 内存带宽资源的分配以百分比进行表示,MB:0=100;1=80表示所属该 group 的 cpu 和 task 可以分配到 NUMA 0 最多 100% 的内存带宽,NUMA 1 最多 80% 的内存带宽。

3.2.3 资源监控与mon_data目录

mon_data 目录下相关文件完成了 MPAM 的资源监控特性,倚天中 mon_data 目录结构如下:

mon_data
|-- mon_L3_00
|   `-- llc_occupancy
|-- mon_L3_01
|   `-- llc_occupancy
|-- mon_MB_00
|   `-- mbm_local_bytes
`-- mon_MB_01
    `-- mbm_local_bytes

其中,

  • L3 cache 资源监控对应着 mon_L3_<id> 目录,该目录下包含了对应 NUMA 节点下 L3 cache 资源的当前使用情况。目前该目录下只有 llc_occupancy 一个文件,该文件以byte为单位显示了当前 group 各个 task 的 L3 cache 用量。
  • 内存带宽资源监控对应着 mon_MB_<id> 目录,该目录下包含了对应 NUMA 节点下内存带宽资源的当前使用情况。目前该目录下只有 mbm_local_bytes 一个文件,该文件以 byte/s 为单位显示了当前 group 各个 task 的内存带宽统计值。

3.2.4 info目录

/sys/fs/resctrl 目录下除了包含一个默认 group 所需要的相关文件和目录外,还有一个 info 目录。info 目录中包含了当前机器能够支持 MPAM 扩展中资源分配和监测功能的详细信息。目前倚天机器上该目录中有以下内容:

info/
|-- L3
|   |-- bit_usage
|   |-- cbm_mask
|   |-- min_cbm_bits
|   |-- num_closids
|   `-- shareable_bits
|-- L3_MON
|   |-- max_threshold_occupancy
|   |-- mon_features
|   `-- num_rmids
|-- MB
|   |-- bandwidth_gran
|   |-- delay_linear
|   |-- min_bandwidth
|   `-- num_closids
|-- MB_MON
|   |-- mon_features
|   `-- num_rmids
`-- last_cmd_status
  • L3 目录包含了 L3 cache 资源隔离特性的相关信息,其中各文件及其含义为
    • bit_usaged:以 bitmask 的形式表示 L3 各 way 当前的使用情况,在倚天机器中,默认为0=XXXXXXXXXXXXXXXX;1=XXXXXXXXXXXXXXXX
    • cbm_mask:对应着 L3 cache 资源可以设置的最大 bitmask,同时该 mask 也对应着 100% 的 cache 资源占用。
    • min_cbm_bit:对 L3 cache 资源可以设置的最小 bit 数。
    • num_closids:L3 cache 资源所能够创建的最大 group 数目,该值包含了 resctrl 文件系统挂载后自带的默认group。
    • shareable_bits:以 bitmask 的形式表示 L3 cache 资源与其他实体(例如I/O)的共享情况。
  • L3_MON 目录包含了 L3 cache 资源监控特性的相关信息,其中各文件及其含义为
    • max_threshold_occupancy:资源监控 monitor 被释放之后可能无法立即使用,因为之前的 cache 占用会影响 monitor 结果的准确性。max_threshold_occupancy 用于配置可以真正释放 monitor 的 cache占用。
    • mon_features:显示 L3 cache 有哪些资源监控特性,与 mon_data/mon_L3_xx 中文件相对应。
    • num_rmids:可用的 monitor 数目,倚天机器该值为 4。
  • MB 目录包含了内存带宽资源隔离特性相关信息,其中各文件及其含义为:
    • bandwidth_gran:内存带宽设置的百分比粒度,倚天机器该值为 5。
    • delay_linear:与 Intel 机器中内存带宽资源隔离特性相关的值,倚天机器中默认为 true,即 1。
    • min_bandwidth:内存带宽百分比设置的最小值,与 bandwidth_gran 相等,倚天机器中该值为 5。
    • num_closids:内存带宽资源所能够创建的最大 group,该数目包含了 resctrl 文件系统的默认 group。
  • MB_MON 目录包含了内存带宽资源监控特性相关信息,其中各文件及其含义为:
    • mon_features:显示内存带宽有哪些资源监控特性,与 mon_data/mon_MB_xx 中文件相对应。
    • num_rmids:可用的 monitor 数目,倚天机器该值为 4。
  • last_cmd_status:文件中包含了相关指令所出现的问题,可以通过读取该指令获取 resctrl 文件系统中相关操作失败的原因。

3.3 MPAM 使用示例

3.3.1 配置两个资源调配 group

mount -t resctrl resctrl /sys/fs/resctrl
cd /sys/fs/resctrl
# 创建两个资源调配group p0和p1
mkdir p0 p1
# 令p0使用Node0的高12路L3 Cache,Node1的低12路L3 Cache
echo "L3:0=0xfff0;1=0x0fff" > /sys/fs/resctrl/p0/schemata
# 令p1使用Node0的低12路L3 Cache,Node1的高12路L3 Cache
echo "L3:0=0x0fff;1=0xfff0" > /sys/fs/resctrl/p1/schemata
# 限制p0和p1的MB上限不超过50%
echo "MB:0=50;1=50" > /sys/fs/resctrl/p0/schemata
echo "MB:0=50;1=50" > /sys/fs/resctrl/p1/schemata
# 读取两个文件
cat /sys/fs/resctrl/p0/schemata
cat /sys/fs/resctrl/p1/schemata

此时 /sys/fs/resctrl/p0/schemata 和 /sys/fs/resctrl/p1/schemata 两个文件中的内容分别为:

MB:0=50;1=50
L3:0=fff0;1=0fff
MB:0=50;1=50
L3:0=0fff;1=fff0

3.3.2 为指定进程/线程分配资源调配 group

以 3.3.1 中已创建的 p0 资源调配 group 为例,此处限制 pid 为 12345 的进程/线程使用 p0 资源调配 group 所限定的资源。需要注意的是,新创建的子进程将继承父进程的 PARTID 和 PMG 信息,但已创建的子进程将不受影响。

# 将pid 12345加入p0资源调配group
echo 12345 > /sys/fs/resctrl/p0/tasks

之后,pid 为 12345 的进程/线程将自动从 /sys/fs/resctrl/tasks 移动到 /sys/fs/resctrl/p0/tasks 文件中。

3.3.3 为指定cpu分配资源调配 group

# 将cpu 99、100、101移入p1资源调配group
echo "99-101" > /sys/fs/resctrl/p1/cpus_list
# 或者
echo "38,00000000,00000000,00000000" > /sys/fs/resctrl/p1/cpus_list

之后,cpu 99-101 将从 /sys/fs/resctrl/cpus_list 中移动到 /sys/fs/resctrl/p1/cpus_list 中。

3.3.4 读取 cache/内存带宽 的 monitor 值

仍然以 3.3.1 中创建的 p0 资源调配group为例,要获取 p0 资源组各进程的资源占用值,通过 cat 即可得到实时监控结果。

cat /sys/fs/resctrl/p0/mon_data/mon_L3_0*/llc_occupancy
cat /sys/fs/resctrl/p0/mon_data/mon_MB_0*/mbm_local_bytes

3.4 模拟混部L3 cache隔离

混部是 MPAM 资源隔离的一个重要应用场景。此处分别以 SPECjbb 2015 和 stress-ng 程序分别模拟云环境上广泛使用的 java 类在线作业上和离线作业,对 MPAM 的 L3 cache 隔离功能进行验证。

在前 40s 的时间内,两个程序共享L3 cache所有资源。在约 40s 后,开始隔离在线和离线L3 cache资源的使用,在离线任务 L3 cache 的配比分别为 0xffff 和 0xf。

image.png

通过实验结果可以看到,在 L3 cache 资源共享的情况下,离线资源对在线资源干扰明显,L3 cache 竞争激烈,波动幅度很大;在对 L3 cache 资源进行隔离后,一方面离线得到了持续有效的压制,L3 cache 占有率大幅下降,另一方面在线性能提升明显,平均 L3 cache 占用提升了约 78%,且波动幅度变小,L3 cache 占用更加稳定。

文章来源:龙蜥社区

推荐阅读

更多Arm服务器相关技术及移植干货请关注Arm服务器专栏。如要加入Arm Server微信群,请添加极术小姐姐(微信id:aijishu20)备注Arm服务器邀请加入。
推荐阅读
关注数
17400
内容数
80
分享arm服务器软件应用经验、测试方法、优化思路、工具使用等。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息