本栏目下主要归档了一些linux kernel相关的文章,注重结合内核源代码进行说明分析。
cgroup中有一些默认的文件,本文详细分析了这些文件背后的内核实现细节,以便更深入的理解cgroup。
这些文件包括:
- notify_on_release
- release_agent
- cgroup.procs
- tasks
- cgroup.clone_children
- cgroup.event_control
- cgroup.sane_behavior
注意:本文分析中引用的代码来自于centos系统自带的内核:kernel-3.10.0-862.9.1.el7
本文详细分析了/proc/pid/cgroup
文件的内核实现。
注意:本文基于3.10.0-862.el7.x86_64
版本kernel
进行分析。
在描述进程的结构体task_struct
中有一个类型为css_set
的成员cgroups
,它描述了进程的所有cgroup
信息,从前面的分析文章中我们已经知道通过task_struct->cgroups
可以找到进程的所有不同cgroup
控制器的信息。
当我们新创建一个进程时,新进程的task_struct->cgroups
的值继承自其父进程
。此后,如果我们将新创建的进程添加到一个新的cgroup
中时,就需要重新给task_struct->cgroups
赋值,这个值要么是一个已经存在的css_set
结构的指针,要么是新创建的css_set
的结构的指针。
所以,我们就需要通过进程的cgroup信息
,快速查找其对应的css_set结构
是否存在,如果不存在的话就去创建它。linux kernel
使用一个hash
表来完成这个工作。本文主要分析该hash
表的实现。
注意:本文基于3.10.0-862.el7.x86_64
版本kernel
进行分析。
本文继续该系列文章,分析了cgroup
各个子系统的mount
流程,当然也包括umount/remount
流程。
注意:本文基于3.10.0-862.el7.x86_64
版本kernel
进行分析。
本文详细分析了cgroup
初始化的过程。
本文基于3.10.0-862.el7.x86_64
版本kernel进行分析。