Linux核心概念详解
  • 0. Linux核心概念详解
  • 1. 调试环境
  • 2. Linux 调度器
    • 2.1 任务
    • 2.2 核心概念
      • 2.2.1 核心概念 - 调度实体
      • 2.2.2 核心概念 - 调度类
      • 2.2.3 核心概念 - 调度策略
      • 2.2.4 核心概念 - 运行队列
      • 2.2.5 核心概念 - 优先级
    • 2.3 演进历史
      • 2.3.1 O(n)调度器 - 调度逻辑
      • 2.3.2 O(n)调度器 - 时间分配
      • 2.3.3 O(n)调度器 - 调度时机
      • 2.3.4 O(1)调度器 - 简介
      • 2.3.5 O(1)调度器 - 调度逻辑
      • 2.3.6 O(1)调度器 - 时间分配
      • 2.3.7 RSDL
      • 2.3.8 CFS
    • 2.4 DL调度器
      • 2.4.1 DL调度器 - 调度算法
      • 2.4.2 DL调度器 -核心代码
    • 2.5 RT调度器
    • 2.6 CFS
      • 2.6.1 公平性
      • 2.6.2 调度逻辑
      • 2.6.2.1 调度逻辑 - 数据结构
      • 2.6.2.2 调度逻辑 - vruntime
      • 2.6.2.3 调度逻辑 - 调度周期
      • 2.6.2.4 调度逻辑 - 调度节拍
      • 2.6.2.5 调度逻辑 - 任务抢占
      • 2.6.2.6 调度逻辑 - 调度时机
      • 2.6.3 组调度
      • 2.6.3.1 组调度 - 数据结构
      • 2.6.3.2 组调度 - 调度逻辑
      • 2.6.3.3 组调度 - 时间分配
      • 2.6.3.4 组调度 - 任务组权重
      • 2.6.4 带宽控制
      • 2.6.4.1 带宽控制 - 数据结构
      • 2.6.4.2 带宽控制 - 带宽时间
      • 2.6.4.3 带宽控制 - 挂起与解挂
      • 2.6.4.3 带宽控制 - 定时器
    • 2.7 负载追踪
      • 2.7.1 负载追踪 - 简介
      • 2.7.2 负载追踪 - 数据结构
      • 2.7.3 负载追踪 - 计算负载
      • 2.7.4 负载追踪 - 更新负载
    • 2.8 负载均衡
      • 2.8.1 简介
      • 2.8.2 CPU的拓扑结构
      • 2.8.3 数据结构
      • 2.8.4 算法思路
      • 2.8.5 触发时机
      • 2.8.6 总结
  • 3. LINUX 内存管理
    • 3.1 寻址模式
      • 3.1.1 地址
      • 3.1.2 地址转换
      • 3.1.3 Linux的地址空间
    • 3.2 物理内存
      • 3.2.1 数据结构
      • 3.2.2 初始化
      • 3.2.3 物理内存模型
      • 3.2.4 Buddy System(伙伴系统)
      • 3.2.5 SLAB/SLUB/SLOB
Powered by GitBook
On this page

Was this helpful?

  1. 2. Linux 调度器
  2. 2.8 负载均衡

2.8.1 简介

Previous2.8 负载均衡Next2.8.2 CPU的拓扑结构

Last updated 3 years ago

Was this helpful?

由于调度器的运行队列(runqueue)是per-cpu的,那么在一个多核系统中,就可能出现各CPU的负载不均衡的情况,如果一个CPU的队列被塞得满满当当,而另一个CPU的队列里空空如也,那肯定是不可取的。为了避免这种情况,调度器就还必须处理好多核之间的负载均衡。

通过, 系统对负载的跟踪可以精确到每个调度实体,这为调度器完成负载均衡提供了数据支持。如果我们只考虑最简单的模型,那么调度器只需要随时跟踪每个CPU队列的总负载,然后将高负载CPU队列中的任务酌情迁移一些到低负载的CPU队列中,尽量保持每个CPU队列的负载总量相等即可。

但任务的迁移是有代价的,这个代价一方面是选择目标CPU的时间开销,一方面是任务迁移带来的性能损耗。负载均衡的目的是提升系统整体的效率,但如果策略不当,有可能反而会对系统的性能产生影响。如何高效地达成这件事情,是系统设计者需要面临的挑战。在本节中,我们将从如下方面对CFS的负载均衡进行讨论:

  • CPU的拓扑结构 由于不同的CPU对缓存(L1, L2, L3)的共享级别不同,甚至对对内存的访问效率也不同(),因此会导致任务的迁移代价也不同。我们会简要介绍SMP, 这两种拓扑结构。

  • 核心数据结构 内核如何根据CPU的物理拓扑结构在内核中对其进行组织管理,将会涉及到调度域(sched domain)与调度组(sched group)的概念。

  • 负载均衡的核心逻辑 涉及到负载均衡的核心数据结构与算法思路,包括主要的函数以及实现方式

  • 负载均衡的时机 不同场景下系统如何触发负载均衡

PELT
NUMA
NUMA