﻿# 计算机体系结构与 C/C++ 低延时知识体系

这个仓库是一份系统性的底层知识库，覆盖从 **CPU 微架构** 到 **C/C++ 低延时编程** 的全链条——50+ 篇文档，按五层金字塔组织。

- **想按工具查用法** → [tools/README.md](/tools/README.md)（可观测工具索引）
- **想按原理查文档** → [concepts/README.md](/concepts/README.md)（底层原理索引）
- **想动手验证** → [demos/README.md](/demos/README.md)（可跑示例）
- **想跟着实战走** → [README.md](/README.md)（cpu_demo 手册）
- **想看知识版图** → 本篇

顶层布局：`tools/`（可观测工具）· `concepts/`（底层原理，含 13 个子域）· `crash/`（崩溃排查）· `demos/`（可跑示例）· `parameter/`（内核参数速查）

---

## 1. 知识版图：五层金字塔

把全部文档按**抽象层次**摞起来，是一座金字塔——**越往上越贴近日常排查，越往下越接近硬件本质**：

```plantuml
@startuml
skinparam shadowing false
skinparam rectangle {
  BackgroundColor<<l1>> #E3F2FD
  BorderColor<<l1>>     #1976D2
  BackgroundColor<<l2>> #C8E6C9
  BorderColor<<l2>>     #388E3C
  BackgroundColor<<l3>> #FFF9C4
  BorderColor<<l3>>     #F9A825
  BackgroundColor<<l4>> #FFE0B2
  BorderColor<<l4>>     #EF6C00
  BackgroundColor<<l5>> #FFCDD2
  BorderColor<<l5>>     #C62828
}
rectangle "L1 实时工具层\ntop · perf · strace · vmstat · iostat · sar\n『排查入口：哪项资源是瓶颈』" <<l1>> as L1
rectangle "L2 系统与资源层\n进程线程 · NUMA · I/O(DMA/PCIe) · 中断\n『资源怎么来、怎么管、数据怎么流』" <<l2>> as L2
rectangle "L3 内存子系统层\n缓存组织 · 一致性协议 · TLB · 原子操作 · 虚拟内存\n『数据在缓存/内存里怎么流动』" <<l3>> as L3
rectangle "L4 CPU 微架构 + 内存序层\n流水线 · 乱序 · 分支预测 · 内存重排 · 内存屏障\n『单核怎么跑得快、多核看得对不对』" <<l4>> as L4
rectangle "L5 二进制基础层\nELF 格式 · 编译链接加载 · ABI · 崩溃排查\n『可执行文件/库/core 到底是什么』" <<l5>> as L5
L1 -down-> L2
L2 -down-> L3
L3 -down-> L4
L4 -down-> L5
note right of L1 : perf stat→IPC低？往下查
note right of L4 : 最硬核，解释"算法一样却慢一截"的悬案
@enduml
```

**两层辅助翼**（挂在金字塔两侧）：

- **左侧翼：崩溃排查**（[crash/](/crash)）：core dump · 信号 · ASan · TSan · Valgrind
- **右侧翼：可跑示例**（[demos/](/demos)）：cpu-demo · 编译器重排 · 崩溃信号 · TLB 抖动

> L5 是 L1-L4 的共同地基——perf 读符号、GDB 解析 core、strip 分离调试信息，本质都在操作 ELF。

---

## 2. 各层文档清单

### 2.1 L1 实时工具层 —— 排查从这里开始

完整索引见 [tools/README.md](/tools/README.md)；工具定位对比与互补关系见 [tools/compare.md](/tools/compare.md)；**深度对比与综合使用**见 [tool-perf-comprehensive-guide.md](/concepts/tools/tool-perf-comprehensive-guide.md)。标准流程：`vmstat` 定大方向 → 按维度展开。

- **CPU / 进程**：[top](/tools/cpu/top.md) · [pidstat](/tools/cpu/pidstat.md) · [mpstat](/tools/cpu/mpstat.md) · [vmstat](/tools/cpu/vmstat.md)
- **调度观测**：[chrt](/tools/cpu/chrt.md)（实时优先级）· [scheduling-observation](/tools/cpu/scheduling-observation.md)（调度全貌）
- **代码级定位**：[perf](/tools/code/perf.md)（火焰图）· [perf-internals](/tools/code/perf-internals.md)（原理）· [strace](/tools/code/strace.md)（系统调用）
- **磁盘**：[iostat](/tools/disk/iostat.md) · [iotop](/tools/disk/iotop.md)
- **内存**：[free](/tools/memory/free.md)
- **网络**：[ss](/tools/network/ss.md) · [lsof](/tools/network/lsof.md) · [rdma](/tools/network/rdma.md)
- **NUMA**：[numactl](/tools/numa/numactl.md) · [numastat](/tools/numa/numastat.md)
- **历史复盘**：[sar](/tools/history/sar.md)
- **数据总枢纽**：[procfs](/tools/proc/procfs.md) · [kernel-tuning](/tools/proc/kernel-tuning.md)（sysctl / /sys / 启动参数）· [tuned](/tools/proc/tuned.md)（tuned profile）

---

### 2.2 L2 系统与资源层

#### 2.2.1 进程与线程（内核视角）

总纲：[concepts/process/README.md](/concepts/process/README.md)

工具速查：[mpstat](/tools/cpu/mpstat.md) · [pidstat](/tools/cpu/pidstat.md) · [chrt](/tools/cpu/chrt.md) · [strace](/tools/code/strace.md)

##### 2.2.1.1 内核身份证（task_struct）—— 先读这篇建立全局观

- **[task-struct](/concepts/process/task-struct.md)** —— `task_struct` 私有字段 + 可共享资源对象全套图谱
- 子目录 [task-resources/](/concepts/process/task-resources/README.md) —— 9 篇逐资源展开：
    - [task-private](/concepts/process/task-resources/task-private.md) —— 私有字段：pid/tgid、**状态机**、调度、寄存器
    - [mm-struct](/concepts/process/task-resources/mm-struct.md) —— 地址空间 `mm_struct`
    - [files-struct](/concepts/process/task-resources/files-struct.md) —— 打开文件表
    - [fs-struct](/concepts/process/task-resources/fs-struct.md) —— 文件系统上下文
    - [signals-kernel](/concepts/process/task-resources/signals-kernel.md) —— 信号内核机制
    - [signals-user](/concepts/process/task-resources/signals-user.md) —— 信号用户态编程
    - [signals-alternatives](/concepts/process/task-resources/signals-alternatives.md) —— 信号性能替代方案：signalfd/eventfd/timerfd/futex 为什么快 ~10×
    - [cred](/concepts/process/task-resources/cred.md) —— 凭证与权限
    - [namespaces-cgroups](/concepts/process/task-resources/namespaces-cgroups.md) —— 容器底座
    - [io-context](/concepts/process/task-resources/io-context.md) —— AIO / seccomp / rseq / Futex
- **[vfs-binding.md](/concepts/process/vfs-binding.md)** —— 进程与VFS文件系统的完整绑定机制：task_struct的fs_struct/files_struct如何关联全局VFS挂载树、路径解析流程、fork时的写时复制

##### 2.2.1.2 调度与切换

- **[scheduling](/concepts/process/scheduling.md)** —— 调度类分层 / CFS / EEVDF / 抢占 / 负载均衡
- **[context-switch](/concepts/process/context-switch.md)** —— 触发场景 / `switch_to` 实现 / FPU 惰性切换 / 代价分析 / 瓶颈排查
- **[thread-affinity](/concepts/process/thread-affinity.md)** —— 线程绑核：三层接口 / NUMA / `isolcpus`
- **[real-time-scheduling](/concepts/process/real-time-scheduling.md)** —— POSIX 实时调度：`SCHED_FIFO` / `SCHED_RR` / `SCHED_DEADLINE`、延迟量化、`isolcpus` / `nohz_full`
- **[scheduling-interrupts.md](/concepts/process/scheduling-interrupts.md)** —— 调度与中断的深入交互：主动调度vs被动抢占、内核抢占配置差异、上下文切换现场保存机制、内核栈分层原理

##### 2.2.1.3 创建与生命周期

- **[process-creation](/concepts/process/process-creation.md)** —— `fork` / `exec` / **CoW（写时复制）**
- **[thread-creation](/concepts/process/thread-creation.md)** —— `pthread` / `std::thread` → `clone`
- **[thread-startup](/concepts/process/thread-startup.md)** —— `execve` → `_start` → `main` 与 `clone` → `ret_from_fork` → 线程入口
- **[fork-and-threads](/concepts/process/fork-and-threads.md)** —— 多线程 fork 的锁死陷阱、async-signal-safe
- **[vfork](/concepts/process/vfork.md)** —— vfork 深度分析：fork 卡死四类根因 / vfork 规避原理 / 根治方案

##### 2.2.1.4 陷入内核

- **[syscall](/concepts/process/syscall.md)** —— 执行过程与开销：陷入 / `sysret` / **vDSO**
- **[syscall-details](/concepts/process/syscall-details.md)** —— 24 步时序图 / 特权级切换 / **KPTI**
- **[segment-management](/concepts/process/segment-management.md)** —— 段管理：GDT 逐位拆解 / CPL-RPL-DPL
- **[interrupts](/concepts/process/interrupts.md)** —— 中断分类体系 / 五大矛盾 / 完整流程 / 开销量化 / 上下半部
- **[irq-affinity](/concepts/process/irq-affinity.md)** —— IRQ 亲和性：IO-APIC / MSI-X / `smp_affinity` / `irqbalance` / RSS

##### 2.2.1.5 信号机制

- **[signal-multithread](/concepts/process/signal-multithread.md)** —— 多线程信号处理：掩码继承 / 实时排队 / `tgkill` / `signalfd`

##### 2.2.1.6 进程组与子进程回收

- **[process-group-and-child-reap](/concepts/process/process-group-and-child-reap.md)** —— PGID / SID / 会话 / 控制终端、**六种回收策略**（`wait` / `SIGCHLD` / `SA_NOCLDWAIT` / Double Fork / `signalfd` / subreaper）、低延时实践
- **[waitpid-kernel-internals](/concepts/process/waitpid-kernel-internals.md)** —— `waitpid` 内核内部实现：完整调用链 / 3 幅时序图 / 等待队列机制 / 选项位详解
- **[zombie-case](/concepts/process/zombie-case.md)** —— 反面案例：四个致命 BUG 逐层拆解 / 3 幅时序图 / 修复与监控

##### 2.2.1.7 内核调试

- **[kernel-stack-snapshot](/concepts/process/kernel-stack-snapshot.md)** —— `/proc/pid/stack` / `sysrq` / `perf sched`

##### 2.2.1.8 前置知识

- **[x86-64-registers](/concepts/process/x86-64-registers.md)** —— 通用 / 段 / 控制 / MSR / SIMD / APIC 寄存器速查

##### 2.2.1.9 进程持久化：检查点与重启

- **[dmtcp](/concepts/process/dmtcp.md)** —— DMTCP 透明检查点/重启：coordinator+libdmtcp 架构、LD_PRELOAD 劫持、全局静止点、内存/FD/线程/socket 保存恢复、与 CRIU 对比

##### 2.2.1.10 进程追踪与控制

- **[ptrace](/concepts/process/ptrace.md)** —— ptrace 原理：tracer/tracee 模型、ptrace-stop 状态、四大类操作（执行控制/内存寄存器读写/事件获取/选项设置）、内核 task_struct 实现与 signal/wait 复用、一次 PTRACE_SYSCALL 完整流程与时序图、strace 与 gdb 使用差异、ptrace_scope 安全控制、与 BPF 对比

---

#### 2.2.2 NUMA（多路机内存亲和）

总纲：[concepts/numa/README.md](/concepts/numa/README.md)

工具：[numactl](/tools/numa/numactl.md) · [numastat](/tools/numa/numastat.md)

- **[numa](/concepts/numa/numa.md)** —— 概念详解
- **[numa-optimization](/concepts/cpu/numa-optimization.md)** —— CPU 绑定 / 内存绑定 / 感知编程 / 跨节点开销量化
- **[paper](/concepts/numa/paper.md)** —— NUMA 论文精读

---

#### 2.2.3 I/O 子系统 —— 数据怎么在外设和内存之间流动

总纲：[concepts/io/README.md](/concepts/io/README.md)

##### 2.2.3.1 DMA（直接内存访问）

- [dma-8237](/concepts/io/dma-8237.md) —— Intel 8237：所有 DMA 引擎的"祖宗"（寄存器/时序/demo）
- [dma](/concepts/io/dma.md) —— 现代 Bus Mastering + SG-DMA + DDIO
- [dma-cpu-interaction](/concepts/io/dma-cpu-interaction.md) —— CPU 与 DMA 控制器完整交互（请求→授权→传输→同步）
- [dma-multi-channel](/concepts/io/dma-multi-channel.md) —— 多通道架构（FSM/仲裁/工程价值）

##### 2.2.3.2 中断控制器进化

- [8259](/concepts/io/8259.md) —— Intel 8259A PIC："祖宗"（IRR/ISR/IMR / ICW/OCW / INTA 握手 / 级联）
- 中断投递 → [irq-affinity](/concepts/process/irq-affinity.md) §二（APIC/xAPIC/x2APIC/MSI-X）
- 内核处理 → [interrupts](/concepts/process/interrupts.md)

##### 2.2.3.3 PCIe

> 总纲：[concepts/io/pcie/README.md](/concepts/io/pcie/README.md)（四阶段全景时间线 + 推荐阅读路径）

- [pcie](/concepts/io/pcie/pcie.md) —— 物理基础：树形拓扑 / Lane 带宽 / 三层协议 / MMIO / BAR
- [pcie-link-training](/concepts/io/pcie/pcie-link-training.md) —— 阶段①：硬件链路训练（LTSSM 11状态 / Width & Speed 协商 / 失败排查）
- [pcie-firmware-enum](/concepts/io/pcie/pcie-firmware-enum.md) —— 阶段②：固件枚举（MCFG/ECAM窗口 / Bus 0扫描 / 第一笔Config TLP / ACPI交接）
- [pcie-pre-enumeration](/concepts/io/pcie/pcie-pre-enumeration.md) —— 横向机制：树构建前通信原理（RC/BDF/BAR 硬件工作机制）
- [pcie-enumeration](/concepts/io/pcie/pcie-enumeration.md) —— 阶段③：内核枚举（深度优先建树 / BAR探测与分配 / ID路由 & 地址路由）
- [pcie-bar-activation](/concepts/io/pcie/pcie-bar-activation.md) —— 阶段④：BAR激活与驱动（地址解码器 / MMIO读写路径 / 驱动probe / 设备上线）

##### 2.2.3.4 I/O 编址

- [io-addressing](/concepts/io/io-addressing.md) —— PMIO vs MMIO：IN/OUT vs mov、BAR、Store Buffer→TLP 全过程、Posted Write 延迟

##### 2.2.3.5 read/write 完整链路

- [read-write-process](/concepts/io/read-write-process.md) —— syscall → VFS → page cache → 块层 → 驱动 → DMA
- [cpp-io-separation](/concepts/io/cpp-io-separation.md) —— C++ I/O 设计的"分离"思想：streambuf 缓冲与设备分离、格式化与传输分离、同步与异步分离、协议与传输分离

##### 2.2.3.6 FPGA 通信

- [fpga-communication](/concepts/io/fpga-communication.md) —— Linux 与 FPGA 六种通信方式

---

#### 2.2.4 虚拟内存

- **[mmap](/concepts/elf/mmap.md)** —— 映射文件/匿名内存进地址空间：四象限 / 惰性缺页 / malloc 大块 / 加载 .so / 共享内存
- **[shared-memory](/concepts/elf/shared-memory.md)** —— System V IPC vs POSIX 共享内存接口对比

---

#### 2.2.5 VFS（虚拟文件系统）—— "一切皆文件"的内核多态层

总纲：[concepts/vfs/README.md](/concepts/vfs/README.md)

- **[vfs-overview](/concepts/vfs/vfs-overview.md)** —— VFS 架构全景：四大对象（super_block/inode/dentry/file）、多态分发机制、各 FS 能力矩阵
- **[vfs-from-process](/concepts/vfs/vfs-from-process.md)** —— 进程视角：从 `task_struct` 到 `f_op` 的五跳链路、`open()`/`read()`/`close()` 全时序、fork 共享语义
- **[vfs-file-operations](/concepts/vfs/vfs-file-operations.md)** —— `file_operations` vtable 逐字段拆解：~30 个函数指针的签名/语义/ext4-pipe-socket-procfs-eventfd 对比
- **[vfs-and-socket](/concepts/vfs/vfs-and-socket.md)** —— socket 与 VFS 深度融合：两套 vtable、`read()` 3 层分发链、`close()` 引用计数、三大好处
- **[fuse](/concepts/vfs/fuse.md)** —— FUSE 用户态文件系统：代理架构（VFS→/dev/fuse→用户态）、多挂载点隔离、三层分层设计
- **[special-filesystems](/concepts/vfs/special-filesystems.md)** —— 内核伪文件系统全景：六大分类 12 种伪文件系统（procfs/sysfs/debugfs/tracefs/cgroupfs/tmpfs 等）、与 VFS 的对接、性能数据源速查

> VFS 是 fd 表的下游、syscall 的下一站、read/write 的必经之路——`file->f_op->read()` 这个跳转让 ext4/pipe/socket/procfs 共享同一套系统调用。内核自己提供了十几种伪文件系统作为运行时接口，它们各自实现 `file_operations`，挂在同一个 VFS 框架下，让用户态用 `cat`/`echo` 就能读写内核数据。

---

### 2.3 L3 内存子系统层

总纲：[concepts/cache/README.md](/concepts/cache/README.md) —— 四条线全景

##### 2.3.1 缓存组织

- **[cache-organization](/concepts/cache/cache-organization.md)** —— 地址三段 / 组相联 / 命中判定
- **[i-cache](/concepts/cache/i-cache.md)** —— I-Cache 指令缓存：哈佛结构 / L1 I-D 拆分 / iTLB
- **[tlb](/concepts/cache/tlb.md)** —— 地址翻译缓存，"改步长性能暴跌"之谜
- **[page-table-translation](/concepts/cache/page-table-translation.md)** —— 虚拟→物理地址完整转换 / 多级页表 / page walk
- **[memory-alignment](/concepts/cache/memory-alignment.md)** —— 内存对齐对性能的影响 / 结构体布局
- **[cache-friendly-code](/concepts/cache/cache-friendly-code.md)** —— 怎么写缓存友好的代码

##### 2.3.2 缓存一致性协议族

- [msi](/concepts/cache/msi.md) → **[mesi](/concepts/cache/mesi.md)**（主协议 + **伪共享**）
- [moesi](/concepts/cache/moesi.md) · [mesif](/concepts/cache/mesif.md) · [dragon](/concepts/cache/dragon.md)（变种）
- [comparison](/concepts/cache/comparison.md)（对比 + 硬件落地）

##### 2.3.3 原子操作与内存模型

- **[atomic](/concepts/cache/atomic.md)**
- **[memory-model](/concepts/cache/memory-model.md)** —— C/C++ 内存模型：`std::atomic`、内存序、屏障、x86/ARM 架构差异、性能量化

##### 2.3.4 编译优化

- **[compile-options](/concepts/cache/compile-options.md)** —— GCC 编译选项性能差异、汇编分析、优化陷阱、量化分析

---

### 2.4 L4 CPU 微架构 + 内存序层

最硬核的一层，三条正交的线：

##### 2.4.1 微架构线 —— 单核怎么跑得快

> 📌 子目录总纲：[concepts/microarch/README.md](/concepts/microarch/README.md)

总纲：[cpu-microarch-overview](/concepts/microarch/cpu-microarch-overview.md) —— 标量→流水线→超标量→乱序→投机演进链

- **[cisc-risc](/concepts/microarch/cisc-risc.md)** —— ★ CISC→µop 分界线：x86 是 CISC 的壳、RISC 的芯
- **[pipelining-superscalar](/concepts/microarch/pipelining-superscalar.md)** —— 流水线 vs 超标量
- **[data-hazards](/concepts/microarch/data-hazards.md)** —— 数据冒险：RAW/WAW/WAR 三种依赖与硬件解法
- **[cpu-out-of-order](/concepts/microarch/cpu-out-of-order.md)** —— 乱序执行（交汇点！）
- **[branch-prediction](/concepts/microarch/branch-prediction.md)** —— 分支预测
- **[indirect-branch-prediction](/concepts/microarch/indirect-branch-prediction.md)** —— 间接分支预测：虚函数/函数指针/switch 跳转表的目标地址预测

超标量关键部件独立剖析：
- [reservation-station](/concepts/microarch/reservation-station.md) —— 保留站：解耦译码与执行，乱序发射的发生地
- [rob](/concepts/microarch/rob.md) —— ROB：顺序退休、精确异常、对头阻塞
- [lsu](/concepts/microarch/lsu.md) —— LSU：AGU、store buffer、store→load forwarding
- [register-renaming](/concepts/microarch/register-renaming.md) —— 寄存器重命名：消除假依赖
- **[uop-pipeline-walkthrough](/concepts/microarch/uop-pipeline-walkthrough.md)** —— ★ µop 级流水线走读（纵切面）：三条指令逐拍穿过全部部件

##### 2.4.2 内存序线 —— 多核看得对不对

> 📌 子目录总纲：[concepts/memory-ordering/README.md](/concepts/memory-ordering/README.md)

总纲：[reordering-overview](/concepts/memory-ordering/reordering-overview.md) —— 编译器重排 ≠ CPU 乱序 ≠ 内存重排

- **[compiler-reordering](/concepts/memory-ordering/compiler-reordering.md)** —— 编译器重排
- **[memory-reordering](/concepts/memory-ordering/memory-reordering.md)** —— 内存重排全景
- **[store-buffer](/concepts/memory-ordering/store-buffer.md)** + **[invalidate-queue](/concepts/memory-ordering/invalidate-queue.md)** —— 硬件成因
- **[memory-order](/concepts/memory-ordering/memory-order.md)** —— C++ 语义视角

##### 2.4.3 系统架构线 —— CPU 内部怎么拼装、总线怎么连

> 📌 子目录总纲：[concepts/cpu/README.md](/concepts/cpu/README.md)

总纲：[cpu-bus-architecture](/concepts/cpu/cpu-bus-architecture.md)

- **[cpu-physical-hierarchy](/concepts/cpu/cpu-physical-hierarchy.md)** —— Socket→Chiplet + Intel/AMD/Apple 三路线
- **[core-and-uncore](/concepts/cpu/core-and-uncore.md)** —— 核心三段式 + SMT + Uncore
- **[pmu](/concepts/cpu/pmu.md)** —— **PMU 性能监控单元**：硬件计数器架构、事件选择、PEBS/IBS 精确采样、PMI/NMI 机制
- **[on-die-interconnect](/concepts/cpu/on-die-interconnect.md)** —— 片内 Ring/Mesh/IFOP 深度对比
- **[off-chip-buses](/concepts/cpu/off-chip-buses.md)** —— 片外总线：DDR/PCIe/UPI
- **[cxl](/concepts/cpu/cxl.md)** —— CXL 缓存一致性总线 + UCIe + 统一内存架构
- **[system-diagnosis-tools](/concepts/cpu/system-diagnosis-tools.md)** —— `lstopo` / `lscpu` / `lspci` / `dmidecode` 观测诊断
- **[numa-optimization](/concepts/cpu/numa-optimization.md)** —— NUMA 优化实践

---

### 2.5 L5 二进制基础层

总纲：[concepts/elf/README.md](/concepts/elf/README.md) —— ELF 格式→加载→地址空间→工具 四块全景

##### 2.5.1 ELF 与工具

- **[elf-format](/concepts/elf/elf-format.md)** —— 格式详解
- **[symbol-table](/concepts/elf/symbol-table.md)** —— 符号表深度剖析（Elf64_Sym 结构、.symtab vs .dynsym、结合 gdb/perf/DWARF）
- Section 专题：
  - **[text-data-bss](/concepts/elf/text-data-bss.md)** —— .text/rodata/data/bss（代码与数据四节，NOBITS 原理）
  - **[plt-got](/concepts/elf/plt-got.md)** —— .plt/.got/.interp/.dynamic（动态链接基础设施，延迟绑定）
  - **[relocation](/concepts/elf/relocation.md)** —— .rela.*（重定位表结构、链接时/加载时/PLT 三种重定位）
  - **[init-fini](/concepts/elf/init-fini.md)** —— .init/.fini/.init_array/.fini_array（构造/析构的 ELF 层实现）
  - **[eh-frame](/concepts/elf/eh-frame.md)** —— .eh_frame/.gcc_except_table（异常处理帧与零成本栈展开）
  - **[meta-sections](/concepts/elf/meta-sections.md)** —— .comment/.note.*/.shstrtab/.gnu_debuglink（元数据与调试辅助节）
- **[compile-link-load](/concepts/elf/compile-link-load.md)** —— 从源码到运行
- **[memory-layout](/concepts/elf/memory-layout.md)** —— 进程地址空间布局
- **[library-injection](/concepts/elf/library-injection.md)** —— 用户态动态库注入：LD_PRELOAD/LD_AUDIT、运行期 dlopen、ptrace 注入、/proc/pid/mem 改写、gdb 注入
- [readelf](/concepts/elf/readelf.md) · [objdump](/concepts/elf/objdump.md) · [nm](/concepts/elf/nm.md) · [ldd](/concepts/elf/ldd.md) · [misc](/concepts/elf/misc.md)

##### 2.5.2 ABI

- **[c-abi](/concepts/elf/c-abi.md)** —— C ABI：传参 / 返回值 / 栈帧 / 红区 / 对齐 / 系统调用 ABI
- **[c++-abi](/concepts/elf/c++-abi.md)** —— C++ ABI：mangling / 虚表 / this / 异常 / RTTI / `dynamic_cast` / 成员函数指针

##### 2.5.3 崩溃排查

总纲：[crash/README.md](/crash/README.md)

- **[core-dump](/crash/core-dump.md)** —— core dump 机制 + GDB 全流程
- **[core-dump-performance](/crash/core-dump-performance.md)** —— core dump 性能开销
- **[symbol-separation](/crash/symbol-separation.md)** —— 生产环境符号分离
- **[signals](/crash/signals.md)** —— 导致 crash 的信号及根因
- **[double-free](/crash/double-free.md)** —— double free 为什么会 crash：glibc ptmalloc 空闲链表不变量 + C++ 锁相关误用模式
- **[asan](/crash/asan.md)** · [tsan](/crash/tsan.md) · [valgrind](/crash/valgrind.md) —— 内存/线程错误检测器原理与选型

---

## 3. 应用域 —— 跨层综合场景

这些主题横跨金字塔多层，从 L1 工具 → L2 系统配置 → L3 内核机制，是"把原理用起来"的实战入口。

### 3.1 网络低延时与高并发

子索引：[concepts/network/README.md](/concepts/network/README.md)

- **总纲**：[overview](/concepts/network/overview.md)（C10K→C10M）
- **IO 模型**：[io-models](/concepts/network/io-models.md)（五种 IO 模型 / io_uring）· [select/poll/epoll 对比](/concepts/network/io-multiplexing-comparison.md)（序列图深度对比 / 选型速查）· [io-model-latency](/concepts/network/io-model-latency.md)（量化分析）
- **Epoll**：[epoll](/concepts/network/epoll.md)（红黑树+就绪链表 / LT/ET / 惊群）
- **线程模型**：[thread-models](/concepts/network/thread-models.md)（Reactor/Proactor / SO_REUSEPORT）· [accept-bottleneck](/concepts/network/accept-bottleneck.md)（单点 Accept 瓶颈）
- **内核调用链**：[socket-kernel-internals](/concepts/network/socket-kernel-internals.md)（socket+bind：双层结构 / vtable / VFS 分发 / hash 注册）· [listen-kernel-internals](/concepts/network/listen-kernel-internals.md)（listen：两队列创建 / backlog 三种语义）· [accept-kernel-internals](/concepts/network/accept-kernel-internals.md)（accept：生产者-消费者 / 阻塞唤醒 / SO_REUSEPORT）
- **内核调优**：[kernel-tuning-net](/concepts/network/kernel-tuning-net.md)（backlog / 缓冲区 / 多队列 / conntrack）· [kernel-stack-optimization](/concepts/network/kernel-stack-optimization.md)（队列长度 / 中断绑定 / RPS/RFS）
- **零拷贝**：[zero-copy](/concepts/network/zero-copy.md)（sendfile/splice）· [zero-copy-deep](/concepts/network/zero-copy-deep.md)（mmap/sendfile/splice/io_uring）
- **TCP 控制**：[tcp-flow-congestion-control](/concepts/network/tcp-flow-congestion-control.md)（rwnd/cwnd / CUBIC vs BBR）· [tcp-nodelay](/concepts/network/tcp-nodelay.md)（NODELAY/CORK）· [tcp-timewait](/concepts/network/tcp-timewait.md)（TIME_WAIT / 端口耗尽 / tcp_tw_reuse / 连接池）
- **硬件分流**：[rss](/concepts/network/rss.md)（Toeplitz 哈希/间接表 / RPS-RFS-XPS-FDir 全线对比）
- **RDMA**：[rdma](/tools/network/rdma.md)

### 3.2 存储优化

子索引：[concepts/storage/README.md](/concepts/storage/README.md)

- [storage-performance](/concepts/storage/storage-performance.md) —— HDD/SSD/NVMe 性能差异与选型、随机/顺序读写量化、IO 队列深度与 IOPS
- [direct-io-vs-pagecache](/concepts/storage/direct-io-vs-pagecache.md) —— Direct IO vs 页缓存深度对比：两种 IO 路径全景、预读/回写/回收机制、性能量化、场景决策树
- [io-uring-deep](/concepts/storage/io-uring-deep.md) —— io_uring 框架深入：SQ/CQ 环形缓冲区、三种操作模式、零拷贝/buffer 注册、与 SPDK 对比

### 3.3 容器

子索引：[concepts/container/README.md](/concepts/container/README.md)

- [overview](/concepts/container/overview.md) —— 三大支柱 namespace/cgroup/overlayfs / runc 启动流程
- [container-vs-vm](/concepts/container/container-vs-vm.md) —— 容器 vs 虚拟机 / KVM / Kata / gVisor
- [performance](/concepts/container/performance.md) —— 性能损耗：网络/存储/cgroup 限流
- 内核底座：[namespaces-cgroups](/concepts/process/task-resources/namespaces-cgroups.md)

### 3.4 低延时设计模式

子索引：[concepts/latency/README.md](/concepts/latency/README.md)

- [low-latency-patterns](/concepts/latency/low-latency-patterns.md) —— 总纲：忙等待 vs 睡眠调度、无锁编程与 RCU 原理、高并发队列设计、量化分析
- [lockfree-deep](/concepts/latency/lockfree-deep.md) —— 无锁编程深入：分级定义、CAS/FAA/Michael-Scott Queue/Treiber Stack、内存回收四方案、ABA 问题
- [rcu-internals](/concepts/latency/rcu-internals.md) —— RCU 内核实现：宽限期/静默态、Tree RCU/SRCU、synchronize_rcu 开销分析、链表/计数器应用模式
- [concurrency-benchmarking](/concepts/latency/concurrency-benchmarking.md) —— 基准测试方法论：干扰源消除、rdtsc/HdrHistogram、Little's Law、框架设计、统计与可视化

配套工具链：

- [perf 工具指南](/concepts/perf/README.md)（perf 子命令系统指南：stat/top/record/report/annotate/trace/probe/c2c/lock/sched，每个子命令独立成篇）
- [perf-advanced](/concepts/tools/perf-advanced.md)（perf 导航页：案例、方法论、最佳实践汇总）
- [perf-multithread-io-analysis](/concepts/tools/perf-multithread-io-analysis.md)（**perf 三步分析法**：多线程+IO 程序初步诊断，宏观体检→拆线程→异常模式深入）→ 配套实验 [mt-io-demo](/demos/mt-io-demo/experiment.md)）
- [ftrace-guide](/concepts/tools/ftrace-guide.md)（ftrace 内核追踪：调度/中断/系统调用延迟）
- [latencytop-guide](/concepts/tools/latencytop-guide.md)（latencytop/sysstat 系统级性能工具）
- [latency-measurement](/concepts/tools/latency-measurement.md)（精准测量延迟：tsc/rdtsc、clock_gettime）

### 3.5 量化交易中的 FPGA 应用架构

子索引：[concepts/quant-fpga/README.md](/concepts/quant-fpga/README.md)

- [quant-fpga-architecture](/concepts/quant-fpga/quant-fpga-architecture.md) —— 总纲：tick-to-trade 延迟预算分解、CPU+FPGA 混合架构哲学、四种典型架构模式对比
- [feed-handler](/concepts/quant-fpga/feed-handler.md) —— 行情解码子系统：沪深 FAST/STEP 协议五级流水线、乒乓缓存、部分重配置、量化基准 380ns @200MHz
- [order-execution](/concepts/quant-fpga/order-execution.md) —— 订单执行子系统：模板填充引擎、硬件化风控（仓位/速率/自成交）、PIO/CTPIO 发送、FPGA TCP 卸载
- [hardware-integration](/concepts/quant-fpga/hardware-integration.md) —— 硬件集成与部署：板卡选型、Colocation 拓扑、PTP 时钟同步（±50ns）、双机热备、运维监控

已有基础：[fpga-communication](/concepts/io/fpga-communication.md)（Linux 与 FPGA 六种通信方式）· [dma](/concepts/io/dma.md) · [pcie](/concepts/io/pcie/pcie.md)

---

## 4. 调试与调优工具链

子索引：[concepts/debug/README.md](/concepts/debug/README.md)

- [kernel-debug](/concepts/debug/kernel-debug.md) —— 内核调试：sysctl 调优、内核崩溃 panic 分析
- [pmu](/concepts/cpu/pmu.md) —— **PMU 性能监控单元**：CPU 硬件计数器架构、PEBS/IBS、vPMU
- [cpp-debug](/concepts/debug/cpp-debug.md) —— C/C++ 高级调试：GDB 断点/观测点/汇编调试、Core dump 高级分析、内存泄漏与碎片量化

---

## 5. 可运行示例 + 内核参数速查

**demos/** —— 把原理跑起来（[总纲](/demos/README.md)）

- [cpu-demo](/demos/cpu-demo/) —— **核心靶子程序**：三场景 CPU 性能演示（用户态计算 / syscall 风暴 / 空闲），本仓库所有工具文档和 perf 案例的"实验对象"
- [compiler-reordering](/demos/compiler-reordering/README.md) —— 编译器重排：亲眼看到编译器怎么改你的代码顺序
- [branch-predict](/demos/branch-predict/README.md) —— 分支预测实验：有序 vs 随机数据 + if vs 无分支，perf stat/report/annotate 三层定位，核心发现「无分支比完美预测还快 32.5%」
- [indirect-branch](/demos/indirect-branch/README.md) —— 间接分支预测实验：虚函数单态/双态/巨态、函数指针、switch 跳转表，`branch-loads/branch-load-misses` 对比
- [crash-signals](/demos/crash-signals/README.md) —— 崩溃信号：实际触发 SIGSEGV/abort 并分析 core dump
- [tlb-thrashing](/demos/tlb-thrashing/README.md) —— TLB 抖动：固定迭代、增大步长，亲眼看到 L2 STLB 触顶的断崖
- **[echo](/demos/echo/README.md)** —— 百万QPS TCP 长连接实战项目：30-60天碎片化学习，覆盖 NUMA 进程/中断绑核、网卡 RSS 多队列、TCP 内核参数全链路调优、百万长连接承载、分层 echo 业务设计（裸 echo → 带计算 → 流式分包）、短连接 TIME_WAIT/端口耗尽专项补充。配套 [架构设计](/demos/echo/docs/architecture.md)、[分析指南](/demos/echo/docs/analysis.md)

**parameter/** —— 内核参数速查

| 分类 | 文档 | 覆盖指标 |
|------|------|---------|
| CPU | [cpu-usage.md](/parameter/cpu/cpu-usage.md) | `%usr`/`%sys`/`%idle`/`%iowait`/`%irq`/`%softirq`/`%steal` — 八类 CPU 时间 |
| | [loadavg.md](/parameter/cpu/loadavg.md) | load average（1/5/15min）— R+D 态统计、EWMA 算法、常见误区 |
| 内存 | [memory-usage.md](/parameter/memory/memory-usage.md) | MemAvailable、Swap si/so、Page Fault major/minor、OOM score |
| IO | [iowait.md](/parameter/io/iowait.md) | `%iowait`、`iodelay`、`cswch/s`、`%wait` — 四大场景时序图与统计窗口 |
| | [disk-io.md](/parameter/io/disk-io.md) | `await`/`svctm`/`%util`、IOPS、吞吐量、队列深度 |
| 网络 | [net-stats.md](/parameter/network/net-stats.md) | 网卡丢包（rxdrop）、TCP 重传、连接状态、UDP 丢包 |
| 调度 | [context-switch.md](/parameter/schedule/context-switch.md) | `cswch/s`（自愿）、`nvcswch/s`（非自愿）、`%wait`、`cs`

---

## 6. 推荐阅读路径

不必从头读到尾，按你的目的选一条路线：

### 6.1 入门

- **会用工具查 CPU 问题**：[README.md](/README.md) → [top](/tools/cpu/top.md) → [pidstat](/tools/cpu/pidstat.md) → [perf](/tools/code/perf.md)
- **看地址判断内存类型**：[memory-layout](/concepts/elf/memory-layout.md)（栈/堆/代码/库/内核/空指针速判）
- **搞懂程序怎么跑起来的**：[compile-link-load](/concepts/elf/compile-link-load.md) → [elf-format](/concepts/elf/elf-format.md) → [process-creation](/concepts/process/process-creation.md) → [thread-startup](/concepts/process/thread-startup.md)

### 6.2 进程 / 内存 / 并发

- **搞懂 fork/线程/进程创建**：[task-struct](/concepts/process/task-struct.md) → [process-creation](/concepts/process/process-creation.md) → [thread-creation](/concepts/process/thread-creation.md) → [fork-and-threads](/concepts/process/fork-and-threads.md)
- **搞懂 fork 卡死与 vfork 实战**：[vfork](/concepts/process/vfork.md)（四类根因 / 根治方案）→ [waitpid-kernel-internals](/concepts/process/waitpid-kernel-internals.md) → [zombie-case](/concepts/process/zombie-case.md)
- **搞懂进程组与子进程正确回收**：[process-group-and-child-reap](/concepts/process/process-group-and-child-reap.md) → [waitpid-kernel-internals](/concepts/process/waitpid-kernel-internals.md)（内核调用链/时序图）→ [zombie-case](/concepts/process/zombie-case.md)（四个致命 BUG 逐层拆解/修复）
- **搞懂内存怎么来的（mmap/malloc）**：[mmap](/concepts/elf/mmap.md) → [memory-layout](/concepts/elf/memory-layout.md) → [process-creation](/concepts/process/process-creation.md)（CoW）
- **搞懂系统调用到底发生了什么**：[syscall](/concepts/process/syscall.md) → [syscall-details](/concepts/process/syscall-details.md) → [segment-management](/concepts/process/segment-management.md)
- **搞懂并发内存序、`std::atomic`**：[reordering-overview](/concepts/memory-ordering/reordering-overview.md) → [memory-order](/concepts/memory-ordering/memory-order.md) → [store-buffer](/concepts/memory-ordering/store-buffer.md)
- **搞懂多核缓存一致性**：[msi](/concepts/cache/msi.md) → [mesi](/concepts/cache/mesi.md) → [comparison](/concepts/cache/comparison.md)

### 6.3 性能优化

- **搞懂"多线程反而更慢" **：[mesi](/concepts/cache/mesi.md)（伪共享）→ [cache-organization](/concepts/cache/cache-organization.md) → [atomic](/concepts/cache/atomic.md)
- **搞懂"算法一样却慢一截" **：[cpu-microarch-overview](/concepts/microarch/cpu-microarch-overview.md) → [branch-prediction](/concepts/microarch/branch-prediction.md) / [indirect-branch-prediction](/concepts/microarch/indirect-branch-prediction.md) / [tlb](/concepts/cache/tlb.md)
- **怎么写快代码（缓存友好）**：[cache-friendly-code](/concepts/cache/cache-friendly-code.md) → [memory-alignment](/concepts/cache/memory-alignment.md) / [mesi](/concepts/cache/mesi.md)（伪共享）
- **低延迟：绑核/消除抖动**：[scheduling](/concepts/process/scheduling.md) → [thread-affinity](/concepts/process/thread-affinity.md) → [numactl](/tools/numa/numactl.md)

### 6.4 硬件 / I/O

- **搞懂 CPU 内部结构、总线拓扑**：[cpu-bus-architecture](/concepts/cpu/cpu-bus-architecture.md) → [numa](/concepts/numa/numa.md) → [io-addressing](/concepts/io/io-addressing.md) → [pcie](/concepts/io/pcie/pcie.md)
- **搞懂"NVMe 带宽跑不满、PCIe 拓扑瓶颈" **：[cpu-bus-architecture](/concepts/cpu/cpu-bus-architecture.md)（直连 PCIe vs Chipset/DMI 瓶颈）→ [pcie](/concepts/io/pcie/pcie.md)（带宽/Lane 详解）
- **搞懂 DMA 怎么工作**：[dma-8237](/concepts/io/dma-8237.md)（8237——"祖宗"）→ [dma](/concepts/io/dma.md)（Bus Mastering + SG-DMA）→ [dma-cpu-interaction](/concepts/io/dma-cpu-interaction.md) → [dma-multi-channel](/concepts/io/dma-multi-channel.md)
- **搞懂中断控制器怎么进化**：[8259](/concepts/io/8259.md)（PIC——"祖宗"）→ [irq-affinity](/concepts/process/irq-affinity.md) §二（APIC/xAPIC/x2APIC/MSI-X）→ [interrupts](/concepts/process/interrupts.md)（内核完整处理流程）

### 6.5 网络 / 存储 / FPGA

- **搞懂网络高并发（C10K→C10M）**：[network/overview](/concepts/network/overview.md) → [io-models](/concepts/network/io-models.md) → [epoll](/concepts/network/epoll.md) → [thread-models](/concepts/network/thread-models.md) → [kernel-tuning-net](/concepts/network/kernel-tuning-net.md) / [zero-copy](/concepts/network/zero-copy.md) / [tcp-flow-congestion-control](/concepts/network/tcp-flow-congestion-control.md)
- **搞懂"网卡收包中断为什么全在 CPU0" **：[rss](/concepts/network/rss.md) → [irq-affinity](/concepts/process/irq-affinity.md) → [mpstat](/tools/cpu/mpstat.md)
- **搞懂存储性能差异**：[storage-performance](/concepts/storage/storage-performance.md) → [direct-io-vs-pagecache](/concepts/storage/direct-io-vs-pagecache.md) → [io-uring-deep](/concepts/storage/io-uring-deep.md) → [zero-copy-deep](/concepts/network/zero-copy-deep.md)
- **搞懂容器原理 / vs 虚拟机 / 性能**：[namespaces-cgroups](/concepts/process/task-resources/namespaces-cgroups.md) → [container/overview](/concepts/container/overview.md) → [container-vs-vm](/concepts/container/container-vs-vm.md) / [performance](/concepts/container/performance.md)
- **搞懂低延时设计全貌**：[low-latency-patterns](/concepts/latency/low-latency-patterns.md)（总纲）→ [lockfree-deep](/concepts/latency/lockfree-deep.md)（无锁编程）→ [rcu-internals](/concepts/latency/rcu-internals.md)（RCU 内核）→ [concurrency-benchmarking](/concepts/latency/concurrency-benchmarking.md)（测量方法论）
- **搞懂量化 FPGA 架构**：[quant-fpga-architecture](/concepts/quant-fpga/quant-fpga-architecture.md)（总纲）→ [feed-handler](/concepts/quant-fpga/feed-handler.md)（行情解码）→ [order-execution](/concepts/quant-fpga/order-execution.md)（订单执行）→ [hardware-integration](/concepts/quant-fpga/hardware-integration.md)（部署运维）

### 6.6 调试 / 崩溃

- **进程崩了要分析 core**：[core-dump](/crash/core-dump.md) → [elf-format](/concepts/elf/elf-format.md) → [symbol-separation](/crash/symbol-separation.md)
- **进程为什么崩（信号/内存 bug）**：[signals](/crash/signals.md) → [asan](/crash/asan.md) / [tsan](/crash/tsan.md) / [valgrind](/crash/valgrind.md)
- **深入内核调试与 panic 分析**：[kernel-debug](/concepts/debug/kernel-debug.md) → [kernel-stack-snapshot](/concepts/process/kernel-stack-snapshot.md) → [signals](/crash/signals.md)

### 6.7 完整体系

- **系统学习整个知识体系**：
    - **自底向上**（先懂基础，再学工具）：L5 → L4 → L3 → L2 → L1
    - **自顶向下**（先会用，再挖原理）：L1 → L2 → L3 → L4 → L5

---

## 7. 贯穿全仓库的一条暗线：IPC 低了，去哪查

大量"性能悬案"最终都收敛到一个问题——**CPU 没被喂饱（IPC 低）**。这条暗线把 L4 微架构和 L3 内存子系统串了起来：

- cache miss，等内存几百拍 → **数据布局差 / 伪共享**：[cache-organization](/concepts/cache/cache-organization.md) · [mesi](/concepts/cache/mesi.md)
- TLB miss，走 page walk → **访问跨度大、页数超 TLB**：[tlb](/concepts/cache/tlb.md)
- 分支误预测，清空流水线 → **分支方向随机**：[branch-prediction](/concepts/microarch/branch-prediction.md)；**间接分支目标随机**：[indirect-branch-prediction](/concepts/microarch/indirect-branch-prediction.md)
- 长依赖链，ILP 不足 → **指令强依赖，喂不满超标量**：[cpu-out-of-order](/concepts/microarch/cpu-out-of-order.md)
- 跨核抢同一 cache line → **伪共享 / 原子争用**：[mesi](/concepts/cache/mesi.md) · [atomic](/concepts/cache/atomic.md)
- 未对齐访存被拆分/跨 line → **数据未对齐、结构体压扁**：[memory-alignment](/concepts/cache/memory-alignment.md)
- 内存访问延迟异常高 → **跨 Socket 远程 NUMA / 跨 CCD**：[numa](/concepts/numa/numa.md) · [cpu-bus-architecture](/concepts/cpu/cpu-bus-architecture.md)
- I/O 延迟大但 CPU 不高 → **PCIe/DMI 总线带宽瓶颈**：[cpu-bus-architecture](/concepts/cpu/cpu-bus-architecture.md) · [pcie](/concepts/io/pcie/pcie.md)
- 单核 %soft 100%、其他核空闲 → **网卡单队列 / RSS 未开 / 中断未分散**：[rss](/concepts/network/rss.md) · [irq-affinity](/concepts/process/irq-affinity.md) · [mpstat](/tools/cpu/mpstat.md)
- 存储 IO 延迟抖动 → **IO 调度器 / 队列深度 / page cache**：[storage-performance](/concepts/storage/storage-performance.md) · [read-write-process](/concepts/io/read-write-process.md)

统一观测入口：`perf stat`（[perf](/tools/code/perf.md)）看 IPC，低了就顺着上表往下查。

---

## 8. 约定

- **语言**：文档正文以**中文**为主。
- **风格**：每篇用 PlantUML 图 + 表格讲解，章节末尾常有**「一句话」总结**。
- **靶子程序**：[demos/cpu-demo/main.cpp](/demos/cpu-demo/main.cpp) → `cpu_demo`（`make` 编译，Linux 上运行，见 [README.md](/README.md)）。
- **平台**：`demos/cpu-demo/main.cpp` 读 `/proc`，**只能在 Linux 运行**（macOS 能编译不能跑）。
- **链接规范**：所有 .md 文件内统一使用相对路径，兼容本地浏览与 Docsify 部署。

---

**一句话**：这个仓库是一条"从用工具查性能，一路挖到 CPU 硬件为什么慢，再到 C/C++ 低延时编程"的系统学习路径——L5 二进制基础 → L4 CPU 微架构+内存序 → L3 内存子系统 → L2 系统与资源 → L1 实时工具，外挂四大应用域（网络/存储/容器/低延时）、崩溃排查、可跑示例与内核参数速查。按 [tools/README.md](/tools/README.md) 查工具、按 [concepts/README.md](/concepts/README.md) 查原理、按本篇看地图。
