1. 课程导论:调度域与NUMA在现代多核服务器中的重要性

1.1 为什么调度域与NUMA是性能基石?

现代服务器普遍采用多路CPU、多核架构,并深度依赖NUMA(非统一内存访问)技术。在这种架构下,CPU访问本地内存与远端内存的延迟差异可达2-3倍。Linux内核的调度域(Scheduling Domains)与NUMA负载均衡机制,直接决定了进程能否感知拓扑、减少跨片访问、最大化缓存命中率。

核心观点: 调度域是内核感知硬件拓扑的“地图”,NUMA均衡是让进程“就近”使用内存与CPU的“交通指挥”。两者配置不当,会导致30%以上的性能损失。
适用场景: 数据库(Oracle/MySQL)、HPC计算、虚拟化宿主机、云原生节点。这些场景对内存访问延迟和CPU亲和性高度敏感。

1.2 课程目标

通过本课程,你将掌握以下核心能力:

  1. 理解调度域拓扑: 从SMT、MC、NUMA到NUMA多级域的层级结构与内核数据结构。
  2. 掌握NUMA均衡参数: 包括 numa_balancing、zone_reclaim_mode、numa_scan_period 等关键sysctl与内核参数。
  3. 实战调优: 针对不同负载(CPU密集、内存密集、混合型)进行调度域配置与NUMA策略调整。
  4. 诊断与监控: 使用 numactl、lstopo、/proc/schedstat 等工具分析拓扑与均衡效果。

1.3 学习路径

课程分为四大模块,建议按顺序学习:

模块 章节范围 核心内容 难度
基础篇 第1-5章 调度域数据结构、NUMA基础、拓扑发现流程 ★★☆
参数篇 第6-12章 负载均衡参数详解、sysctl调优、cpuset配置 ★★★
实战篇 第13-22章 数据库/虚拟化/容器场景调优案例 ★★★★
诊断篇 第23-30章 性能分析工具、perf事件、调度域调试 ★★★★

1.4 调度域与NUMA拓扑关系图

下图展示了典型双路NUMA服务器的调度域层级结构,以及进程在不同域之间的迁移路径:

调度域层级与NUMA拓扑关系图 NUMA Node 0 (CPU 0-3, 本地内存) MC域 (L3共享) CPU 0-1 L3 Cache 共享 SMT0 CPU0 SMT1 CPU1 MC域 (L3共享) CPU 2-3 L3 Cache 共享 SMT0 CPU2 SMT1 CPU3 NUMA Node 1 (CPU 4-7, 远端内存) MC域 (L3共享) CPU 4-5 L3 Cache 共享 SMT0 CPU4 SMT1 CPU5 MC域 (L3共享) CPU 6-7 L3 Cache 共享 SMT0 CPU6 SMT1 CPU7 NUMA域(跨Node负载均衡) 进程迁移代价:远端内存访问延迟增加 ~100-200ns 调度域层级说明 SMT域(超线程)→ MC域(多核共享L3)→ NUMA域(跨内存节点) 层级越高,进程迁移代价越大,负载均衡触发阈值越高

1.5 关键概念速查表

概念 缩写 定义 对性能的影响
调度域 SD 内核将CPU按拓扑层级分组,每个组为一个调度域 决定进程迁移范围与负载均衡粒度
NUMA节点 Node 一组CPU与本地内存的集合,访问本地内存延迟低 跨节点访问延迟增加50%-200%
负载均衡 LB 内核在调度域间迁移进程以平衡CPU利用率 过度迁移导致缓存污染,不足导致CPU空转
CPU亲和性 Affinity 进程/线程绑定到特定CPU或Node运行 正确绑定可减少TLB抖动和跨片访问
内存策略 MPOL 控制内存分配时优先选择本地或远端节点 错误策略导致内存带宽瓶颈

1.6 学习前的准备

前置知识要求: 建议具备以下基础:
  • Linux进程调度基本概念(CFS、时间片、优先级)
  • 基本系统性能分析工具使用(top、perf、numactl)
  • 对x86/ARM多核架构有初步了解

推荐实验环境:

  • 硬件: 至少2路NUMA服务器(可通过云实例模拟,如AWS c5n.4xlarge)
  • 内核版本: Linux 5.10+(推荐5.15 LTS或更新版本)
  • 工具链: numactl、lstopo、hwloc、perf、trace-cmd

验证环境是否就绪:

# 查看NUMA拓扑
numactl --hardware

# 查看调度域层级
cat /proc/schedstat | head -20

# 查看当前NUMA均衡状态
cat /proc/sys/kernel/numa_balancing

1.7 课程收益与预期成果

完成本课程后,你将能够:

  • 独立诊断 生产环境中因NUMA配置不当导致的性能抖动问题
  • 定制化调优 针对数据库、虚拟化、HPC等场景的调度域参数
  • 量化评估 使用perf事件和调度域统计指标验证调优效果
  • 编写自动化脚本 实现NUMA感知的进程部署与内存绑定
预期性能提升: 在典型数据库场景下,正确的调度域与NUMA配置可带来15%-40%的吞吐量提升,延迟降低20%-50%。

现在,让我们从第2章开始,深入调度域的数据结构与拓扑发现机制。