精读笔记(RHCA 英文教材)· RH442 Chapter 13 Comprehensive Review
大约 6 分钟
精读笔记(RHCA 英文教材)· RH442 Chapter 13 Comprehensive Review
教材原文:RHCA 官方英文教材(PDF 第 477~499 页)(OCR 整书版已从本站移除,本页为章节精读) 关联中文笔记:
02-09-性能调优RH442(RHCA).md;本章=全课综合复习:先按章回顾 12 章目标,再做 3 个串讲大 Lab(compreview-cpu / compreview-disk / compreview-memory),等于“考试实践清单”。 结构:章节总览(477~479)→ Lab1 CPU 型应用(含 Solution)→ Lab2 存储型应用(含 Solution)→ Lab3 大内存实现(含 Solution)→ 全部用lab compreview-* grade评分。 ⚠️ 本章无新知识点,均为前 12 章命令的组合应用;考试前建议把三个 Lab 亲手各跑一遍到 grade 通过。
Chapter Goal / Objectives(原文+译)
- GOAL: Review tasks from Red Hat Performance Tuning: Linux in Physical, Virtual and Cloud.(复习本课程全部调优任务。)
- OBJECTIVES: 回顾并刷新 Red Hat Performance Tuning 各章知识与技能。
12 章目标速览(自查清单)
- Ch1 调优方法论:目标/术语、分析方法、单位换算(USE 方法)→ 见
RH442-01。 - Ch2 监控工具选型:系统监控工具、sysstat 架构、PCP 标准化数据结构 →
RH442-02。 - Ch3 硬件资源:硬件清单工具、虚拟/云实例资源查看 →
RH442-03。 - Ch4 内核可调参数与 tuned:静态内核/模块参数、选档、自订档 →
RH442-04。 - Ch5 cgroup 资源限制:服务/应用/用户分组限制 →
RH442-05。 - Ch6 系统追踪:perf、strace、SystemTap、eBPF →
RH442-06。 - Ch7 CPU 调优:调度策略、CPU/中断亲和、CPU 缓存 →
RH442-07。 - Ch8 内存调优:架构/分页/NUMA/overcommit →
RH442-08。 - Ch9 存储 I/O:I/O 模式与调度算法、RAID 对齐、I/O 分析工具 →
RH442-09。 - Ch10 文件系统:XFS/ext4 选择与属性、日志与外部日志 →
RH442-10。 - Ch11 网络:延迟/吞吐与 BDP、ethtool 设备参数 →
RH442-11。 - Ch12 虚拟化宿主机:虚机 vs 云调优差异、开源工具采集虚机指标 →
RH442-12。
Lab 1:Tuning for a Computation-heavy Application(CPU 型应用;lab: compreview-cpu)
- 场景:给服务限 CPU(slice)、把服务绑核、改调度算法与优先级——把 Ch5 cgroup+systemd 与 Ch7 CPU 调度串起来。
- 任务(serverb):
- slice 限 CPU 50%:建
/etc/systemd/system/system-frontend.slice:[Unit] Description=frontend slice+[Slice] CPUQuota=50%+CPUAccounting=yes;建 drop-in/etc/systemd/system/frontend.service.d/10-slice.conf:[Service] Slice=system-frontend.slice;daemon-reload+restart frontend。 - httpd 绑第一个 CPU:
tuna -t httpd -P先看(默认 affinity 0-1 分散两核);drop-in/etc/systemd/system/httpd.service.d/10-cpuAffinity.conf:[Service] CPUAffinity=0(CPU 从 0 数);重载重启后再tuna -t httpd -P验证只跑 CPU0。 - rngd 用 batch 调度+优先级 0:drop-in
/etc/systemd/system/rngd.service.d/20-batch.conf:[Service] CPUSchedulingPolicy=batch+CPUSchedulingPriority=0;重启后验证ps -o pid,cls,rtprio,comm -p $(pidof rngd)(cls=B)。
- slice 限 CPU 50%:建
- 验证要点:
systemctl status frontend | grep cGroup显示在 system-frontend.slice 下;systemd-cgls /system.slice/system-frontend.slice看进程树;tuna -t <服务> -P(SCHED/affinity 列);ps -o pid,cls,rtprio,comm。
Lab 2:Tuning for a Storage-intensive Application(存储型应用;lab: compreview-disk)
- 场景:自订 tuned 档改磁盘 readahead + XFS 外部日志——串 Ch4 tuned+Ch10 文件系统(外部日志)。
- 任务(serverb):
- 自订档 virt-guest-lab:
mkdir /etc/tuned/virt-guest-lab,tuned.conf写:[main] summary=custom tuned profile+include=virtual-guest;[disk] devices=vdb+readahead=4096 sectors(disk 插件单位=扇区)。 tuned-adm profile virt-guest-lab启用;blockdev --getra /dev/vdb验证返回 4096。- XFS 外部日志:vdb 建 5 GiB 分区(数据)、vdc 建 1 GiB 分区(日志):
parted mklabel gpt+parted --align=opt mkpart primary xfs 0% 100%(vdc 到 1GiB)+partx -uv;mkfs.xfs -i size=512 -b size=4096 -l logdev=/dev/vdc1 /dev/vdb1;fstab 加/dev/vdb1 /bigfiles xfs relatime,logdev=/dev/vdc1 0 0;mount后findmnt --target /bigfiles验证(OPTIONS 含 logdev=/dev/vdc1)。
- 自订档 virt-guest-lab:
- 验证要点:blockdev --getra;findmnt 挂载选项;外部日志要求 mkfs 时
-l logdev=、挂载时 fstab 也带logdev=。
Lab 3:Tuning for a Large Memory Implementation(大内存实现;lab: compreview-memory)
- 场景:给数据库服务器做内存 tuned 档 + memload 服务限内存 + NUMA 均衡——串 Ch4 tuned、Ch8 内存(大页/THP/swappiness/dirty 页/overcommit)+ systemd MemoryLimit + NUMA(numactl)。
- 任务(serverb,start 脚本会重启机器):
- 建档 enterprise-database(
include=throughput-performance):[vm] transparent_hugepages=never(关 THP);[sysctl] vm.nr_hugepages=128(256 MiB ÷ 2 MiB = 128 页);vm.swappiness=1(用 swap 但尽量少);vm.dirty_background_ratio=3(脏页占 3% 后台回写);vm.dirty_ratio=15(15% 强制同步回写);vm.overcommit_memory=1(不限制虚存请求——memload 请求 40 GiB 虚存、实际只用几 MB,启发式下 malloc 失败,=1 后能启动)。 - memload 限物理内存 512 MiB:drop-in
/etc/systemd/system/memload.service.d/00-limit.conf:[Service] MemoryLimit=512M。 - 内存均布各 NUMA 节点:装 numactl;改
/etc/systemd/system/memload.service的 ExecStart:/bin/numactl --interleave all -- /usr/local/bin/memload 40G(必须全路径)。 - 启用档、
systemctl restart postgresql、systemctl start memload。
- 建档 enterprise-database(
- 验证要点:
systemctl status memload:Active running,Memory 显示10.2M (max: 512.0M)。grep Huge /proc/meminfo:HugePages_Total=128、Free=121 → 系统已用 7 个大页。numastat -c memload:按 Node 0~N 分布内存(interleave 生效)。- 全部通过
lab compreview-memory grade评分。
命令速查表
| 用途 | 命令 |
|---|---|
| slice | /etc/systemd/system/system-frontend.slice:[Slice] CPUQuota=50%CPUAccounting=yes;drop-in Slice=system-frontend.slice |
| 服务绑核 | drop-in [Service] CPUAffinity=0;tuna -t httpd -P 查验 |
| 调度策略 | drop-in [Service] CPUSchedulingPolicy=batchCPUSchedulingPriority=0;ps -o pid,cls,rtprio,comm -p $(pidof rngd) |
| tuned 自订档 | /etc/tuned/virt-guest-lab/tuned.conf:[main] summary=… include=virtual-guest;[disk] devices=vdbreadahead=4096 sectors;tuned-adm profile virt-guest-lab |
| readahead 验证 | blockdev --getra /dev/vdb |
| XFS 外部日志 | mkfs.xfs -i size=512 -b size=4096 -l logdev=/dev/vdc1 /dev/vdb1;fstab relatime,logdev=/dev/vdc1 |
| 内存 tuned 档 | [vm] transparent_hugepages=never;vm.nr_hugepages=128、vm.swappiness=1、vm.dirty_background_ratio=3、vm.dirty_ratio=15、vm.overcommit_memory=1 |
| 进程限内存 | drop-in [Service] MemoryLimit=512M;systemctl status memload 看 max |
| NUMA 均衡 | ExecStart=/bin/numactl --interleave all -- <程序>;numastat -c memload |
| 大页验证 | grep Huge /proc/meminfo(Total−Free=已用) |
| 实验/评分 | lab compreview-cpu|compreview-disk|compreview-memory start;lab compreview-* grade;… finish |
词汇表(考前高频)
| 英文 | 中文 | 速记 |
|---|---|---|
| slice / drop-in | 切片/覆盖文件 | systemd 资源隔离与覆盖 |
| CPUQuota / CPUAccounting | CPU 配额/记账 | 50%=一半核时间 |
| CPUAffinity | CPU 亲和 | 逗号分隔 CPU 列表 |
| CPUSchedulingPolicy / Priority | 调度策略/优先级 | batch=批处理调度 |
| tuna | 线程查验工具 | -t 服务名 -P 看 affinity |
| summary / include | tuned 档摘要/继承 | 自订档必备两键 |
| readahead | 预读扇区数 | disk 插件、blockdev --getra |
| logdev | XFS 外部日志设备 | mkfs 与挂载都要指 |
| transparent_hugepages | 透明大页 | never 关(DB 场景) |
| nr_hugepages | 标准大页数 | 256MiB/2MiB=128 |
| swappiness | swap 倾向 | 1=尽量少用 |
| dirty_background_ratio / dirty_ratio | 脏页后台/强制回写阈值 | 3% 后台、15% 阻塞 |
| overcommit_memory | 内存超量承诺 | 1=总答应(虚占内存程序) |
| MemoryLimit | systemd 内存上限 | 超限杀进程 |
| numactl --interleave all | 节点交错分配 | 内存均布 NUMA |
自测 10 题(综合串讲)
- 50% CPU 配额 slice 的完整做法?(system-frontend.slice 文件+CPUQuota=50%+CPUAccounting=yes;服务 drop-in 指 Slice)
- systemd 绑核参数与首核编号?(CPUAffinity=0;CPU 从 0 起)
- 让服务跑 batch 调度且优先级 0 的 drop-in?(CPUSchedulingPolicy=batch、CPUSchedulingPriority=0)
- 怎么确认 httpd 真绑到 CPU0?(tuna -t httpd -P 的 affinity 列;或 ps 对照)
- tuned 的 disk 插件 readahead 单位?(扇区;devices=vdb+readahead=4096 sectors,blockdev --getra 验证)
- XFS 外部日志从 mkfs 到挂载要做哪两步?(mkfs -l logdev=;fstab/挂载带 logdev=)
- 256 MiB 标准大页为何 nr_hugepages=128?(页 2 MiB:256/2=128)
- 脏页 3%/15% 对应哪两个 sysctl?(dirty_background_ratio=3 后台、dirty_ratio=15 强制)
- memload 40G 虚存 malloc 失败怎么修?(vm.overcommit_memory=1;真实占用仍受 MemoryLimit=512M 约束)
- 让进程内存均布 NUMA 用什么?(ExecStart 前缀 /bin/numactl --interleave all --;numastat -c 验证)
