首页 > 其他分享 >Resctrl内核实现(三)GROUP的创建

Resctrl内核实现(三)GROUP的创建

时间:2023-10-07 10:38:37浏览次数:42  
标签:MON GROUP parent mkdir 内核 group Resctrl rdtgroup mon

前言

在(一)我们已经清楚了Resctrl中RMID和CLOSID的切换规则是怎样的。
在(二)中对内核中的CLOSID和RMID的分配、释放过程进行了详细解读。
在后续的章节将会对Resctrl文件系统中重要的文件操作触发的内核行为进行解读。本章将对Resctrl中的建组操作进行分析。

rdt group的创建

在Resctrl中有两类建组操作,一类是在根目录下创建CTRL-MON group,另一类则是在CTRL-MON group下的mon_groups目录下创建MON-group。
在内核中Resctrl文件系统中的创建目录的处理函数是rdtgroup_mkdir。主要逻辑如下:

  1. 如果cpu支持资源分配,比如cat、mba等功能,并且是在resctrl根目录下创建目录则会调用rdtgroup_mkdir_ctrl_mon创建一个CTRL-MON group。
  2. 如果支持监控功能,并且是在mon_groups目录下则会调用rdtgroup_mkdir_mon创建一个MON group。
static int rdtgroup_mkdir(struct kernfs_node *parent_kn, const char *name,
              umode_t mode)
{
    /* Do not accept '\n' to avoid unparsable situation. */
    if (strchr(name, '\n'))
        return -EINVAL;

    /*
     * If the parent directory is the root directory and RDT
     * allocation is supported, add a control and monitoring
     * subdirectory
     */
    if (rdt_alloc_capable && parent_kn == rdtgroup_default.kn)
        return rdtgroup_mkdir_ctrl_mon(parent_kn, parent_kn, name, mode);

    /*
     * If RDT monitoring is supported and the parent directory is a valid
     * "mon_groups" directory, add a monitoring subdirectory.
     */
    if (rdt_mon_capable && is_mon_groups(parent_kn, name))
        return rdtgroup_mkdir_mon(parent_kn, parent_kn->parent, name, mode);

    return -EPERM;
}

相比于建组操作,对RDT有一定了解的肯定更关心建组操作是如何分配CLOSID和RMID。首先说结论:创建CTRL-MON group会分配一个CLOSID和RMID,创建一个MON group只会分配RMID,MON group会复用其parent CTRL-MON group的closid。

rdtgroup_mkdir_ctrl_monrdtgroup_mkdir_mon的函数调用链如下。

rdtgroup_mkdir
    -->rdtgroup_mkdir_ctrl_mon
        -->mkdir_rdt_prepare
            -->alloc_rmid
        -->closid_alloc
    -->rdtgroup_mkdir_mon
        -->mkdir_rdt_prepare
            -->alloc_rmid

标签:MON,GROUP,parent,mkdir,内核,group,Resctrl,rdtgroup,mon
From: https://www.cnblogs.com/wodemia/p/17745679.html

相关文章

  • Resctrl使用说明书
    前言Resctrl文件系统是Linux内核在4.10提供的对RDT技术的支持,作为一个伪文件系统在使用方式上与cgroup是类似,通过提供一系列的文件为用户态提供查询和修改接口。本文就resctrl文件系统的使用进行了详细说明,内容基本来自于LinuxDocumentation中的精华部分。使用限制与挂载检查......
  • Resctrl内核实现(四)schemata和cpus
    前言在Resctrl中可编程的文件主要有两个,schemata指定资源分配策略,cpus则为cpu绑定default_closid和default_rmid。修改cpus文件cpus文件按照所处目录的类型不同有两种操作,当所处目录类型为CTRL-MONgroup时会调用cpus_ctrl_write,目录类型为MONgroup时会调用cpus_mon_write。通......
  • linux 内核源码
    linux官网:https://www.kernel.org/1、第一列为版本描述:主线、稳定版、长期支持版;第二列为内核版本号;第三列为最后更新时间;2、tarball:完整的代码;pgp:验证签名;patch:基于上一个版本的补丁(一般商用的系统不会频繁的编译内核,所以可以打补丁上去方便)3、点击[tarball]下载完成版代......
  • 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......
  • Linux 内核 --- 为什么在中断里不能 sleep
    明确问题首先,让我们明确一下问题。对于这个问题,稍微准确一点的问法是:为什么在Linux的中断里,不能sleep?但是这个问法仍然不准确。中断(interrupt)和中断服务程序(interruptserviceroutine,ISR,或者是interrupthandler),是2个不同的概念。前者是硬件相关的概念,后者是......
  • mysql在安装group_replication插件时,报错ERROR 1126"can't open share library xxxx g
    问题描述:mysql在安装group_replication插件时,报错ERROR1126"can'topensharelibraryxxxxgroup_replication.so",如下所示:数据库:MySQL8.0.27系统:rhel7.31、问题重现mysql>INSTALLPLUGINgroup_replicationSONAME'group_replication.so';ERROR1126(HY0......
  • 权限提升-Windows内核提权
    权限提升-Windows内核提权目录权限提升-Windows内核提权本节知识点系统内核溢出漏洞提权概述内核溢出提权步骤补丁对比法1.手动查找系统补丁2.对比查找系统潜在漏洞项目一:WindowsExploitSuggester项目二.WindowsVulnScan项目三wesng3.提权大集合项目地址:https://github.com/l......
  • 操作系统内核漫游
    操作系统内核漫游(前传)此文记录操作系统自底向上如何运行。因为学校的教学中大多数直接开始教操作系统中的很多算法(至少我是如此),导致我学完之后依然不知道他在整个计算机中的身份地位,也并不清楚他如何与计组以及汇编、C语言之间的关联。此笔记算是学习学校所谓的操作系统的感......
  • 如何获取 C#程序 内核态线程栈
    一:背景1.讲故事在这么多的案例分析中,往往会发现一些案例是卡死在线程的内核态栈上,但拿过来的dump都是用户态模式下,所以无法看到内核态栈,这就比较麻烦,需要让朋友通过其他方式生成一个蓝屏的dump,这里我们简单汇总下。二:如何生成内核态dump1.案例代码为了方便演示,来一段简单的......