Alice52 / java-ocean

java-tutorial .We intend to explain Java knowledge in this repository.
MIT License
0 stars 0 forks source link

[linux] cpu lb #217

Closed Alice52 closed 3 years ago

Alice52 commented 3 years ago

CPU LB

  1. lscpu

  2. 每个 CPU 都拥有一个可运行进程队列, 其内的进程数导致负载不均衡: 一核有难,多核围观

  3. CPU 间负载均衡原理

    • CPU 的可运行进程队列中的进程数量不均衡导致的
    • 将最繁忙的 CPU 可运行进程队列的一些进程迁移到其他比较空闲的 CPU 中
  4. 迁移注意点: 引入调度域 和 调度组

    • 同一个核心的不同超线程共用了所有的缓存,所以同一个核心不同超线程间的进程迁移代价是最小的
    • 同一个物理 CPU 不同核心间也会共用某些缓存
    • 不同物理 CPU 间的进程迁移代价最大

    image

  5. 调度域

    • 在进程迁移时,优先从底层的调度域开始进行: 越下层的调度域共用的缓存就越多

    image

  6. 调度组

    • 可以根据不同的核心来划分`
  7. CPU 间负载均衡实现: 总结

    • 将最繁忙的可运行队列的逻辑 CPU的任务迁移到空闲的可运行的队列中

    • 但由于 CPU 缓存的原因,为了性能不损失, 引入 调度域 & 调度组的概念: 相同核心的不同超线程 > 不同核心 > 不同CPU

    • 由于对 CPU 进行负载均衡可能会导致 CPU 缓存丢失,所以对 CPU 进行负载均衡不能太频繁(需要隔一段时间才能进行)

    • 从 调度域 中找到一个最繁忙的 调度组。

    • 从最繁忙的 调度组 中找到一个最繁忙的 可运行队列。

    • 从最繁忙的 可运行队列 中迁移一些任务到当前 可运行队列。

  8. 负载均衡触发时机

    • 进程被创建、进程被唤醒、进程休眠和时钟中断等