$lssubsys -am
cpuset,cpu,cpuacct /sys/fs/cgroup/cpuset,cpu,cpuacct
blkio /sys/fs/cgroup/blkio
memory /sys/fs/cgroup/memory
devices /sys/fs/cgroup/devices
freezer /sys/fs/cgroup/freezer
net_cls,net_prio /sys/fs/cgroup/net_cls,net_prio
perf_event /sys/fs/cgroup/perf_event
hugetlb /sys/fs/cgroup/hugetlb
pids /sys/fs/cgroup/pids
net_cgroup /sys/fs/cgroup/net_cgroup
每一行是一个子系统和他对应的挂载信息,比如第一行,是说cpuset子系统是挂载在/sys/fs/cgroup/cpuset目录下,进入/sys/fs/cgroup/cpuset目录
$cd /sys/fs/cgroup/cpuset
$ls -rlt
total 0
drwxr-xr-x 39 root root 0 Aug 2 10:48 system.slice
-rw-r--r-- 1 root root 0 Aug 18 08:48 cgroup.ns_readonly
-rw-r--r-- 1 root root 0 Aug 18 08:48 cpuset.mems
-rw-r--r-- 1 root root 0 Aug 18 08:48 cpuset.memory_pressure_enabled
-r--r--r-- 1 root root 0 Aug 18 08:48 cpu.stat
-rw-r--r-- 1 root root 0 Aug 18 08:48 cpuset.sched_relax_domain_level
-rw-r--r-- 1 root root 0 Aug 18 08:48 cpuset.mem_exclusive
-r--r--r-- 1 root root 0 Aug 18 08:48 cpuset.memory_pressure
-rw-r--r-- 1 root root 0 Aug 18 08:48 cpuset.cpus
-rw-r--r-- 1 root root 0 Aug 18 08:48 cpu.rt_runtime_us
-rw-r--r-- 1 root root 0 Aug 18 08:48 cpuset.mem_hardwall
-rw-r--r-- 1 root root 0 Aug 18 08:48 cpuacct.usage
-rw-r--r-- 1 root root 0 Aug 18 08:48 cpu.rt_period_us
-r--r--r-- 1 root root 0 Aug 18 08:48 cpuacct.stat
-rw-r--r-- 1 root root 0 Aug 18 08:48 cpuset.memory_migrate
-rw-r--r-- 1 root root 0 Aug 18 08:48 cgroup.clone_children
-rw-r--r-- 1 root root 0 Aug 18 08:48 release_agent
-rw-r--r-- 1 root root 0 Aug 18 08:48 cpuset.memory_spread_page
-r--r--r-- 1 root root 0 Aug 18 08:48 cpuacct.usage_percpu_sys
-rw-r--r-- 1 root root 0 Aug 18 08:48 cpuset.sched_load_balance
每一行都是一个
自己也可以创建一个目录用来限制自己服务的cpu资源使用,比如创建一个my_task,并进入目录,发现已经有一些默认配置
$ls -rlt
total 0
-r--r--r-- 1 root root 0 Aug 18 08:55 memory.pressure
-r--r--r-- 1 root root 0 Aug 18 08:55 cpu.stat
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpuset.sched_relax_domain_level
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpuset.mems
-r--r--r-- 1 root root 0 Aug 18 08:55 cpuset.memory_pressure
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpuset.mem_exclusive
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpuset.cpus
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpu.rt_runtime_us
-rw-r--r-- 1 root root 0 Aug 18 08:55 cgroup.ns_readonly
-rw-r--r-- 1 root root 0 Aug 18 08:55 tasks
-rw-r--r-- 1 root root 0 Aug 18 08:55 notify_on_release
-r--r--r-- 1 root root 0 Aug 18 08:55 memory.health
-rw-r--r-- 1 root root 0 Aug 18 08:55 memory.blackbox
-r--r--r-- 1 root root 0 Aug 18 08:55 io.pressure
-r--r--r-- 1 root root 0 Aug 18 08:55 io.health
-rw-r--r-- 1 root root 0 Aug 18 08:55 io.blackbox
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpu.shares
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpuset.trick_tasks
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpuset.trick_exempt_tasks
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpuset.trick_cpus
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpuset.sched_load_balance
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpuset.memory_spread_slab
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpuset.memory_spread_page
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpuset.memory_migrate
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpuset.mem_hardwall
-r--r--r-- 1 root root 0 Aug 18 08:55 cpuset.effective_mems
-r--r--r-- 1 root root 0 Aug 18 08:55 cpuset.effective_cpus
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpuset.cpu_exclusive
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpu.rt_period_us
-r--r--r-- 1 root root 0 Aug 18 08:55 cpu.pressure
-r--r--r-- 1 root root 0 Aug 18 08:55 cpu.health
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpu.cfs_quota_us
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpu.cfs_period_us
-rw-r--r-- 1 root root 0 Aug 18 08:55 cpu.bvt_warp_ns
下面可以自己修改这些配置,cpu.cfs_quota_us的默认配置是-1,把它修改为4000
echo 40000 > /sys/fs/cgroup/cpuset/my_task/cpu.cfs_quota_us
然后把我们把这个限制应用到对应的进程
echo {pid} > /sys/fs/cgroup/cpuset/my_task/tasks
## 或者是下面这种方式
echo {pid} > /sys/fs/cgroup/cpuset/my_task/cgroup.procs
两种方式的区别是,下面的方式会将进程下的线程也一起写入tasks中,也会被限制
特殊的,如果是直接将pid写入/sys/fs/cgroup/cpuset/cgroup.procs,就相当于把该线程写入了根组,解除对他的限制
上面这个例子中,my_task就是一个“控制族群”,my_task/cpu.cfs_quota_us就是一个“子系统”