linux多核处理器上的负载均衡原理

本文探讨Linux操作系统如何在多核处理器上实现负载均衡,包括何时检查和调整负载,以及如何有效地迁移任务以保持平衡。Linux通过schedule()和try_to_wake_up()函数,在进程睡眠和唤醒时进行负载调整,尽量在同一芯片内迁移进程以利用缓存。负载均衡确保了处理器资源的公平分配,避免了繁忙或闲置的状态长时间维持。
摘要由CSDN通过智能技术生成

看到一篇文章,大概给总结了下,代码就不贴了。

 

现在很多服务器都是多核服务器了,Linux操作系统会自动把任务分配到不同的处理器上,并尽可能的保持负载均衡。

linux多核cpu上负载均衡两个问题:

 

1. 何时检查并调整负载情况?

2. 如何调整负载?

 

第一个问题,可以定时调整负载,这种方法虽然简单,但不高效。实际上,2.6.20版linux kernel的确使用软中断来定时调整多CPU上的压力(调用函数run_rebalance_domains),每秒1次。每秒1次还不够,kernel需要紧跟进程的变化来调整,所以内核在进程睡眠和醒来这两个时间点检查CPU们的负载。

第二个问题,调整负载的策略就是将任务从最繁忙的cpu上迁移到空闲的cpu上。linux在实现上更多的考虑了cpu的结构。多核处理器都是片上多核,然后有多个处理器。就是一个chip上有多个cpu,即片上多核。同一个chip上的cpu共享L2高速缓存。所以linux为了在调整负载时继续利用缓存,也就为了避免缓存失效,尽量在一个chip内迁移进程。

 

SMP负载均衡检查或调整在两个内核函数里发生:

1. schedule()。当进程调用了sleep、usleep、poll、epoll、pause时,也就是调用了可能睡去的操作时都会转为内核代码里对schedule()函数的调用。

2. try_to_wake_up() 。说白了就是进程刚才睡了,现在要醒来,那醒来以后跑在哪个CPU上呢?这个选择CPU的过程,也就是负载均衡的过程。

 

具体的实现就是针对当前

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值