cgroups详解:
http://files.cnblogs.com/files/lisperl/cgroups介绍.pdf
https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch01.html
cgroups介绍
Cgroups是control groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:cpu,memory,IO等等)的机制。最初由google的工程师提出,后来被整合进Linux内核。Cgroups也是LXC为实现虚拟化所使用的资源管理手段,可以说没有cgroups就没有LXC。cgroups为每种可以控制的资源定义了一个子系统。典型的子系统(不同的系统子系统可能稍有差异)介绍如下:
cpu子系统,主要限制进程的 cpu使用率。
cpuacct子系统,可以统计 cgroups中的进程的 cpu 使用报告。
cpuset子系统,可以为 cgroups中的进程分配单独的 cpu 节点或者内存节点。
memory子系统,可以限制进程的 memory使用量。
blkio子系统,可以限制进程的块设备 io。
devices子系统,可以控制进程能够访问某些设备。
net_cls子系统,可以标记 cgroups中进程的网络数据包,然后可以使用 tc 模块(traffic control)对数据包进行控制。
freezer子系统,可以挂起或者恢复 cgroups中的进程。
ns子系统,可以使不同 cgroups下面的进程使用不同的 namespace。
这里面每一个子系统都需要与内核的其他模块配合来完成资源的控制,比如对 cpu资源的限制是通过进程调度模块根据 cpu 子系统的配置来完成的;对内存资源的限制则是内存模块根据 memory子系统的配置来完成的,而对网络数据包的控制则需要 Traffic Control子系统来配合完成。本文不会讨论内核是如何使用每一个子系统来实现资源的限制,而是重点放在内核是如何把 cgroups对资源进行限制的配置有效的组织起来的,和内核如何把cgroups 配置和进程进行关联的,以及内核是如何通过 cgroups 文件系统把cgroups的功能暴露给用户态的。查询是否安装了cgroups模块
Cgroups的使用方法
rpm -qa|grep cgroup
如果没有任何返回结果,说明未安装,可以使用yum等相关命令(不同的linux系统命令不同)安装,
比如:yum -y installlibcgroup
安装后在/etc/cgconfig.conf文件中会自动生成cgroups子系统的挂载点
另外,用户可以使用命令行挂载和取消挂载cgroups文件系统
挂载:
mount -t cgroup -osubsystems name /cgroup/name
其中subsystems为子系统,/cgroup/name为挂载点
例如:mount-t cgroup -ocpu cpu /cgroup/cpu
取消挂载:
umount /cgroup/name
例如:umount/cgroup/cpu
挂载某一个cgroups子系统到挂载点之后,就可以通过在挂载点下面建立文件夹或者使用cgcreate命令的方法创建cgroups层级结构中的节点。比如通过命令cgcreate -t root:root -g cpu:test就可以在 cpu子系统下建立一个名为test 的节点。结果如下所示:
然后可以通过写入需要的值到test下面的不同文件,来配置需要限制的资源。每个子系统下面都可以进行多种不同的配置,需要配置的参数各不相同,详细的参数设置需要参考cgroups手册。使用cgset 命令也可以设置 cgroups子系统的参数,格式为:
cgset -r parameter=value path_to_cgroup。
当需要删除某一个cgroups节点的时候,可以使用cgdelete 命令,比如要删除上述的test节点,可以使用cgdelete -r cpu:test命令进行删除。
把进程加入到cgroups子节点有多种方法:
(1) 可以直接把pid 写入到子节点下面的task文件中。例如:
echo 500 > /cgroup/cpu/test/tasks
(2) 可以通过cgclassify添加进程,格式:
cgclassify -g subsystems:path_to_cgroup pidlist,
(3) 可以直接使用cgexec 在某一个cgroups下启动进程,格式:
cgexec -g subsystems:path_to_cgroup command arguments.
subsystem配置
1. blkio - BLOCK IO限额
· common
o blkio.reset_stats - 重置统计信息,写int到此文件
o blkio.time - 统计cgroup对设备的访问时间 - device_types:node_numbersmilliseconds
o blkio.sectors - 统计cgroup对设备扇区访问数量 - device_types:node_numberssector_count
o blkio.avg_queue_size - 统计平均IO队列大小(需要CONFIG_DEBUG_BLK_CGROUP=y)
o blkio.group_wait_time - 统计cgroup等待总时间(需要CONFIG_DEBUG_BLK_CGROUP=y,单位ns)
o blkio.empty_time - 统计cgroup无等待io总时间(需要CONFIG_DEBUG_BLK_CGROUP=y,单位ns)
o blkio.idle_time - reports the total time (in nanoseconds — ns) thescheduler spent idling for a cgroup in anticipation of a better request thanthose requests already in other queues or from other groups.
o blkio.dequeue - 此cgroup IO操作被设备dequeue次数(需要CONFIG_DEBUG_BLK_CGROUP=y) - device_types:node_numbersnumber
o blkio.io_serviced - 报告CFQ scheduler统计的此cgroup对特定设备的IO操作(read, write, sync, or async)次数 - device_types:node_numbersoperation number
o blkio.io_service_bytes - 报告CFQ scheduler统计的此cgroup对特定设备的IO操作(read, write, sync, or async)数据量 - device_types:node_numbersoperation bytes
o blkio.io_service_time - 报告CFQ scheduler统计的此cgroup对特定设备的IO操作(read, write, sync, or async)时间(单位ns) - device_types:node_numbers operation time
o blkio.io_wait_time - 此cgroup对特定设备的特定操作(read, write,sync, or async)的等待时间(单位ns) - device_types:node_numbersoperation time
o blkio.io_merged - 此cgroup的BIOS requestsmerged into IO请求的操作(read, write,sync, or async)的次数 - number operation
o blkio.io_queued - 此cgroup的queued IO操作(read, write, sync, or async)的请求次数 - number operation
· Proportional weight division策略 - 按比例分配block io资源
o blkio.weight - 100-1000的相对权重,会被blkio.weight_device的特定设备权重覆盖
o blkio.weight_device - 特定设备的权重 - device_types:node_numbers weight
· I/O throttling (Upper limit)策略 - 设定IO操作上限
o 每秒读/写数据上限 blkio.throttle.read_bps_device - device_types:node_numbersbytes_per_secondblkio.throttle.write_bps_device - device_types:node_numbersbytes_per_second
o 每秒读/写操作次数上限 blkio.throttle.read_iops_device - device_types:node_numbersoperations_per_secondblkio.throttle.write_iops_device - device_types:node_numbersoperations_per_second
o 每秒具体操作(read, write, sync,or async)的控制blkio.throttle.io_serviced - device_types:node_numbers operationoperations_per_second blkio.throttle.io_service_bytes -device_types:node_numbersoperation bytes_per_second
2. cpu - CPU使用时间限额
· CFS(Completely Fair Scheduler)策略 - CPU最大资源限制
o cpu.cfs_period_us, cpu.cfs_quota_us - 必选 -二者配合,前者规定时间周期(微秒)后者规定cgroup最多可使用时间(微秒),实现task对单个cpu的使用上限(cfs_quota_us是cfs_period_us的两倍即可限定在双核上完全使用)。
o cpu.stat - 记录cpu统计信息,包含 nr_periods(经历了几个cfs_period_us), nr_throttled (cgroup里的task被限制了几次), throttled_time (cgroup里的task被限制了多少纳秒)
o cpu.shares - 可选 - cpu轮转权重的相对值
· RT(Real-Time scheduler)策略 - CPU最小资源限制
o cpu.rt_period_us, cpu.rt_runtime_us
二者配合使用规定cgroup里的task每cpu.rt_period_us(微秒)必然会执行cpu.rt_runtime_us(微秒)
3. cpuacct - CPU资源报告
· cpuacct.usage - cgroup中所有task的cpu使用时长(纳秒)
· cpuacct.stat - cgroup中所有task的用户态和内核态分别使用cpu的时长
· cpuacct.usage_percpu - cgroup中所有task使用每个cpu的时长
4. cpuset - CPU绑定
· cpuset.cpus -必选 - cgroup可使用的cpu,如0-2,16代表 0,1,2,16这4个cpu
· cpuset.mems -必选 - cgroup可使用的memory node
· cpuset.memory_migrate -可选 - 当cpuset.mems变化时page上的数据是否迁移, default 0
· cpuset.cpu_exclusive -可选 - 是否独占cpu, default 0
· cpuset.mem_exclusive -可选 - 是否独占memory,default 0
· cpuset.mem_hardwall -可选 - cgroup中task的内存是否隔离, default 0
· cpuset.memory_pressure -可选 - a read-only file that contains arunning average of the memory pressure created by the processes in this cpuset
· cpuset.memory_pressure_enabled -可选 - cpuset.memory_pressure开关,default 0
· cpuset.memory_spread_page -可选 - contains a flag (0 or 1) thatspecifies whether file system buffers should be spread evenly across the memorynodes allocated to this cpuset, default 0
· cpuset.memory_spread_slab -可选 - contains a flag (0 or 1) thatspecifies whether kernel slab caches for file input/output operations should bespread evenly across the cpuset, default 0
· cpuset.sched_load_balance -可选 - cgroup的cpu压力是否会被平均到cpu set中的多个cpu, default 1
· cpuset.sched_relax_domain_level -可选 - cpuset.sched_load_balance的策略
o -1 = Use the system default value for load balancing
o 0 = Do not perform immediate load balancing; balance loads onlyperiodically
o 1 = Immediately balance loads across threads on the same core
o 2 = Immediately balance loads across cores in the same package
o 3 = Immediately balance loads across CPUs on the same node or blade
o 4 = Immediately balance loads across several CPUs on architectures withnon-uniform memory access (NUMA)
o 5 = Immediately balance loads across all CPUs on architectures with NUMA
5. device - cgoup的device限制
· 设备黑/白名单
o devices.allow - 允许名单
o devices.deny - 禁止名单
o 语法 - type device_types:node_numbers accesstype - b (块设备) c (字符设备) a (全部设备) access - r读 w 写 m 创建
· devices.list -报告
6. freezer -暂停/恢复 cgroup的限制
· 不能出现在root目录下
· freezer.state - FROZEN停止 FREEZING正在停止 THAWED恢复
7. memory -内存限制
· memory.usage_in_bytes -报告内存限制byte
· memory.memsw.usage_in_bytes -报告cgroup中进程当前所用内存+swap空间
· memory.max_usage_in_bytes -报告cgoup中的最大内存使用
· memory.memsw.max_usage_in_bytes -报告最大使用到的内存+swap
· memory.limit_in_bytes - cgroup -最大内存限制,单位k,m,g. -1代表取消限制
· memory.memsw.limit_in_bytes -最大内存+swap限制,单位k,m,g. -1代表取消限制
· memory.failcnt -报告达到最大允许内存的次数
· memory.memsw.failcnt -报告达到最大允许内存+swap的次数
· memory.force_empty -设为0且无task时,清除cgroup的内存页
· memory.swappiness -换页策略,60基准,小于60降低换出机率,大于60增加换出机率
· memory.use_hierarchy -是否影响子group
· memory.oom_control - 0 enabled,当oom发生时kill掉进程
· memory.stat -报告cgroup限制状态
o cache - page cache, including tmpfs (shmem), in bytes
o rss - anonymous and swap cache, not including tmpfs (shmem), in bytes
o mapped_file - size of memory-mapped mapped files, including tmpfs (shmem),in bytes
o pgpgin - number of pages paged into memory
o pgpgout - number of pages paged out of memory
o swap - swap usage, in bytes
o active_anon - anonymous and swap cache on active least-recently-used (LRU)list, including tmpfs (shmem), in bytes
o inactive_anon - anonymous and swap cache on inactive LRU list, includingtmpfs (shmem), in bytes
o active_file - file-backed memory on active LRU list, in bytes
o inactive_file - file-backed memory on inactive LRU list, in bytes
o unevictable - memory that cannot be reclaimed, in bytes
o hierarchical_memory_limit - memory limit for the hierarchy that containsthe memory cgroup, in bytes
o hierarchical_memsw_limit - memory plus swap limit for the hierarchy thatcontains the memory cgroup, in bytes
8. net_cls
· net_cls.classid -指定tc的handle,通过tc实现网络控制
9.net_prio指定task网络设备优先级
· net_prio.prioidx - a read-only filewhich contains a unique integer value that the kernel uses as an internalrepresentation of this cgroup.
· net_prio.ifpriomap -网络设备使用优先级 - <network_interface><priority>
下面是我的redhat系统的各个子系统的目录结构:
[shayu@hzclov51 ~]$ uname -r 2.6.32-431.el6.x86_64
/cgroup/ ├── blkio │ ├── blkio.io_merged │ ├── blkio.io_queued │ ├── blkio.io_service_bytes │ ├── blkio.io_serviced │ ├── blkio.io_service_time │ ├── blkio.io_wait_time │ ├── blkio.reset_stats │ ├── blkio.sectors │ ├── blkio.throttle.io_service_bytes │ ├── blkio.throttle.io_serviced │ ├── blkio.throttle.read_bps_device │ ├── blkio.throttle.read_iops_device │ ├── blkio.throttle.write_bps_device │ ├── blkio.throttle.write_iops_device │ ├── blkio.time │ ├── blkio.weight │ ├── blkio.weight_device │ ├── cgroup.event_control │ ├── cgroup.procs │ ├── libvirt │ │ ├── blkio.io_merged │ │ ├── blkio.io_queued │ │ ├── blkio.io_service_bytes │ │ ├── blkio.io_serviced │ │ ├── blkio.io_service_time │ │ ├── blkio.io_wait_time │ │ ├── blkio.reset_stats │ │ ├── blkio.sectors │ │ ├── blkio.throttle.io_service_bytes │ │ ├── blkio.throttle.io_serviced │ │ ├── blkio.throttle.read_bps_device │ │ ├── blkio.throttle.read_iops_device │ │ ├── blkio.throttle.write_bps_device │ │ ├── blkio.throttle.write_iops_device │ │ ├── blkio.time │ │ ├── blkio.weight │ │ ├── blkio.weight_device │ │ ├── cgroup.event_control │ │ ├── cgroup.procs │ │ ├── lxc │ │ │ ├── blkio.io_merged │ │ │ ├── blkio.io_queued │ │ │ ├── blkio.io_service_bytes │ │ │ ├── blkio.io_serviced │ │ │ ├── blkio.io_service_time │ │ │ ├── blkio.io_wait_time │ │ │ ├── blkio.reset_stats │ │ │ ├── blkio.sectors │ │ │ ├── blkio.throttle.io_service_bytes │ │ │ ├── blkio.throttle.io_serviced │ │ │ ├── blkio.throttle.read_bps_device │ │ │ ├── blkio.throttle.read_iops_device │ │ │ ├── blkio.throttle.write_bps_device │ │ │ ├── blkio.throttle.write_iops_device │ │ │ ├── blkio.time │ │ │ ├── blkio.weight │ │ │ ├── blkio.weight_device │ │ │ ├── cgroup.event_control │ │ │ ├── cgroup.procs │ │ │ ├── notify_on_release │ │ │ └── tasks │ │ ├── notify_on_release │ │ ├── qemu │ │ │ ├── blkio.io_merged │ │ │ ├── blkio.io_queued │ │ │ ├── blkio.io_service_bytes │ │ │ ├── blkio.io_serviced │ │ │ ├── blkio.io_service_time │ │ │ ├── blkio.io_wait_time │ │ │ ├── blkio.reset_stats │ │ │ ├── blkio.sectors │ │ │ ├── blkio.throttle.io_service_bytes │ │ │ ├── blkio.throttle.io_serviced │ │ │ ├── blkio.throttle.read_bps_device │ │ │ ├── blkio.throttle.read_iops_device │ │ │ ├── blkio.throttle.write_bps_device │ │ │ ├── blkio.throttle.write_iops_device │ │ │ ├── blkio.time │ │ │ ├── blkio.weight │ │ │ ├── blkio.weight_device │ │ │ ├── cgroup.event_control │ │ │ ├── cgroup.procs │ │ │ ├── notify_on_release │ │ │ └── tasks │ │ └── tasks │ ├── notify_on_release │ ├── release_agent │ └── tasks ├── cpu │ ├── cgroup.event_control │ ├── cgroup.procs │ ├── cpu.cfs_period_us │ ├── cpu.cfs_quota_us │ ├── cpu.rt_period_us │ ├── cpu.rt_runtime_us │ ├── cpu.shares │ ├── cpu.stat │ ├── libvirt │ │ ├── cgroup.event_control │ │ ├── cgroup.procs │ │ ├── cpu.cfs_period_us │ │ ├── cpu.cfs_quota_us │ │ ├── cpu.rt_period_us │ │ ├── cpu.rt_runtime_us │ │ ├── cpu.shares │ │ ├── cpu.stat │ │ ├── lxc │ │ │ ├── cgroup.event_control │ │ │ ├── cgroup.procs │ │ │ ├── cpu.cfs_period_us │ │ │ ├── cpu.cfs_quota_us │ │ │ ├── cpu.rt_period_us │ │ │ ├── cpu.rt_runtime_us │ │ │ ├── cpu.shares │ │ │ ├── cpu.stat │ │ │ ├── notify_on_release │ │ │ └── tasks │ │ ├── notify_on_release │ │ ├── qemu │ │ │ ├── cgroup.event_control │ │ │ ├── cgroup.procs │ │ │ ├── cpu.cfs_period_us │ │ │ ├── cpu.cfs_quota_us │ │ │ ├── cpu.rt_period_us │ │ │ ├── cpu.rt_runtime_us │ │ │ ├── cpu.shares │ │ │ ├── cpu.stat │ │ │ ├── notify_on_release │ │ │ └── tasks │ │ └── tasks │ ├── notify_on_release │ ├── release_agent │ ├── tasks │ └── test │ ├── cgroup.event_control │ ├── cgroup.procs │ ├── cpu.cfs_period_us │ ├── cpu.cfs_quota_us │ ├── cpu.rt_period_us │ ├── cpu.rt_runtime_us │ ├── cpu.shares │ ├── cpu.stat │ ├── notify_on_release │ └── tasks ├── cpuacct │ ├── cgroup.event_control │ ├── cgroup.procs │ ├── cpuacct.stat │ ├── cpuacct.usage │ ├── cpuacct.usage_percpu │ ├── libvirt │ │ ├── cgroup.event_control │ │ ├── cgroup.procs │ │ ├── cpuacct.stat │ │ ├── cpuacct.usage │ │ ├── cpuacct.usage_percpu │ │ ├── lxc │ │ │ ├── cgroup.event_control │ │ │ ├── cgroup.procs │ │ │ ├── cpuacct.stat │ │ │ ├── cpuacct.usage │ │ │ ├── cpuacct.usage_percpu │ │ │ ├── notify_on_release │ │ │ └── tasks │ │ ├── notify_on_release │ │ ├── qemu │ │ │ ├── cgroup.event_control │ │ │ ├── cgroup.procs │ │ │ ├── cpuacct.stat │ │ │ ├── cpuacct.usage │ │ │ ├── cpuacct.usage_percpu │ │ │ ├── notify_on_release │ │ │ └── tasks │ │ └── tasks │ ├── notify_on_release │ ├── release_agent │ └── tasks ├── cpuset │ ├── cgroup.event_control │ ├── cgroup.procs │ ├── cpuset.cpu_exclusive │ ├── cpuset.cpus │ ├── cpuset.mem_exclusive │ ├── cpuset.mem_hardwall │ ├── cpuset.memory_migrate │ ├── cpuset.memory_pressure │ ├── cpuset.memory_pressure_enabled │ ├── cpuset.memory_spread_page │ ├── cpuset.memory_spread_slab │ ├── cpuset.mems │ ├── cpuset.sched_load_balance │ ├── cpuset.sched_relax_domain_level │ ├── libvirt │ │ ├── cgroup.event_control │ │ ├── cgroup.procs │ │ ├── cpuset.cpu_exclusive │ │ ├── cpuset.cpus │ │ ├── cpuset.mem_exclusive │ │ ├── cpuset.mem_hardwall │ │ ├── cpuset.memory_migrate │ │ ├── cpuset.memory_pressure │ │ ├── cpuset.memory_spread_page │ │ ├── cpuset.memory_spread_slab │ │ ├── cpuset.mems │ │ ├── cpuset.sched_load_balance │ │ ├── cpuset.sched_relax_domain_level │ │ ├── lxc │ │ │ ├── cgroup.event_control │ │ │ ├── cgroup.procs │ │ │ ├── cpuset.cpu_exclusive │ │ │ ├── cpuset.cpus │ │ │ ├── cpuset.mem_exclusive │ │ │ ├── cpuset.mem_hardwall │ │ │ ├── cpuset.memory_migrate │ │ │ ├── cpuset.memory_pressure │ │ │ ├── cpuset.memory_spread_page │ │ │ ├── cpuset.memory_spread_slab │ │ │ ├── cpuset.mems │ │ │ ├── cpuset.sched_load_balance │ │ │ ├── cpuset.sched_relax_domain_level │ │ │ ├── notify_on_release │ │ │ └── tasks │ │ ├── notify_on_release │ │ ├── qemu │ │ │ ├── cgroup.event_control │ │ │ ├── cgroup.procs │ │ │ ├── cpuset.cpu_exclusive │ │ │ ├── cpuset.cpus │ │ │ ├── cpuset.mem_exclusive │ │ │ ├── cpuset.mem_hardwall │ │ │ ├── cpuset.memory_migrate │ │ │ ├── cpuset.memory_pressure │ │ │ ├── cpuset.memory_spread_page │ │ │ ├── cpuset.memory_spread_slab │ │ │ ├── cpuset.mems │ │ │ ├── cpuset.sched_load_balance │ │ │ ├── cpuset.sched_relax_domain_level │ │ │ ├── notify_on_release │ │ │ └── tasks │ │ └── tasks │ ├── notify_on_release │ ├── release_agent │ └── tasks ├── devices │ ├── cgroup.event_control │ ├── cgroup.procs │ ├── devices.allow │ ├── devices.deny │ ├── devices.list │ ├── libvirt │ │ ├── cgroup.event_control │ │ ├── cgroup.procs │ │ ├── devices.allow │ │ ├── devices.deny │ │ ├── devices.list │ │ ├── lxc │ │ │ ├── cgroup.event_control │ │ │ ├── cgroup.procs │ │ │ ├── devices.allow │ │ │ ├── devices.deny │ │ │ ├── devices.list │ │ │ ├── notify_on_release │ │ │ └── tasks │ │ ├── notify_on_release │ │ ├── qemu │ │ │ ├── cgroup.event_control │ │ │ ├── cgroup.procs │ │ │ ├── devices.allow │ │ │ ├── devices.deny │ │ │ ├── devices.list │ │ │ ├── notify_on_release │ │ │ └── tasks │ │ └── tasks │ ├── notify_on_release │ ├── release_agent │ └── tasks ├── freezer │ ├── cgroup.event_control │ ├── cgroup.procs │ ├── libvirt │ │ ├── cgroup.event_control │ │ ├── cgroup.procs │ │ ├── freezer.state │ │ ├── lxc │ │ │ ├── cgroup.event_control │ │ │ ├── cgroup.procs │ │ │ ├── freezer.state │ │ │ ├── notify_on_release │ │ │ └── tasks │ │ ├── notify_on_release │ │ ├── qemu │ │ │ ├── cgroup.event_control │ │ │ ├── cgroup.procs │ │ │ ├── freezer.state │ │ │ ├── notify_on_release │ │ │ └── tasks │ │ └── tasks │ ├── notify_on_release │ ├── release_agent │ └── tasks ├── memory │ ├── cgroup.event_control │ ├── cgroup.procs │ ├── libvirt │ │ ├── cgroup.event_control │ │ ├── cgroup.procs │ │ ├── lxc │ │ │ ├── cgroup.event_control │ │ │ ├── cgroup.procs │ │ │ ├── memory.failcnt │ │ │ ├── memory.force_empty │ │ │ ├── memory.limit_in_bytes │ │ │ ├── memory.max_usage_in_bytes │ │ │ ├── memory.memsw.failcnt │ │ │ ├── memory.memsw.limit_in_bytes │ │ │ ├── memory.memsw.max_usage_in_bytes │ │ │ ├── memory.memsw.usage_in_bytes │ │ │ ├── memory.move_charge_at_immigrate │ │ │ ├── memory.oom_control │ │ │ ├── memory.soft_limit_in_bytes │ │ │ ├── memory.stat │ │ │ ├── memory.swappiness │ │ │ ├── memory.usage_in_bytes │ │ │ ├── memory.use_hierarchy │ │ │ ├── notify_on_release │ │ │ └── tasks │ │ ├── memory.failcnt │ │ ├── memory.force_empty │ │ ├── memory.limit_in_bytes │ │ ├── memory.max_usage_in_bytes │ │ ├── memory.memsw.failcnt │ │ ├── memory.memsw.limit_in_bytes │ │ ├── memory.memsw.max_usage_in_bytes │ │ ├── memory.memsw.usage_in_bytes │ │ ├── memory.move_charge_at_immigrate │ │ ├── memory.oom_control │ │ ├── memory.soft_limit_in_bytes │ │ ├── memory.stat │ │ ├── memory.swappiness │ │ ├── memory.usage_in_bytes │ │ ├── memory.use_hierarchy │ │ ├── notify_on_release │ │ ├── qemu │ │ │ ├── cgroup.event_control │ │ │ ├── cgroup.procs │ │ │ ├── memory.failcnt │ │ │ ├── memory.force_empty │ │ │ ├── memory.limit_in_bytes │ │ │ ├── memory.max_usage_in_bytes │ │ │ ├── memory.memsw.failcnt │ │ │ ├── memory.memsw.limit_in_bytes │ │ │ ├── memory.memsw.max_usage_in_bytes │ │ │ ├── memory.memsw.usage_in_bytes │ │ │ ├── memory.move_charge_at_immigrate │ │ │ ├── memory.oom_control │ │ │ ├── memory.soft_limit_in_bytes │ │ │ ├── memory.stat │ │ │ ├── memory.swappiness │ │ │ ├── memory.usage_in_bytes │ │ │ ├── memory.use_hierarchy │ │ │ ├── notify_on_release │ │ │ └── tasks │ │ └── tasks │ ├── memory.failcnt │ ├── memory.force_empty │ ├── memory.limit_in_bytes │ ├── memory.max_usage_in_bytes │ ├── memory.memsw.failcnt │ ├── memory.memsw.limit_in_bytes │ ├── memory.memsw.max_usage_in_bytes │ ├── memory.memsw.usage_in_bytes │ ├── memory.move_charge_at_immigrate │ ├── memory.oom_control │ ├── memory.soft_limit_in_bytes │ ├── memory.stat │ ├── memory.swappiness │ ├── memory.usage_in_bytes │ ├── memory.use_hierarchy │ ├── notify_on_release │ ├── release_agent │ └── tasks └── net_cls ├── cgroup.event_control ├── cgroup.procs ├── net_cls.classid ├── notify_on_release ├── release_agent └── tasks 30 directories, 359 files