如何确定系统负载均衡频率?

发布时间 2023-10-08 09:45:56作者: 温暖的电波

背景

有时候系统中的负载均衡过于频繁可能会导致CPU的sys升高;另一方面,过度的负载均衡或者不合理的负载均衡返回会引起任务颠簸影响性能。

而系统的负载均衡又分为 tick balance、nohz idle balance以及newidle balance。因此有时候我们了解一个系统中负载均衡的频率,甚至是哪种类型的负载均衡频率可能对系统性能调优有一定的帮助。

方法1

nohz idle balance和周期tick balance采用的是SCHED_SOFTIRQ软中断进行均衡;

而new idle balance则是在任务调度切换流程中pick_next_task_fair上下文触发的;

从这个意义上说,可以通过/proc/softirqs | grep SCHED 观察,但是不够全面,因为无法观察到new idle balance的情况。

方法2

在load_balance()函数入口会schedstat_inc(sd->lb_count[idle])来增加enter balance计数, 参数idle可以取值:CPU_IDLE(0)、CPU_NOT_IDLE(1)、CPU_NEWLY_IDLE(2)

在load_balance()函数成功完成后,会schedstat_inc(sd->lb_balanced[idle])来增加balanced计数

而sd->lb_count[idle]的数量可以在/proc/schedstat中每个domainX行的第3、11、19列(列从1开始计数)分别对应着这个domainX的CPU_IDLE、CPU_NOT_IDLE、CPU_NEWLY_IDLE次数

而sd->lb_balanced[idle]的数量可以在/proc/schedstat中每个domainX行的第4、12、20列分别对应着这个domainX的CPU_IDLE、CPU_NOT_IDLE、CPU_NEWLY_IDLE次数

 

总结

上面的两种方法中,方法2更加推荐。因为它更加精确的反映了进、出load balance当前情况,以及更精细的给出了是哪一种load balance。