Cgroup的CPU资源隔离介绍&docker cpu限制

本文详细介绍了Docker中CPU资源限制的几种方式,包括cpuset、cpuquota和cpushares的工作原理及其如何影响容器的CPU使用率。此外还解释了Docker中--cpu-shares、--cpu-period和--cpu-quota等参数的具体用法。

http://www.tuicool.com/articles/Jniemin

这个链接主要介绍了cgroup中使用的三种cpu资源限制方式

  1. cpuset隔离方式是以分配核心的方式进行资源隔离,可以提供的资源分配最小粒度是核心,不能提供更细粒度的资源隔离,但是隔离之后运算的相互影响最低。需要注意的是在服务器开启了超线程的情况下,要小心选择分配的核心,否则不同cgroup间的性能差距会比较大。
  2. cpuquota给我们提供了一种比cpuset可以更细粒度的分配资源的方式,并且保证了cgroup使用cpu比率的上限,相当于对cpu资源的硬限制。
  3. cpushares给我们提供了一种可以按权重比率弹性分配cpu时间资源的手段:当cpu空闲的时候,某一个要占用cpu的cgroup可以完全占用剩余cpu时间,充分利用资源。而当其他cgroup需要占用的时候,每个cgroup都能保证其最低占用时间比率,达到资源隔离的效果。


http://blog.csdn.net/s1070/article/details/52301410

http://blog.csdn.net/asd05txffh/article/details/52267818

这两个链接主要介绍了docker中 CPU限制参数

目前 Docker 支持 CPU 资源限制选项

  • --cpu-shares                    CPU shares (relative weight)
  • --cpu-period                    Limit CPU CFS (Completely Fair Scheduler) period
  • --cpu-quota                     Limit CPU CFS (Completely Fair Scheduler) quota
  • --cpuset-cpus                   CPUs in which to allow execution (0-3, 0,1)

2.1 -c or --cpu-shares参数的使用

    默认所有的容器对于 CPU 的利用占比都是一样的,-c 或者 --cpu-shares 可以设置 CPU 利用率权重,默认为 1024,可以设置权重为 2 或者更高(单个 CPU 为 1024,两个为 2048,以此类推)。如果设置选项为 0,则系统会忽略该选项并且使用默认值 1024。通过以上设置,只会在 CPU 密集(繁忙)型运行进程时体现出来。当一个 Container 空闲时,其它容器都是可以占用 CPU 的。cpu-shares 值为一个相对值,实际 CPU 利用率则取决于系统上运行容器的数量。

    假如一个 1core 的主机运行 3 个 container,其中一个 cpu-shares 设置为 1024,而其它 cpu-shares 被设置成 512。当 3 个容器中的进程尝试使用 100% CPU 的时候「尝试使用 100% CPU 很重要,此时才可以体现设置值」,则设置 1024 的容器会占用 50% 的 CPU 时间。如果又添加一个 cpu-shares 为 1024 的 container,那么两个设置为 1024 的容器 CPU 利用占比为 33%,而另外两个则为 16.5%。简单的算法就是,所有设置的值相加,每个容器的占比就是 CPU 的利用率,如果只有一个容器,那么此时它无论设置 512 或者 1024,CPU 利用率都将是 100%。当然,如果主机是 3core,运行 3 个容器,两个 cpu-shares 设置为 512,一个设置为 1024,则此时每个 container 都能占用其中一个 CPU 为 100%。

2.2 --cpu-period & --cpu-quota

   这两个选项是1.7版本出现的。

   docker提供了–cpu-period、–cpu-quota两个参数控制容器可以分配到的CPU时钟周期。–cpu-period是用来指定容器对CPU的使用要在多长时间内做一次重新分配,而–cpu-quota是用来指定在这个周期内,最多可以有多少时间用来跑这个容器。跟–cpu-shares不同的是这种配置是指定一个绝对值,而且没有弹性在里面,容器对CPU资源的使用绝对不会超过配置的值。

cpu-period和cpu-quota的单位为微秒(μs)。cpu-period的最小值为1000微秒,最大值为1秒(10^6 μs),默认值为0.1秒(100000 μs)。cpu-quota的值默认为-1,表示不做控制。

举个例子,如果容器进程需要每1秒使用单个CPU的0.2秒时间,可以将cpu-period设置为1000000(即1秒),cpu-quota设置为200000(0.2秒)。当然,在多核情况下,如果允许容器进程需要完全占用两个CPU,则可以将cpu-period设置为100000(即0.1秒),cpu-quota设置为200000(0.2秒)。 

2.3 --cpu-set-cpus

cpu-sets,指定容器使用的核心。使用测试容器测试,指定容器使用0,3核心:

docker run --name cpuuse -d --cpuset-cpus=0,3  fangfenghua/cpuusetest 4

Docker作为容器技术的佼佼者,目前仍是各大企业在大量使用的技术,也是学习k8s必备的基础知识。课不在多,学习一门高质量课程足矣。课程目标:【提供及时的答疑服务粉丝群】-【只需要一门课程即可学会Docker】-让你轻松愉快的学习技术为什么给大家提供技术答疑群?1.在技术群里大家可以相互交流,扎到志同道合的小伙伴一起学习2.搞技术的避免闭门造成,要经常沟通,工作学习遇到问题,在技术群提出来,大家帮你解决,会提升你解决问题的效率,利用空闲时间可以学习新的知识为什么给大家进行答疑辅导?提供及时高质量的售后服务,先超老师亲自答疑指导1.再好的课程,没有答疑,那就不能称得上是完整的课程2.学习遇到问题,老师的一句话可能会解决困扰你许久的难题3.老师在线答疑,远程一对一辅导可以提升你学习的进度,帮助你快速解决学习工作的问题4.老师会把最新知识题库实时更新,让你买一门课程,可以一直受用讲师介绍k8s架构师、云计算架构师,就职于世界500强上市公司,国内最早一批K8S布道者,具有多年在线教育培训经验,发表过多篇Linux、DevOps、K8S、自动化等方面的系列文章,累计阅读量现已突破100万。目前主要负责k8s以及DevOps等技术的研发、落地实施、调优、故障排查设计等工作。同时拥有RHCE、EHCA、CKA等技术认证证书。参加过新一代云计算大会,作为主讲嘉宾分享了《去中心化云计算如何助力企业实现智能化转型》。获得过北京日报媒体单独采访报道。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值