Docker的CPU调度问题

By Gavin     @2019-12-12     1529 views

调度配置

参考官方文档 Configure the default CFS scheduler

可以通过设置 –cpu-period= 和 –cpu-quota= 参数来限制Docker占用的资源

Docker 1.13 起支持 –cpus= 设置CPU限额

在使用period和quota的时候,如果设置不好,有可能使得容器在时间轴上有CPU的空窗期,如果指定cpus而不设置另外俩参数,cpu-period默认为100ms

为什么会有CPU空窗期

假设宿主机有4个CPU,period=100ms,quota=100ms,相当于1 CPU的资源。每个period分为10格,则每格10ms,如下图:

docker cpu

图中蓝色背景表示被执行,灰色表示没有quota的空窗期,从图中可以看出:

  • 正常情况并发不高的时候,CPU分配比较均匀,Period 1只有20ms空窗期,程序得不到执行

  • 如果并发比较高,在Period 2的前30ms就占用全部的quota,则后面会有70ms的空窗时间程序得不到执行

CFS (Completely Fair Scheduler) 相关参考

CFS Bandwidth Control

CFS (Completely Fair Scheduler) in the Linux kernel

Gavin's Daily

© 2019-2020 Gavin's GoBlog