首页 > 其他分享 >Resctrl使用说明书

Resctrl使用说明书

时间:2023-10-07 10:38:05浏览次数:44  
标签:rdt group cpus 目录 说明书 mon 使用 Resctrl resctrl

前言

Resctrl文件系统是Linux内核在4.10提供的对RDT技术的支持,作为一个伪文件系统在使用方式上与cgroup是类似,通过提供一系列的文件为用户态提供查询和修改接口。本文就resctrl文件系统的使用进行了详细说明,内容基本来自于Linux Documentation中的精华部分。

使用限制与挂载

检查

resctrl的使用存在两个限制:

  1. 内核版本4.10+
  2. cpu提供rdt能力,检查是否支持可以查看/proc/cpuinfo文件,查看flags是否包含以下特性
Feature flag
RDT (Resource Director Technology) Allocation "rdt_a"
CAT (Cache Allocation Technology) "cat_l3", "cat_l2"
CDP (Code and Data Prioritization) "cdp_l3", "cdp_l2"
CQM (Cache QoS Monitoring) "cqm_llc", "cqm_occup_llc"
MBM (Memory Bandwidth Monitoring) "cqm_mbm_total", "cqm_mbm_local"
MBA (Memory Bandwidth Allocation) "mba"
SMBA (Slow Memory Bandwidth Allocation) ""
BMEC (Bandwidth Monitoring Event Configuration) ""

挂载

mount -t resctrl resctrl /sys/fs/resctrl

目录与文件

info目录说明

/sys/fs/resctrl是resctrl的根目录,根目录本身就是一个rdt_group,关于rdt_group在下文进行描述。除了rdt_group本身包含的文件和目录外根目录下有一个info目录包含了resctrl和rdt的一些信息。

info
├── L3 
│   ├── bit_usage 
│   ├── cbm_mask # cache bit mask 
│   ├── min_cbm_bits # cbm的最小连续长度
│   ├── num_closids # closid的个数
│   └── shareable_bits
├── L3_MON
│   ├── max_threshold_occupancy # 当某rmid的llc占用量计数器低于该值时考虑释放,与rmid重用有关
│   ├── mon_features # 支持的监控事件列表
│   └── num_rmids # rmid的数量
├── last_cmd_status # 最后一条指令执行的结果
└── MB
    ├── bandwidth_gran # 带宽的设置的粒度
    ├── delay_linear 
    ├── min_bandwidth # 最小的内存带宽百分比
    ├── num_closids # closid数量
    └── thread_throttle_mode # core上的多个thread存在不同带宽时的处理,max-以最大限制同时压制 per-thread:各自应用不同的带宽比例

rdt_group目录

一个rdt_group包含的文件如下:

├── cpus # cpu bit mask
├── cpus_list # 和cpus意义相同,只是使用范围表示
├── id
├── mode
├── mon_data # 监控的数据目录
├── mon_groups # 监控组目录
├── schemata # 资源配置策略
├── size # 和schemata一样,只是schemata使用bit mask,size使用数字
└── tasks # pids

mon_data目录

在rdt_group下的mon_data目录存放的是属于该rdt_group的默认监控组的事件value。

├── mon_L3_00
│   ├── llc_occupancy
│   ├── mbm_local_bytes
│   └── mbm_total_bytes
└── mon_L3_01
    ├── llc_occupancy
    ├── mbm_local_bytes
    └── mbm_total_bytes

0001标记的是多个socket。

mon_groups目录

每一个rdt_group下都有一个mon_groups目录,除了默认的监控组数据会存放在mon_data目录下以外,还可以在mon_groups目录下新建mon_group实现更细粒度的监控。

/sys/fs/resctrl/mon_groups/
└── mon_demo
    ├── cpus
    ├── cpus_list
    ├── id
    ├── mon_data
    └── tasks

和rdt_group一样的是可以指定cpus,以及tasks。

常见用法

创建rdt_group

rdt_group只能够创建在根目录下,不允许嵌套,这是和cgroup的一个区别。只需要通过mkdir创建新目录即可。

mkdir /sys/fs/resctrl/rdt_group_demo

rdt_group设置资源分配规则

修改schemata文件就可以改变rdt_group的资源访问策略。

# cat  /sys/fs/resctrl/demo_rdt_group/schemata 
MB:0=100;1=100
L3:0=fff;1=fff
# echo MB:0:70;1=80
# echo L3:0=ff0;1=0ff

需要注意的是MB指的是内存带宽的百分比,会收到info目录下的最小带宽比以及最小带宽粒度的限制。所有不满足最小带宽粒度的值都会被取整到满足带宽粒度。
L3表示llc的掩码,fff表示cache被划分为12份,每一个bit表示1/12。需要注意的是L3的掩码必须连续,并且满足info目录下的最小连续长度。
另外0=1=表示不同socket上的资源限制。

为cpu绑定默认分配策略

将cpu号以掩码的方式写入rdt_group目录下的cpus文件,或者以范围的方式写入cpus_list。

echo 0-63 >  /sys/fs/resctrl/demo_rdt_group/cpus_list

相比于修改前新增的cpu如果已绑定到其他非根目录rdt_group会清除其他rdt_group中cpu的对应bit;被释放的cpu会返回到根rdt_group。并且写入后,当前rdt_group下的mon_groups目录中的监控组的cpus均被清零。

为task绑定分配策略

task被创建那一刻会加入根目录的rdt_group,所有的task只能属于最多一个rdt_group,当加入一个非默认的rdt_group时会为task绑定分配策略。

echo pid > /sys/fs/resctrl/demo_rdt_group/tasks

创建监控组

每一个rdt_group目录下都有mon_data存放监控事件值,resctrl提供了更细化的监控组策略,可以在rdt_group的mon_groups目录下新建新的监控组。

mkdir /sys/fs/resctrl/demo_rdt_group/mon_groups/demo_mon_grp

可以为cpu和task绑定监控组。只需要修改监控组的cpus_list和tasks文件。

echo 0-31 >  /sys/fs/resctrl/demo_rdt_group/mon_groups/demo_mon_grp/cpus_list
echo pid > /sys/fs/resctrl/demo_rdt_group/mon_groups/demo_mon_grp/tasks

需要注意,cpus_list必须是对应的资源组cpus_list的子集。pid同样。否则会写入失败。

策略的监控的实施规则

基本上关于resctrl的操作就只有以上内容,但是还是给人一种混乱的感觉,通过一通设置有可能还是搞不清楚task会收到怎样的资源限制以及监控组累积的数据包含哪些cpu或者是task的事件。这一部分我将在下一篇关于《resctrl的内核实现机制》中文章中进行说明。

Reference

  1. User Interface for Resource Control feature

标签:rdt,group,cpus,目录,说明书,mon,使用,Resctrl,resctrl
From: https://www.cnblogs.com/wodemia/p/17745666.html

相关文章

  • Resctrl内核实现(四)schemata和cpus
    前言在Resctrl中可编程的文件主要有两个,schemata指定资源分配策略,cpus则为cpu绑定default_closid和default_rmid。修改cpus文件cpus文件按照所处目录的类型不同有两种操作,当所处目录类型为CTRL-MONgroup时会调用cpus_ctrl_write,目录类型为MONgroup时会调用cpus_mon_write。通......
  • Resctrl内核实现(一)CPU状态
    Resctrl内核实现(一)CPU状态resctrl是rdt机制的一个用户态接口,通过对rdt技术进行封装,提供了一套资源分配和监控机制的接口,方便用户进行使用。本文从resctrl的资源分配和监控的角度对内核源码实现进行了分析,参考的kernel版本为4.19.287。Resctrl下的CPU状态变化resctrl中有两种gro......
  • Resctrl内核实现(二)CLOSID和RMID管理
    前言RDT的监控数据累计和资源分配策略的关键就是CLOSID和RMID的分配策略。CLOSID和RMID管理CLOSID管理RDT中的资源通过控制组进行分配,控制组对于各类资源进行划分或者限制。每一个控制组用一个CLOSID进行标识,由于CLOSID的数量有限所以在内核中通过一个位图进行表示和管理。st......
  • 搭建项目 虚拟环境的使用
       ......
  • 使用Windows API中键盘、鼠标监控钩子
    本节将介绍如何使用WindowsAPI中的SetWindowsHookEx和RegisterHotKey函数来实现键盘鼠标的监控。这些函数可以用来设置全局钩子,通过对特定热键挂钩实现监控的效果,两者的区别在于SetWindowsHookEx函数可以对所有线程进行监控,包括其他进程中的线程,而RegisterHotKey函数只能对当前......
  • 如何提升爬虫IP使用效率?精打细算的方法分享
    在进行爬虫数据采集时,爬虫IP是不可或缺的工具。然而,爬虫IP的费用可能是一个爬虫项目的重要开支之一。为了帮助您节省爬虫IP经费,本文将分享一些经济高效的方法,让您在使用爬虫IP时更加节约成本,提高经济效益。一、优化爬虫IP的使用1、指定目标网站:只针对需要爬取的目标网站使用爬虫IP,......
  • 根据以下代码所生成的数据 请使用python 机器学习 研究不同宽度,厚度,重量,车间温度,
    #对分类变量进行独热编码data=pd.get_dummies(data,columns=['Annealing_Type','Cooling_Type'])#划分训练集和测试集fromsklearn.model_selectionimporttrain_test_splitX=data.drop(['Material_ID','Measurement_Time','Tempera......
  • R语言中purrr包中的map函数的使用
    R语言中purrr包中的map函数的使用参考文章:https://bookdown.org/wangminjie/R4DS/tidyverse-purrr.html语法map()函数的第一个参数是list或者vector,第二个参数是函数。注意这里的第一个传参,数据框是列表的一种特殊形式,因此数据框也是可以的。测试d变量的内容为:>d......
  • 为什么js中不推荐使用eval函数
    eval函数的作用'eval'函数是javascript中的一个内置函数,它的主要作用是将传入的字符串作为代码来执行。换句话说,'eval'可以将动态生成的字符串当作javascript代码来执行,并返回执行结果。我的理解就是它可以执行传入的代码,并返回执行结果。为什么不推荐使用eval1、安全性问题:'......
  • Day14.形参与实参的介绍和具体使用
    1.形参与实参:  2.位置参数:  3.关键词参数:  4.默认参数__默认形参: 5.位置形参与默认形参混用强调点一和二: 6.位置形参与默认形参混用强调点三: 7.1.可变长度的位置参数: 7.2.可变长度的参数_2星号可以用在实参中: 8.可变长度的关键字参数: 9.可变......