Linux下cgroups可用于物理内存的控制 , 适用于多种应用场景 , 因为cgroups中的东西较多 , 本文就给大家简单介绍下Linux cgroups , 让大家对其有个初步的了解 。
从 2.6.24 版本开始 , linux 内核提供了一个叫做 cgroups(控制组)的特性 。cgroups 就是 control groups 的缩写 , 用来对一组进程所占用的资源做限制、统计、隔离 。也是目前轻量级虚拟化技术 lxc (linux container)的基础之一 。每一组进程就是一个控制组 , 也就是一个 cgroup 。cgroups 分为几个子系统 , 每个子系统代表一种设施或者说是资源控制器 , 用来调度某一类资源的使用 , 如 cpu 时钟、内存、块设备 等 。在实现上 , cgroups 并没有增加新的系统调用 , 而是表现为一个 cgroup 文件系统 , 可以把一个或多个子系统挂载到某个目录 。如
代码如下:
mount -t cgroup -o cpu cpu /sys/fs/cgroup/cpu
就将 cpu 子系统挂载在了 /sys/fs/cgroup/cpu。也可以在一个目录上挂载多个子系统 , 甚至全部挂载到一个目录也是可以的 , 不过我觉得 , 把每个子系统都挂载在不同目录会有更好的灵活性 。用 mount|awk ‘$5==“cgroup” {print $0}’ 可以看到当前挂载的控制组 。用 cat /proc/cgroups 可以看到当前所有控制组的状态 。下面这个脚本 , 可以把全部子系统各种挂载到各自的目录上去 。
代码如下:
#!/bin/bash《/p》 《p》cgroot=“${1:-/sys/fs/cgroup}”
subsys=“${2:-blkio cpu cpuacct cpuset devices freezer memory net_cls net_prio ns perf_event}”《/p》 《p》mount -t tmpfs cgroup_root “${cgroot}”
for ss in $subsys; do
mkdir -p “$cgroot/$ss”
mount -t cgroup -o “$ss” “$ss” “$cgroot/$ss”
done
看看那些目录里都有些啥 , 比如 ls 一下 /sys/fs/cgroup/cpu 。
代码如下:
cgroup.event_control cpu.cfs_period_us cpu.rt_period_us cpu.shares notify_on_release tasks
cgroup.procs cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat release_agent
其中 “cpu.” 开头的就是这个子系统里特有的东西 。其他的那些是每个子系统所对应目录里都有的 。这些文件就是用来读取资源使用信息和进行资源限制的 。要创建一个控制组 , 就在需要的子系统里创建一个目录即可 。如 mkdir /sys/fs/cgroup/cpu/foo 就创建了一个 /foo 的控制组 。在新建的目录里就会出现同样一套文件 。在这个目录里 , 也一样可以继续通过创建目录来创建 cgroup 。也就是说 , cgroup 是可以和目录结构一样有层次的 。对与每个子系统挂载点点目录 , 就相当于根目录 。每一条不同的路径就代表了一个不同的 cgroup 。在不同的子系统里 , 路径相同就代表了同一个控制组 。如 , 在 cpu、memory 中都有 foo/bar 目录 , 就可以用 那 /foo/bar 来操作 cpu、memory 两个子系统 。对于同一个子系统 , 每个进程都属于且只属于一个 cgroup , 默认是在根 cgroup 。层次结构方便了控制组的组织和管理 , 对于某些配置项来说 , 层次结构还和资源分配有关 。另外 , 也可以修改某个目录的 owner , 让非 root 用户也能操作某些特定的安全组 。
cgroups 的设置和信息读取是通过对那些文件的读写来进行的 。例如
代码如下:
# echo 2048 》/sys/fs/cgroup/cpu/foo/cpu.shares
推荐阅读
- 中国30岁男人平均收入 正常90后收入表
- 过来人中考备战三大经验 备战中考
- 拼多多退款平台处理中要多久
- 股市技术分析“三绝”其中这本最经典 底部三绝
- 发视频icloud同步中什么意思
- 全自动伞怎么打开
- 网贷还在还款中可以贷款买房吗
- snapchat怎么设置中文
- 中国皇室血统的13个姓 皇室姓氏有哪些
- 传统调味品酱油的种类