1.6. CPU负载均衡

Posted broler

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.6. CPU负载均衡相关的知识,希望对你有一定的参考价值。

Linux内核倾向于让所有的CPU核负载均衡,这样的策略对于系统层面的资源管理的角度来说是最优的,并且功耗上也有优势,因为低频率运行的CPU与高频运行的CPU功耗不成正比。对于大部分的应用程序来,不同的线程分布在不同的CPU上也能带来降低延迟的效果。但是跨核唤醒相比同核唤醒是有成本的,所以这里对于应用程序是好处还是坏处并不绝对。但是公平是CFS调度器的出发点,所以负载均衡的过程是必须的。

每一次TTWU都是一次负载均衡,因为会选择当前处于空闲状态的CPU作为最后的选核手段。只要CPU的占用率不是百分百,总是可以遇到当前处于空闲状态的CPU的,TTWU就可以完成负载均衡的工作。但是随着CPU占用率的提高,依靠TTWU来完成负载均衡就会效率越来越低,因为越来越不容易遇到CPU为空闲的情况。

此外,在__schedule()函数中也有进行负载均衡。__schedule()需要选择下一个要运行的任务,如果当前rq中没有了,也就是当前CPU马上要进入idle了,这个时候就会触发一次负载均衡,以从其它的繁忙的CPU中拉取任务到当前CPU。

还有一种周期性的负载均衡,在HZ频率的周期性调度入口进行的。这个入口是检测下一次负载均衡的时间窗口到达的,通过触发SCHED_SOFTIRQ软中断来进行的。

__schedule()的newidle均衡和周期性的软中断均衡最终都是通过load_balance函数进行的负载均衡。这个函数输入目标CPU和rq,选择最繁忙的调度组里的CPU,从该CPU上摘任务到目标rq上。

newidle均衡和周期性均衡的目标CPU都很明确,都是当前执行均衡的CPU,所以两者的逻辑很类似,都是遍历所有的调度域,对每个调度域调用load_balance函数。

周期性均衡load_

以上是关于1.6. CPU负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

负载均衡集群-详解

nginx负载均衡配置策略

CPU负载均衡实现

一文读懂|Linux 进程管理之CFS负载均衡

nginx 负载均衡5种配置方式

记录一个多核CPU负载不均衡问题(动态绑定进程到指定cpu:taskset -pc $CPU $PID)