不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

栏目: 服务器 · Linux · 发布时间: 6年前

内容简介:此文已由作者刘超授权网易云社区发布。欢迎访问使用过Docker的人都知道,Docker使用cgroup来控制进程的资源使用量,在OpenStack中使用KVM同样也存在这个问题,KVM虽然可以做内核的隔离,但是使用起主机上的CPU来,也是互相争抢的,需要使用cgroup控制资源使用量。

此文已由作者刘超授权网易云社区发布。

欢迎访问 网易云社区 ,了解更多网易技术产品运营经验

使用过 Docker 的人都知道,Docker使用cgroup来控制进程的资源使用量,在OpenStack中使用KVM同样也存在这个问题,KVM虽然可以做内核的隔离,但是使用起主机上的CPU来,也是互相争抢的,需要使用cgroup控制资源使用量。

Control Group又称cgroup,用于控制进程的资源使用:CPU, Disk I/O, Memory, Network等。

Cgroup有几个重要的概念:

  • 任务:对应于进程,将进程ID放到cgroup里面,就算cgroup的一个任务,受cgroup控制

  • 层次:

    • cgroup是分层次的,子cgroup会继承父cgroup的设置

    • Cgroup的管理通常使用file system的接口,一个cgroup会被mount成一个cgroup的文件系统,则层次结构对应于文件夹结构

  • 子系统:系统的资源被不同的子系统控制

    • blkio -- 为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB等等)。

    • cpu -- 使用调度程序提供对CPU的cgroup任务访问。

    • cpuacct -- 自动生成cgroup中任务所使用的CPU报告。

    • cpuset -- 为cgroup中的任务分配独立CPU (在多核系统)和内存节点。

    • devices -- 可允许或者拒绝cgroup中的任务访问设备。

    • freezer -- 挂起或者恢复cgroup中的任务。

    • memory -- 设定cgroup中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告。

    • net_cls -- 使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序tc识别从 具体cgroup中生成的数据包。

    • ns -- 名称空间子系统。

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

一、对CPU的控制

CFS (Completely Fair Scheduler) :

  • 将所有可运行的任务放入一棵红黑树,key是vruntime

  • 红黑树是平衡的,左面的任务得到的时间少,右面的任务得到的时间多,最左面的任务有最高的优先级

  • cfs_period_us的意思是cgroup对CPU的调度的干预周期,cfs_quota_us是指则一个周期内这个进程得到的时间片长度。比如cfs_period_us=100000说明100毫秒cgroup进行一次干预,cfs_quota_us=25000表示在100毫秒里面,这个进程能够得到25毫秒的时间片,如果对cgroup进行的修改,则要等到下个100毫秒才起作用

  • cpu.shares是一个相对值,进程之间的cpu使用率按照这个数字的比例来

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

查看cpuset,在如下路径下面:

cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,relatime,cpuset)

cat ubuntutest.libvirt-qemu/cpuset.cpus #0-3

cat ubuntutest2.libvirt-qemu/cpuset.cpus #0-3

两个VM都同时使用四个CPU,为了查看CPU调度,我们使用一个CPU

关闭VM,设置cpuset.cpus

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

重启VM

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

在两台虚拟机上创建一个无限循环的 python 程序

没有设置cgroup的时候,两台虚拟机同时运行这个程序

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

设置cpu.shares

查看现在的设置

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

修改ubuntutest2的设置

echo 4096 > ubuntutest2.libvirt-qemu/cpu.shares

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

也可以通过virsh设置和查看

virsh schedinfo ubuntutest --set cpu_shares=2048

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

设置vcpu_quota

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

二、对block I/O的控制

查看major number和minor number

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

相对值:范围在100到1000

echo 8:0 500 > blkio.weight_device

绝对值(bytes per second):

echo "8:0 10485760" > /cgroup/blkio/testcg/blkio.throttle.read_bps_device

echo "8:0 10485760" > /cgroup/blkio/testcg/blkio.throttle.write_bps_device

使用virsh

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

使用iotop -P -o查看速度

设置cache='none'

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)

设置写入速度

echo "8:0 10485760" > ubuntutest.libvirt-qemu/blkio.throttle.write_bps_device

echo "8:0 20971520" > ubuntutest.libvirt-qemu/blkio.throttle.write_bps_device

不仅Docker会使用Control Group,KVM也会使用Cgroup来控制资源分配 (1)


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法导论(原书第2版)

算法导论(原书第2版)

[美] Thomas H.Cormen、Charles E.Leiserson、Ronald L.Rivest、Clifford Stein / 潘金贵 等 / 机械工业出版社 / 2006-9 / 85.00元

这本书深入浅出,全面地介绍了计算机算法。对每一个算法的分析既易于理解又十分有趣,并保持了数学严谨性。本书的设计目标全面,适用于多种用途。涵盖的内容有:算法在计算中的作用,概率分析和随机算法的介绍。书中专门讨论了线性规划,介绍了动态规划的两个应用,随机化和线性规划技术的近似算法等,还有有关递归求解、快速排序中用到的划分方法与期望线性时间顺序统计算法,以及对贪心算法元素的讨论。此书还介绍了对强连通子图......一起来看看 《算法导论(原书第2版)》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具