帮我找一些cgroup资料我学习下

ChatGPT 说: 我来帮你找一些关于cgroup的学习资料。让我先搜索一下最新的cgroup相关信息。

🔍 cgroup linux 教程 学习资料

🔗 Linux资源管理之cgroups简介 🔗 Linux Cgroup快速入门:基本概 🔗 cgroup使用举例和linux内核源码 🔗 [详解Cgroup V2 | Zorro’](https://zorrozou.github.io/docs/详解Cgroup V2.html) 🔗 [译] Control Group v2 🔗 Linux 教程_w3cschool 🔗 Chapter 3. Using lib 🔗 第 24 章 | 管理、监控和更新内核 🔗 第 3 章 使用 libcgroup 工 🔗 第 1 章 控制群组简介 | Red H

让我再搜索一些更全面的cgroup学习资源:

🔍 cgroup v2 tutorial documentation examples

🔗 Control Group v2 — T 🔗 Chapter 24. Using cg 🔗 cgroup-v2.txt 🔗 linux/Documentation/ 🔗 About cgroup v2 | Ku 🔗 A journey to underst 🔗 Practicing cgroup v2 🔗 cgroups(7) - Linux m 🔗 Chapter 26. Configur 🔗 Run Control Group Ve

基于搜索到的资料,我为你整理了一些优质的cgroup学习资源:

cgroup 学习资料推荐

  1. 官方文档和权威资料 Linux内核官方文档:

Linux内核官方的cgroup v2文档,这是最权威的技术文档

Linux manual page (man7.org) 提供了详细的cgroups手册页

Red Hat官方文档:

Red Hat Enterprise Linux 文档包含了完整的cgroup使用指南和实践案例

  1. 中文学习资料 技术博客和教程:

美团技术团队的cgroups简介:深入介绍了cgroups的内部实现机制,包括VFS接口等技术细节

CSDN上的Linux Cgroup快速入门:涵盖了基本概念、CPU和内存管理等核心内容

cgroup使用举例和linux内核源码详解:提供了实际的使用案例和源码分析

  1. cgroup v2 专门资料 最新版本学习:

详解Cgroup V2:专门讲解cgroup v2的特性和使用

Control Group v2权威指南(译文):权威的cgroup v2中文翻译文档

实践性文章:包含实际操作示例和最佳实践

  1. 容器相关应用 Kubernetes官方文档介绍了cgroup v2在容器编排中的应用

学习建议 从基础开始:先了解cgroup的基本概念和目的

理论结合实践:通过实际操作加深理解

版本差异:重点关注cgroup v1和v2的区别

应用场景:学习在容器化、资源管理等场景中的应用

这些资料涵盖了从入门到深入的各个层次,建议你按照自己的基础水平选择合适的材料开始学习。

您说: 美团技术团队的cgroups简介:深入介绍了cgroups的内部实现机制,包括VFS接口等技术细节 这个文章链接发一下

ChatGPT 说: 根据我之前搜索到的结果,美团技术团队的cgroups简介文章链接是:

https://tech.meituan.com/2015/03/31/cgroups.html

这篇文章标题是《Linux资源管理之cgroups简介》,由美团技术团队发布。文章深入介绍了cgroups的内部实现机制,包括VFS接口等技术细节,是学习cgroups非常好的中文资料。

你可以直接访问这个链接来阅读完整的文章内容。这篇文章对于理解cgroups的工作原理和底层实现机制很有帮助。

您说: cpuacct 子系统,可以统计 cgroups 中的进程的 cpu 使用报告。 这个帮我输出一个具体落地的小例子

ChatGPT 说: 我来为你提供一个cpuacct子系统的具体实践例子:

🔍 cpuacct cgroup 实例 例子 cpu 统计

🔗 cgroup 分析之CPU和内存部分 | 🔗 Cgroup分析之cpu、cpuacct 🔗 Linux资源管理之cgroups简介 🔗 Cgroup之cpuacct子系统 - 🔗 A.2. cpu | Red Hat P 🔗 [详解Cgroup V2 | Zorro’](https://zorrozou.github.io/docs/详解Cgroup V2.html) 🔗 第一千零一篇的 cgroups 介紹. 🔗 Cgroup - 从CPU资源隔离说起 🔗 Chapter 24. Using cg 🔗 [kernel_new_features/](https://github.com/0voice/kernel_new_features/blob/main/cgroups/文章/用 cgroups 管理 cpu 资源.md)

让我搜索更具体的cpuacct实例:

🔍 cpuacct.usage cpuacct.stat 例子 实际操作

🔗 cpuacct.txt 🔗 Calculating CPU usag 🔗 Android cpuacct.usag 🔗 linux - cgroup cpuac 🔗 Linux cgroup资源隔离各个击破 🔗 cgroup - Why do user 🔗 3.3. cpuacct | Resou 🔗 cpuacct: per-cgroup 🔗 Checking Kubernetes 🔗 Why do user and syst

基于搜索到的信息,我来为你提供一个cpuacct子系统的具体实践例子:

cpuacct子系统实践例子

  1. 创建和挂载cpuacct子系统 bash 复制

创建挂载点目录

sudo mkdir -p /sys/fs/cgroup/cpuacct

挂载cpuacct子系统(cgroup v1)

sudo mount -t cgroup -o cpuacct none /sys/fs/cgroup/cpuacct

验证挂载成功

ls /sys/fs/cgroup/cpuacct/ 2. 创建一个测试cgroup bash 复制

创建一个名为test_group的cgroup

sudo mkdir /sys/fs/cgroup/cpuacct/test_group

查看创建后的文件

ls /sys/fs/cgroup/cpuacct/test_group/

输出会包含:cpuacct.usage、cpuacct.stat、cpuacct.usage_percpu等文件

  1. 启动一个CPU密集型进程并加入cgroup bash 复制

启动一个CPU密集型进程(死循环)

在后台运行

while true; do echo “test” > /dev/null; done & CPU_PID=$!

将进程加入到test_group中

echo $CPU_PID | sudo tee /sys/fs/cgroup/cpuacct/test_group/cgroup.procs

echo “进程 $CPU_PID 已加入test_group” 4. 监控CPU使用情况 bash 复制

查看总CPU使用时间(纳秒)

echo ”= 总CPU使用时间 =” cat /sys/fs/cgroup/cpuacct/test_group/cpuacct.usage

查看用户态和内核态时间统计(USER_HZ单位)

echo ”= 用户态/内核态统计 =” cat /sys/fs/cgroup/cpuacct/test_group/cpuacct.stat

查看每个CPU核心的使用时间

echo ”= 每CPU核心使用时间 =” cat /sys/fs/cgroup/cpuacct/test_group/cpuacct.usage_percpu 5. 创建监控脚本 bash 复制 #!/bin/bash

monitor_cpu.sh - CPU使用量监控脚本

CGROUP_PATH=“/sys/fs/cgroup/cpuacct/test_group” INTERVAL=2 # 监控间隔(秒)

echo “开始监控CPU使用情况…” echo “时间戳 总使用时间(ns) 用户态(USER_HZ) 内核态(USER_HZ)” echo ”================================================================”

prev_usage=0 prev_user=0 prev_system=0

while true; do # 读取当前值 current_usage=CGROUP_PATH/cpuacct.usage) stat_line=CGROUP_PATH/cpuacct.stat) current_user=stat_line | awk ‘{print 2}') current_system=(echo stat_line | awk '{print 4}’)

# 计算差值
if [ $prev_usage -ne 0 ]; then
    usage_diff=$((current_usage - prev_usage))
    user_diff=$((current_user - prev_user))
    system_diff=$((current_system - prev_system))
    
    timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    printf "%-20s %15d %15d %15d\n" "$timestamp" $usage_diff $user_diff $system_diff
fi

# 保存当前值作为下次的前值
prev_usage=$current_usage
prev_user=$current_user
prev_system=$current_system

sleep $INTERVAL

done 6. 实际测试输出示例 运行监控脚本后,你会看到类似这样的输出:

markdown 复制 时间戳 总使用时间(ns) 用户态(USER_HZ) 内核态(USER_HZ)

2024-08-22 10:30:15 1234567890 45 12 2024-08-22 10:30:17 1156789012 43 11 2024-08-22 10:30:19 1345678901 47 13 7. 关键文件说明 cpuacct.usage: 统计了所有CPU核的累加使用时间,单位是纳秒

cpuacct.stat: 统计了该控制组中进程用户态和内核态的CPU使用量,单位是USER_HZ

cpuacct.usage_percpu: 显示每个CPU核心的使用时间

  1. 清理工作 bash 复制

停止测试进程

kill $CPU_PID

删除测试cgroup

sudo rmdir /sys/fs/cgroup/cpuacct/test_group

卸载cpuacct

sudo umount /sys/fs/cgroup/cpuacct 这个例子展示了如何使用cpuacct子系统来实时监控特定进程组的CPU使用情况,可以用于容器监控、资源管理等实际场景。