control groups
Linux Container
LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,
而且不需要提供指令解释机制以及全虚拟化的其他复杂性 LXC在资源管理方面依赖于Linux内核的cgroups子系统
1.cgroup全称是control groups
cgroups是linux内核中的机制,这种机制可以根据特定的行为把一系列的任务,
子任务整合或者分离,按照资源划分的等级的不同,从而实现资源统一控制的框架,
cgroup可以控制、限制、隔离进程所需要的物理资源,
包括cpu、内存、IO,为容器虚拟化提供了最基本的保证,
是构建docker一系列虚拟化的管理工具
task cgroup subsystem hierarchy
对进程进行分组 并在分组的基础上对进程进行监控和资源控制管理等
2.
01.cat /proc/cgroups
通过查看/proc/[pid]/cgroup eg: cat /proc/777/cgroup
(since Linux 2.6.24)知道指定进程属于哪些cgroup
02.cgroup相关的所有操作都是基于内核中的cgroup virtual filesystem
/sys/fs/cgroup/
绑定进程到指定cpu核数
限制进程cpu使用率 限制内存使用量 限制磁盘读取速度
03.Linux支持下面12种subsystem
cpuset 绑定cgroup到指定CPUs和NUMA节点
cpu 用来限制cgroup的CPU使用率。
cpuacct 统计cgroup的CPU的使用率。
memory 统计和限制cgroup的内存的使用率,包括process memory, kernel memory, 和swap。
blkio 限制cgroup访问块设备的IO速度
devices 限制cgroup创建(mknod)和访问设备的权限。
freezer suspend和restore一个cgroup中的所有进程。
net_prio 针对每个网络接口设置cgroup的访问优先级。
net_cls 将一个cgroup中进程创建的所有网络包加上一个classid标记,用于tc和iptables。 只对发出去的网络包生效,对收到的网络包不起作用。
net_prio 针对每个网络接口设置cgroup的访问优先级。
perf_event 对cgroup进行性能监控
hugetlb 限制cgroup的huge pages的使用量。
pids 限制一个cgroup及其子孙cgroup中的总进程数。
systemd
CentOS 7 中默认的资源隔离是通过 systemd 进行资源控制的,systemd 内部使用 cgroups 对其下的单元进行资源管理,
包括 CPU、BlcokIO 以及 MEM,通过 cgroup 可以 。
systemd使用了cgroup与fanotify等组
systemd 的资源管理主要基于三个单元 service、scope 以及 slice
###systemctl 是一个systemd工具,主要负责控制systemd系统和服务管理器
systemctl show toptest
##获取当前某个服务的CPU分配额
systemctl show -p CPUShares docker.service
##列出当前使用的运行等级
systemctl get-default
####
systemd-cgls
systemd-cgls的作用是递归地显示指定 CGroup 的继承链
systemd-analyze
### 按CPU、内存、输入和输出列出控制组
systemd-cgtop
检测相关虚拟化信息:
sudo dmidecode -s system-manufacturer
systemctl show -p CPUShares