用crash工具学习Linux内核 —— 查看cgroup_roots

简介: 用crash工具学习Linux内核 —— 查看cgroup_roots

内核版本:5.14

ubuntu版本:20.04

参考:

Linux_schedule_cgroup.pdf

在开机时,会自动挂载cgroup文件系统,可以通过cat /proc/cgroups来查看当前在用的cgroup子系统。

root@ubuntu-vm:~# cat /proc/cgroups
#subsys_name    hierarchy       num_cgroups     enabled
cpuset             8                 1             1
cpu                7                 1             1
cpuacct            7                 1             1
blkio              6                 1             1
memory             4                 52            1
devices           12                 23            1
freezer           13                 1             1
perf_event        11                 1             1
hugetlb            3                 1             1
pids              10                 29            1
rdma               5                 1             1
misc               9                 1             1
debug              2                 1             1
root@ubuntu-vm:~# cat /proc/cgroups | wc -l
14

上面cpu和cpuacct的hierarchy是相同的,表示这两个子系统是一同挂载的,即:mount -t cgroup -o cpu,cpuacct,这里的log是通过proc_cgroupstats_show输出的:

**/* Display information about each subsystem and each hierarchy */
int proc_cgroupstats_show(struct seq_file *m, void *v)
{
  struct cgroup_subsys *ss;
  int i;
  seq_puts(m, "#subsys_name\thierarchy\tnum_cgroups\tenabled\n");
  /*
   * ideally we don't want subsystems moving around while we do this.
   * cgroup_mutex is also necessary to guarantee an atomic snapshot of
   * subsys/hierarchy state.
   */
  mutex_lock(&cgroup_mutex);
  for_each_subsys(ss, i)
    seq_printf(m, "%s\t%d\t%d\t%d\n",
         ss->legacy_name, ss->root->hierarchy_id,
         atomic_read(&ss->root->nr_cgrps),
         cgroup_ssid_enabled(i));
  mutex_unlock(&cgroup_mutex);
  return 0;
}

mount -t cgroup -o memory,xxx时,如果memory子系统还没有cgroup_root的话,会创建新的cgroup_root结构,并将其加入到全局cgroup_roots链表中,下面用crash工具的list命令

来遍历这个链表,输出每个cgroup_root的信息。

  • 获取cgroup_roots的地址
crash> sym cgroup_roots
ffffffffb7f509a0 (D) cgroup_roots
  • 遍历1
crash> list -o cgroup_root.root_list  -H ffffffffb7f509a0 | wc -l
14
crash> list -o cgroup_root.root_list  -H ffffffffb7f509a0
ffffa3b7802cc000
ffffa3b7802ca000
ffffa3b7802c8000
ffffa3b782b8e000
ffffa3b782b8c000
ffffa3b782b8a000
ffffa3b782b88000
ffffa3b780bf6000
ffffa3b780bf4000
ffffa3b780bf2000
ffffa3b780bf0000
ffffa3b781696000
ffffa3b781694000
ffffffffb7f509c0
  • 查看具体每个cgroup_root的hierarchy:
crash> list -o cgroup_root.root_list -s cgroup_root.hierarchy_id -H ffffffffb7f509a0 -r
ffffffffb7f509c0
  hierarchy_id = 0,  # 默认cgroup_root
ffffa3b781694000
  hierarchy_id = 1,
ffffa3b781696000
  hierarchy_id = 2,
ffffa3b780bf0000
  hierarchy_id = 3,
ffffa3b780bf2000
  hierarchy_id = 4,
ffffa3b780bf4000
  hierarchy_id = 5,
ffffa3b780bf6000
  hierarchy_id = 6,
ffffa3b782b88000
  hierarchy_id = 7,
ffffa3b782b8a000
  hierarchy_id = 8,
ffffa3b782b8c000
  hierarchy_id = 9,
ffffa3b782b8e000
  hierarchy_id = 10,
ffffa3b7802c8000
  hierarchy_id = 11,
ffffa3b7802ca000
  hierarchy_id = 12,
ffffa3b7802cc000
  hierarchy_id = 13,
  • 查看具体每个cgroup_root的更多信息:
crash> list -o cgroup_root.root_list -s cgroup_root.hierarchy_id,subsys_mask,nr_cgrps -H ffffffffb7f509a0 -rx
ffffffffb7f509c0
  hierarchy_id = 0x0,
  subsys_mask = 0x0,
  nr_cgrps = {
    counter = 0x1f
  },
ffffa3b781694000
  hierarchy_id = 0x1,
  subsys_mask = 0x0,
  nr_cgrps = {
    counter = 0x1f
  },
ffffa3b781696000
  hierarchy_id = 0x2,
  subsys_mask = 0x1000,
  nr_cgrps = {
    counter = 0x1
  },
ffffa3b780bf0000
  hierarchy_id = 0x3,
  subsys_mask = 0x100,
  nr_cgrps = {
    counter = 0x1
  },
ffffa3b780bf2000
  hierarchy_id = 0x4,
  subsys_mask = 0x10,
  nr_cgrps = {
    counter = 0x34
  },
ffffa3b780bf4000
  hierarchy_id = 0x5,
  subsys_mask = 0x400,
  nr_cgrps = {
    counter = 0x1
  },
ffffa3b780bf6000
  hierarchy_id = 0x6,
  subsys_mask = 0x8,
  nr_cgrps = {
    counter = 0x1
  },
ffffa3b782b88000
  hierarchy_id = 0x7,
  subsys_mask = 0x6,
  nr_cgrps = {
    counter = 0x1
  },
ffffa3b782b8a000
  hierarchy_id = 0x8,
  subsys_mask = 0x1,
  nr_cgrps = {
    counter = 0x1
  },
ffffa3b782b8c000
  hierarchy_id = 0x9,
  subsys_mask = 0x800,
  nr_cgrps = {
    counter = 0x1
  },
ffffa3b782b8e000
  hierarchy_id = 0xa,
  subsys_mask = 0x200,
  nr_cgrps = {
    counter = 0x1d
  },
ffffa3b7802c8000
  hierarchy_id = 0xb,
  subsys_mask = 0x80,
  nr_cgrps = {
    counter = 0x1
  },
ffffa3b7802ca000
  hierarchy_id = 0xc,
  subsys_mask = 0x20,
  nr_cgrps = {
    counter = 0x17
  },
ffffa3b7802cc000
  hierarchy_id = 0xd,
  subsys_mask = 0x40,
  nr_cgrps = {
    counter = 0x1
  },

完。

相关文章
|
23天前
|
安全 Linux Shell
四、Linux核心工具:Vim, 文件链接与SSH
要想在Linux世界里游刃有余,光会“走路”还不够,还得配上几样“高级装备”。首先是Vim编辑器,它像一把瑞士军刀,让你能在命令行里高效地修改文件。然后要懂“软硬链接”,软链接像个快捷方式,硬链接则是给文件起了个别名。最后,SSH是你的“传送门”,不仅能让你安全地远程登录服务器,还能用scp轻松传输文件,设置好密钥更能实现免-密登录,极大提升效率。
229 3
|
2月前
|
安全 网络协议 Linux
深入理解Linux内核模块:加载机制、参数传递与实战开发
本文深入解析了Linux内核模块的加载机制、参数传递方式及实战开发技巧。内容涵盖模块基础概念、加载与卸载流程、生命周期管理、参数配置方法,并通过“Hello World”模块和字符设备驱动实例,带领读者逐步掌握模块开发技能。同时,介绍了调试手段、常见问题排查、开发规范及高级特性,如内核线程、模块间通信与性能优化策略。适合希望深入理解Linux内核机制、提升系统编程能力的技术人员阅读与实践。
241 1
|
2月前
|
Ubuntu Linux
Ubuntu 23.04 用上 Linux 6.2 内核,预计下放到 22.04 LTS 版本
Linux 6.2 带来了多项内容更新,修复了 AMD 锐龙处理器设备在启用 fTPM 后的运行卡顿问题,还增强了文件系统。
|
2月前
|
Ubuntu Linux
Ubuntu 23.10 现在由Linux内核6.3提供支持
如果你想在你的个人电脑上测试一下Ubuntu 23.10的最新开发快照,你可以从官方下载服务器下载最新的每日构建ISO。然而,请记住,这是一个预发布版本,所以不要在生产机器上使用或安装它。
|
2月前
|
传感器 监控 Ubuntu
10 月发布,Ubuntu 23.10 已升级到 Linux Kernel 6.3 内核
硬件方面,Linux 6.3 引入了在 HID 中引入了原生的 Steam Deck 控制器接口,允许罗技 G923 Xbox 版赛车方向盘在 Linux 上运行;改善 8BitDo Pro 2 有线控制器的行为;并为一系列华硕 Ryzen 主板添加传感器监控。
|
2月前
|
Ubuntu Linux
Ubuntu24.04LTS默认采用Linux 6.8内核,实验性版本可通过PPA获得
IT之家提醒,当下的 Ubuntu 23.10 也是一个“短期支持版本”,该版本将在今年 7 月终止支持,而今年 4 月推出的 Ubuntu 24.04 LTS 长期支持版本将获得 5 年的更新支持。
|
22天前
|
安全 Linux iOS开发
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
115 0
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
|
1月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
123 16
|
2月前
|
数据采集 编解码 运维
一文讲完说懂 WowKey -- WowKey 是一款 Linux 类设备的命令行(CLT)运维工具
WowKey 是一款面向 Linux 类设备的命令行运维工具,支持自动登录、批量执行及标准化维护,适用于企业、团队或个人管理多台设备,显著提升运维效率与质量。