Cgroups概述
从 2.6.24 版本开始,linux 内核提供了一个叫做 Cgroups的特性。Cgroups是control groups的缩写,是一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如cpu,memory,IO等)的机制。

tasks 和 cgroups.procs 是用来管理控制组中的进程的。要把一个进程加入到某个控制组,把 pid 写入到相应目录的 tasks 文件即可。如
# echo 5678 >/cgroup/cpu/rule3001/tasks
就把 5678 进程加入到了 rule3001控制组。那么 tasks 和 cgroups.procs 有什么区别呢?前面说的对“进程”的管理限制其实不够准确。系统对任务调度的单位是线程。在这里,tasks 中看到的就是线程 id。而 cgroups.procs 中是线程组 id,也就是一般所说的进程 id 。将一个一般的 pid 写入到 tasks 中,只有这个 pid 对应的线程,以及由它产生的其他进程、线程会属于这个控制组,原有的其他线程则不会。而写入 cgroups.procs 会把当前所有的线程都加入进去。如果写入 cgroups.procs 的不是一个线程组 id,而是一个一般的线程 id,那会自动找到所对应的线程组 id 加入进去。进程在加入一个控制组后,控制组所对应的限制会即时生效。想知道一个进程属于哪些控制组,可以通过 cat /proc/<pid>/cgroup 查看。
cpu.cfs_period_us 时间周期
cpu.cfs_quota_us 在时间周期内可使用的 cpu 时间
cpu.cfs_quota_us 也是可以大于 cpu.cfs_period_us 的,这主要是对于多核情况。有 n 个核时,一个控制组中的进程自然最多就能用到 n 倍的 cpu 时间。
cpu.rt_period_us
cpu.rt_runtime_us
这两个对应的是实时进程的限制,平时可能不会有机会用到。
cpu.shares 不是限制进程能使用的绝对的 cpu 时间,而是控制各个组之间的配额。
比如
/cpu/cpu.shares : 1024
/cpu/foo/cpu.shares : 2048
那么当两个组中的进程都满负荷运行时,/foo 中的进程所能占用的 cpu 就是 / 中的进程的两倍。如果再建一个 /foo/bar 的 cpu.shares 也是 1024,且也有满负荷运行的进程,那 /、/foo、/foo/bar 的 cpu 占用比就是 1:2:1 。前面说的是各自都跑满的情况。如果其他控制组中的进程闲着,那某一个组的进程完全可以用满全部 cpu。可见通常情况下,这种方式在保证公平的情况下能更充分利用资源。
cpu.stat
nr_periods 219736029
nr_throttled 0
throttled_time 0
nr_periods、nr_throttled 就是总共经过的周期,和其中受限制的周期。throttled_time 就是总共被控制组掐掉的 cpu 使用时间。
7. 用 cgroups 管理IO资源

blkio 子系统里大部分都是只读的状态报告,可写的参数就只有下面这几个:
blkio.throttle.read_bps_device
blkio.throttle.read_iops_device
blkio.throttle.write_bps_device
blkio.throttle.write_iops_device
blkio.weight
blkio.weight_device
这些都是用来控制进程的磁盘 io 的。
blkio子模块有2种限制模式:
1. throttle,限制每个进程能使用的IOPS或者吞吐量。
2. weight,限制每个进程能使用的IOPS的能力的比例,必须通过CFQ调度器来实现。
blkio子系统里有很多统计项,通过这些统计项更好地统计、监控进程的 io 情况。
blkio.io_merged 各设备中各类型 io 请求合并的次数
blkio.io_queued 各设备中各类型 io 请求当前在队列中的数量
blkio.io_service_bytes 各类型 io 换入者或出各设备的字节数
blkio.io_serviced 各设备中执行的各类型 io 操作数,分read、write、sync、async 和 total
blkio.io_service_time 各设备中执行的各类型 io 时间,单位微秒
blkio.io_wait_time 各设备中各类型 io 在队列中的 等待时间
blkio.sectors 换入或者换出各设备的扇区数
blkio.time 各设备的 io 访问时间,单位毫秒
参考:
http://www.cnblogs.com/lisperl/archive/2013/01/14/2860353.html#2761494
http://xiezhenye.com/2013/10/linux-cgroups-%E6%A6%82%E8%BF%B0.html
Cgroups概述的更多相关文章
- cgroups简单使用
Cgroups控制系统资源的分配(cpu.mem.io) 1.cgroups概述 CGroup是Linux内核提供的可以限制.隔离进程组 (process groups) 所使用的物理资源 (如 cp ...
- Linux操作系统(第二版)(RHEL 8/CentOS 8)
Linux操作系统(第二版)(RHEL 8/CentOS 8) http://www.tup.tsinghua.edu.cn/booksCenter/book_08172501.html Linux操 ...
- Using YARN with Cgroups testing in sparkml cluster
部署服务器: sparkml 集群 ########### sparkml ########## sparkml-node1 # yarn resource manager sparkml-node2 ...
- 1、Docker概述与安装
1.Docker概述 原文地址:https://docs.docker-cn.com/engine/docker-overview/#docker-engine Docker是一个开发,集装,运行应用 ...
- docker学习笔记(1)概述、原理学习、常用命令
一.Docker概述 Docker是基于Go语言实现的云开源项目,诞生于2013年初,目前主流的Linux操作系统已支持Docker,如Redhat RHEL6.5/CentOS6.5.Ubuntu ...
- Hadoop - YARN 概述
一 概述 Apache Hadoop YARN (Yet Another Resource Negotiator,还有一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源 ...
- docker概述和安装及基本操作
一:概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用 ...
- docker概述和安装
一:概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用 ...
- Docker(1)--概述
Docker概述 Docker是一个用于开发,交付和运行应用程序的开放平台.Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件.借助Docker,您可以以与管理应用程序相同的方式来管理 ...
随机推荐
- custom activities
Useful Sharepoint Designer Custom Workflow Activities http://spdactivities.codeplex.com/ http://stac ...
- iOS基本网络请求
常见的网络请求有同步GET, 同步POST, 异步GET, 异步POST. GET请求和POST请求的区别: 1. GET请求的接口会包含参数部分,参数会作为网址的一部分,服务器地址与参数之间通过 ? ...
- struts2+hibernate-jpa+Spring+maven 整合(2)
1.修改pom.xml 1. 添加 slf4j-api <dependency> <groupId>org.slf4j</groupId> <artifac ...
- centos7安装mplayer以及出现的各种问题
首先,centos7默认的视频播放器基本不能用,这里我们选择mplayer作为视频播放器. 安装的过程,痛并快乐着....... 首先我们去mplayer的官网下载需要的文件,http://www.m ...
- WEB开发者必备的7个JavaScript函数
防止高频调用的debounce函数 这个 debounce 函数对于那些执行事件驱动的任务来说是必不可少的提高性能的函数.如果你在使用scroll, resize, key*等事件触发执行任务时不使用 ...
- 【数学】[BZOJ 3884] 上帝与集合的正确用法
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元” ...
- vi查找替换
:n,$s/value1/value2/g 从第n行到最后一行,将value1替换成value2
- FiddlerScript开发
1.为Fiddler会话列表添加自定义列 只需要为你的方法(方法名任意)添加BindUIColumn Attribute 就可以添加自定义列到Session List,下面的代码添加Method列到会 ...
- findBugs学习小结
原文地址:http://www.cnblogs.com/doit8791/archive/2012/10/22/2734730.html 今天代码质量再次强调java代码提交SVN前要经过findBu ...
- UIViewController中各方法调用顺序及功能详解
UIViewController中各方法调用顺序及功能详解 UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, ...