linux kernel 负载均衡总结

Linux操作系统支持SMP,并且同时会运行多个进程,这些进程是如何在多个CPU之间调度的,如何进行负载均衡?


进程在如下时机决定在哪个CPU运行

1.进程被唤醒的时候,比如进程收到网络数据包,或者完成磁盘IO操作

2.进程刚被fork出来


Linux通过select_task_rq函数决定进程在哪一个CPU上进行运行。该函数在./kernel/sched/core.c中实现。

int select_task_rq(struct task_struct *p, int cpu, int sd_flags, int wake_flags)


select_task_rq的调用时机:

wake_up_new_task: 进程刚被fork出来

try_to_wake_up:进程被唤醒的时候


select_task_rq函数在决定进程在哪个CPU上运行会考虑哪些因素?


static int select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_flags)

{

        int cpu = smp_processor_id();

        for_each_domain(cpu, tmp) {
                if (!(tmp->flags & SD_LOAD_BALANCE))
                        break;                          

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值