Closed Alice52 closed 3 years ago
lscpu
每个 CPU 都拥有一个可运行进程队列, 其内的进程数导致负载不均衡: 一核有难,多核围观
负载不均衡
一核有难,多核围观
CPU 间负载均衡原理
迁移注意点: 引入调度域 和 调度组
调度域 和 调度组
同一个核心的不同超线程共用了所有的缓存
同一个物理 CPU 不同核心间也会共用某些缓存
不同物理 CPU 间的进程迁移代价最大
调度域
越下层的调度域共用的缓存就越多
调度组
CPU 间负载均衡实现: 总结
将最繁忙的可运行队列的逻辑 CPU的任务迁移到空闲的可运行的队列中
但由于 CPU 缓存的原因,为了性能不损失, 引入 调度域 & 调度组的概念: 相同核心的不同超线程 > 不同核心 > 不同CPU
相同核心的不同超线程 > 不同核心 > 不同CPU
由于对 CPU 进行负载均衡可能会导致 CPU 缓存丢失,所以对 CPU 进行负载均衡不能太频繁(需要隔一段时间才能进行)
从 调度域 中找到一个最繁忙的 调度组。
从最繁忙的 调度组 中找到一个最繁忙的 可运行队列。
从最繁忙的 可运行队列 中迁移一些任务到当前 可运行队列。
负载均衡触发时机
CPU LB
lscpu
每个 CPU 都拥有一个可运行进程队列, 其内的进程数导致
负载不均衡
:一核有难,多核围观
CPU 间负载均衡原理
迁移注意点: 引入
调度域 和 调度组
同一个核心的不同超线程共用了所有的缓存
,所以同一个核心不同超线程间的进程迁移代价是最小的同一个物理 CPU 不同核心间也会共用某些缓存
不同物理 CPU 间的进程迁移代价最大
调度域
越下层的调度域共用的缓存就越多
调度组
CPU 间负载均衡实现: 总结
将最繁忙的可运行队列的逻辑 CPU的任务迁移到空闲的可运行的队列中
但由于 CPU 缓存的原因,为了性能不损失, 引入 调度域 & 调度组的概念:
相同核心的不同超线程 > 不同核心 > 不同CPU
由于对 CPU 进行负载均衡可能会导致 CPU 缓存丢失,所以对 CPU 进行负载均衡不能太频繁(需要隔一段时间才能进行)
从 调度域 中找到一个最繁忙的 调度组。
从最繁忙的 调度组 中找到一个最繁忙的 可运行队列。
从最繁忙的 可运行队列 中迁移一些任务到当前 可运行队列。
负载均衡触发时机