本栏目下主要归档了一些linux kernel相关的文章,注重结合内核源代码进行说明分析。

cgroup源码分析6——cgroup 中默认控制文件的内核实现分析

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

cgroup源码分析4——css_set的哈希表分析

在描述进程的结构体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进行分析。