暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux内核中进程的负载均衡

222


作者时间QQ技术交流群
perrynzhou@gmail.com2022/05/02672152841




简介

  • Linux内核中进程调度
    的核心是选择哪个任务在哪个CPU上运行,解决各个进程之间能够公平的共享CPU资源,同时需要确认进程需要占用CPU时间,确定下一个需要运行的进程。负载均衡
    的核心是各个CPU之间空闲和繁忙不均衡,提供系统整体的计算吞吐量。

  • 每个CPU上会运行一个进程的调度队列,在系统运行过程中可能会出现一个CPU上的任务多,另外一个CPU上的任务少的情况,这就需要将繁忙的CPU将任务转移到空间处理器上从而避免某些CPU负载不够的情况.



  • 一个NUMA
    计算机可以拥有多个Node
    ,一个Node可以有多个Core
    ,一个Core如果启用了超线程技术则变为多个Logical Processor逻辑处理器
    。一个NUMA
    计算机是按照Node->Core->Logical Processor
    层次呈现。


负载均衡成本开销



  • 首先需要了解下CPU核心之间的数据流通信原理,这样就能大概知道CPU中的Core
    之间的进程迁移之间的开销

  • 由于NUMA
    是以层次关系呈现,因此在执行进程的负载均衡会呈现不同的成本开销。进程在同一个物理Core上的逻辑Core之前迁移开销最小;如果在不同的物理Core之间迁移,如果每个物理Core拥有私有的L1 Cache
    ,共享L2 Cache
    ,进程迁移后就无法使用原来的L1 Cache
    ,进程迁移到新的Core
    上缺失L1 Cache
    数据,这就需要进程的状态数据需要在CPU Core
    之间进行通信获取这些数据,根据上图CPU的通信模式可以了解,成本代价是蛮大的。

  • 内核采用调度域
    解决现代多CPU多核的问题,调度域
    是具有相同属性和调度策略的处理器集合,任务进程可以在它们内部按照某种策略进行调度迁移。进程在多CPU的负载均衡也是针对调度域
    的,调度域
    根据超线程、多核、SMP、NUMA
    等系统架构划分为不同的等级,不同的等级架构通过指针链接在一起,从而形成树状结构;在进程的负载均衡过程中,从树的叶子节点往上遍历,直到所有的
    中的负载都是平衡的。目前内核进程调度按照如下的原则进行,这些原则都是按照cpu
    架构以及通信路径来进行的。



文章转载自存储内核技术交流,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论