Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

硬件 内核 虚拟化 容器化

下面是从硬件 -> 内核 -> 虚拟化 -> 容器化的一体化认知框架,不是零散知识点,而是一条完整技术演进链。

用 NUMA / Namespace / cgroups / overlay2 / systemd 串起来。

一、总体一张图(先建立“世界观”)

┌───────────────────────────────┐
│         硬 件 (Hardware)       │  
│ CPU / 内存 / 磁盘 / 网卡 / NUMA │
└──────────────┬────────────────┘
┌───────────────────────────────┐
│       Linux 内核 (Kernel)      │
│ 调度 / 内存 / 网络 / IO / 中断   │
└──────────────┬────────────────┘
┌───────────────────────────────┐
│      虚拟化 (Virtualization)   │
│   KVM / QEMU / vCPU / vNUMA   │
└──────────────┬────────────────┘
┌───────────────────────────────┐
│       容器化 (Containers)      │
│    Namespace + cgroups + FS   │
└───────────────────────────────┘

核心:

  • 虚拟化 是 “造一台假机器”
  • 容器化 是 “在同一个内核里分世界”

二、硬件层:一切性能和边界的根源

1️⃣ CPU(算力的本质)

关键点

  • Core / Thread(HT)
  • Cache(L1/L2/L3)
  • NUMA(多路服务器)

Linux 视角

lscpu
numactl --hardware

📌 内核调度器必须感知 NUMA,否则性能直接腰斩

2️⃣ 内存(最昂贵资源)

  • DRAM
  • NUMA Node
  • HugePage
  • Swap

Linux 抽象:

  • 虚拟内存
  • Page Cache
  • Slab

📌 数据库 / JVM 最怕:

  • 跨 NUMA 访问
  • THP 不受控

3️⃣ 磁盘(IO 决定上限)

  • HDD / SSD / NVMe
  • 队列深度
  • 中断 & 软中断

Linux:

  • VFS
  • Block Layer
  • IO Scheduler(mq-deadline / none)

4️⃣ 网卡(网络就是中断 + 内存)

  • RSS
  • 多队列
  • NUMA 亲和

Linux:

  • NAPI
  • softirq
  • RPS / XPS

三、Linux 内核:硬件的“统一抽象层”

1️⃣ 内核四大子系统

子系统 作用
Scheduler CPU 调度
Memory 内存管理
VFS 文件系统
Networking 网络栈

2️⃣ 内核做了什么?

  • 硬件变成抽象资源
  • 把资源公平或可控地分给进程

📌 一切隔离、限制都发生在内核

四、虚拟化:在硬件之上再“造硬件”

1️⃣ 虚拟化解决什么?

多操作系统并存

  • 不同内核
  • 不同 OS
  • 强隔离

2️⃣ KVM 本质

KVM = Linux 内核模块
QEMU = 用户态设备模拟
  • CPU:硬件虚拟化(VT-x / AMD-V)
  • 内存:EPT / NPT
  • IO:virtio

3️⃣ vCPU / vNUMA

  • vCPU 映射到 pCPU
  • vNUMA 对齐物理 NUMA

📌 数据库虚拟机必须开 vNUMA

4️⃣ 虚拟化成本

成本
CPU
内存
IO

五、容器化:不造机器,只“分世界”

1️⃣ 容器不虚拟硬件

  • 共享宿主内核
  • 共享驱动
  • 共享调度器

📌 这就是快的原因

2️⃣ 容器三大核心

技术 作用
Namespace 隔离
cgroups 限制
RootFS 文件视图

3️⃣ Namespace(你看到了什么)

  • PID
  • NET
  • MOUNT
  • UTS
  • USER

4️⃣ cgroups(你能用多少)

  • CPU
  • Memory
  • IO
  • PIDs

5️⃣ overlay2(文件系统)

lowerdir(镜像)
upperdir(写层)
merged

📌 copy-on-write

六、虚拟化 vs 容器化(本质对比)

维度 虚拟机 容器
内核 独立 共享
启动 极快
隔离
性能 有损 近乎裸机
安全 更强 依赖内核

七、NUMA:贯穿硬件、虚拟化、容器的“暗线”

1️⃣ 裸机

  • CPU ↔ 内存亲和

2️⃣ 虚拟机

  • vNUMA ↔ pNUMA

3️⃣ 容器

  • cpuset.cpus
  • cpuset.mems

📌 忽略 NUMA = 高负载必翻车

八、systemd:现代 Linux 的“资源总控台”

  • 所有 service 都是 cgroup
  • slice = 资源域
  • service = 进程集合
CPUQuota=200%
MemoryMax=4G

📌 systemd = cgroups v2 管理器

九、Kubernetes:把容器问题规模化

K8S 做了什么?

  • 调度(CPU / 内存 / NUMA)
  • 网络(CNI)
  • 存储(CSI)
  • 生命周期

📌 K8S = 大规模容器资源调度系统

十、典型架构组合(你一定会遇到)

场景 1:云服务器

物理机
 └─ KVM
     └─ VM
         └─ Docker

场景 2:私有云

物理机
 └─ K8S
     └─ Pod

场景 3:数据库

裸机 / VM
 + NUMA 绑定
 + HugePage

十一、生产经验总结(非常重要)

✅ 正确理解

  • 内核是核心
  • 容器不是 VM
  • NUMA 影响一切
  • systemd 就是 cgroup

❌ 常见误区

  • 容器当 VM 用
  • 不设资源上限
  • 忽略 IO
  • 在容器里调内核参数

十二、总结

  • 硬件决定上限
  • 内核决定规则
  • 虚拟化决定边界
  • 容器化决定效率