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

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cgroup(Control Group)是Linux内核中的一个功能,用于对不同进程或进程组进行资源限制隔离。其中,CFS(Completely Fair Scheduler)是Linux内核中的一种调度算法,用于对多个进程进行公平的CPU时间片分配。 cgroupCPU隔离的原理是通过CFS调度算法和cgroup分组管理来实现的。首先,用户可以使用cgroup机制将一组相关进程划分到一个或多个cgroup中。然后,通过对cgroup设置不同的CPU资源限制,实现对这些进程的CPU使用量进行控制。 具体实现的原理是,内核通过cgroup结构体来维护cgroup信息,并通过层次结构组织多个cgroup。在每个cgroup中,可以通过设置相应的参数来控制CPU的使用。例如,可以将一组进程划分到一个单独的cgroup中,并设置该cgroupCPU份额(cpu.shares)来决定其获取CPU时间片的优先级。相对而言,具有更高份额的cgroup获得更多的CPU时间片,优先进行CPU调度。 另外,cgroup还提供了其他参数,如cpu.cfs_quota_us和cpu.cfs_period_us。使用这两个参数可以限制一个cgroup在一定时间段内获取的CPU时间片数量。并结合cfs.bandwidth来控制CPU的使用。这样可以进一步限制每个cgroupCPU使用量,保证在物理机的CPU资源有限的情况下,每个cgroup获得公平的CPU时间片分配。 总而言之,cgroup通过使用CFS调度算法和设置cgroup参数,可以实现对CPU隔离限制。这样可以确保不同的进程组在使用CPU资源时能够公平竞争,避免某个进程或进程组占用过多的CPU,从而提高整个系统的性能和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值