部署服务过程中,通常会将一类业务进程部署到某台服务器上,服务器的 CPU 利用率取决于业务进程的压力情况,一般情况下,服务器的整体 CPU 利用率往往比较低。为了提高服务器 CPU 的利用率,可以在服务器上混合部署一些优先级较低的任务,这样可以显著提高整机的 CPU 利用率,降低硬件成本。这里定义混部到机器上的优先级较低的任务称之为“离线任务”或是“低优先级任务”。
混合部署解决了 CPU 利用率低的问题,但是会导致混布任务之间的 CPU 争抢,从而使得原先的重要业务指标(运行时长,延迟等)受到影响。为了解决这个问题,CPU QoS 引入了绝对抢占机制,允许重要业务进程在可运行的时候无条件抢占不重要业务进程,保证在提高整机 CPU 利用率的同时,重要业务进程不受影响。
基本原理
用户可以通过给任务/容器设定不同的优先级,来指定内核对任务/容器的调度行为。例如优先级为0的容器和优先级为7的容器同时运行在同一个 CPU 上时,优先级为0的容器只要可以运行,总是会无条件抢占优先级为7的容器,直至高优先级容器进程运行完成或是阻塞休眠,低优先级容器中的进程才会被调度执行。
QoS Agent 支持用户设置8个不同级别(0-7)的优先级,优先级为0-6之间的容器则不存在绝对抢占的关系,按照 CPU 的使用比例进行资源的划分和限流。两个业务,一个优先级设置成0,另一个设置成6,之间不会因为优先级划分资源。划分资源只是在节点资源发生竞争时,不同的 Pod 按照 Request 的资源申请量进行比例划分,详情可参见 文档。将一些离线作业优先级设置为7,在提高机器利用率的同时,保证高优和延迟敏感的在线业务不受离线业务的影响。