精读笔记(RHCA 英文教材)· RH442 Chapter 3 Viewing Hardware Resources
精读笔记(RHCA 英文教材)· RH442 Chapter 3 Viewing Hardware Resources
教材原文:RHCA 官方英文教材(PDF 第 96~135 页)(OCR 整书版已从本站移除,本页为章节精读) 关联中文笔记:
02-09-性能调优RH442(RHCA).md(先建硬件画像再调优);本章=硬件画像工具链(物理机:dmesg/lscpu/dmidecode/lspci/lsusb/lstopo/lshw;虚拟化:kvm_stat/perf kvm)。 结构:2 个 Section(3.1 物理资源+GE viewing-physical;3.2 虚拟/云实例资源+GE viewing-virtual)+ Quiz + Summary。
Chapter Goal / Objectives(原文+译)
- GOAL: View and interpret hardware resource listings.(查看并解读硬件资源清单。)
- OBJECTIVES: ① 描述列系统硬件资源的工具(物理);② 描述列出虚拟/云实例资源的技术。
3.1 Displaying Physical Resources
- 为什么先建硬件画像:调优前要懂系统的理论能力。CPU(核/超线程/插槽)、内存(物理+swap=虚拟内存;内存充足可当缓存减少读盘;内存压力下内核在"缩缓存"与"换出到 swap"间取舍)、存储(HDD/SSD/RAID/SAN 等)、网络(如 InfiniBand 单链路最高 250 Gbps、可聚合到 16 条≈4 Tbps)。
- 信息源头:内核是全部硬件访问的媒介,经 /proc、/sys 与内核消息/事件暴露信息。
- dmesg(内核环形缓冲消息):
- 前两行=内核版本+引导命令行参数(排障要知道启动时传了哪些参数)。
- 可查 DMA 内存区(DMA/DMA32)、总可用内存、HugeTLB 页注册、I/O 调度器(mq-deadline/kyber/bfq)、SCSI 盘(sr0/sda…)、网卡驱动(tg3 eth0)等;出错时常带符号栈回溯(报 Red Hat 工单有用)。
- ⚠️ RHEL8 不再自动生成 /var/log/dmesg(被 systemd journal 取代;可自建 dmesg.service 恢复)。
dmesg -T把时间戳转人类可读格式。
- lscpu:CPU 架构概览——Architecture、CPU(s)(逻辑核数)、Thread(s) per core、Core(s) per socket、Socket(s)、NUMA node(s)、Vendor ID、Model name、CPU MHz、Virtualization(VT-x)、L1/L2/L3 缓存、NUMA node0 CPU(s) 映射。
lscpu -p可解析输出,末几列能推出哪些逻辑 CPU 共享哪级缓存(L1 每 CPU 独立,L2 常两两共享)。 - getconf:POSIX 标准调用,程序化取本地硬件参数;如
getconf -a PAGESIZE(页大小 4096)、NPROCESSORS_ONLN(在线 CPU 数)、LEVEL1_DCACHE_SIZE 等各级缓存参数(对软件优化有用)。 - dmidecode:读 SMBIOS/DMI 结构显示硬件信息(免去进机房):处理器(型号/核数/线程数/特性)、缓存(DMI type 7,含 associativity)、系统信息(厂商/型号/序列号/UUID)、内存条逐条(DMI type 17:容量/速度/通道;空槽也列出→评估扩容量)、板载网卡等。同一数据在
/sys/class/dmi/id/(如 product_name、product_serial)便于脚本化读取。 - lspci / lsusb:查 PCI 总线与 USB 总线设备(厂商:设备 ID、电源等细节)。
- lstopo(hwloc 包):图形化拓扑;无图形用
lstopo-no-graphics:机器内存→Package→Core→PU 层级、共享缓存(L3 16MB 等)、PCI 桥与设备,直观呈现 NUMA/共享关系。 - lshw:硬件清单详情(固件版本、主板、CPU 版本/速度、缓存、总线速度);
lshw -short精简列表;lshw -C system只看系统类。 - rasdaemon(RAS 错误上报):用户态守护捕获内核追踪机制产生的可靠性/可用性/可服务性错误(trace 事件在 /sys/kernel/debug/tracing,同时报 syslog/journald)。装
rasdaemon后systemctl enable --now rasdaemon;ras-mc-ctl --summary/--errors/--layout看内存控制器纠错统计与明细。⚠️ 若内核以某些参数启动(如 acpi=off)会 100% 占满每核 CPU——注意。
3.1 GE(lab: viewing-physical)
对 servera 做硬件画像:dmesg | head -n 2、lscpu(找 Model name/核数/缓存)、dmidecode(内存/系统)、lspci/lsusb、lstopo-no-graphics 或 GUI lstopo、lshw -short 等,回答 CPU 型号、核数、内存插槽等。
3.2 Displaying Resources in Virtual and Cloud Instances
- 架构名词:KVM=可加载内核模块(借 Intel VT/AMD-V 硬件扩展做全虚拟化;内核态跑 KVM,guest 以用户态 QEMU 进程呈现);libvirt 管理 VM 与虚拟设备;
virsh是其命令行。QEMU 给 guest 呈现的典型 virtio 设备:virtio-net-pci、virtio-scsi-pci、virtio-blk、virtio-balloon-pci、virtio-rng 等。 - 透传(Pass-through):
- PCI passthrough:整卡独占给某 guest(独立 DMA/中断)。
- CPU passthrough 不是直通 CPU,而是共享 CPU 特性配置:guest cpu mode 设
host-passthrough=完全用宿主 CPU 特性;host-model=同型号家族但不强制全部特性。用virsh dumpxml <guest>查<cpu mode=…>。 - SR-IOV:单个物理设备(如网卡)虚拟出多个独立功能,各 guest 有独立内存空间/中断/DMA 流,hypervisor 不参与数据搬运(性能好)。
- 内存气球(virtio-balloon):guest 内存条模型常配
<memballoon model='virtio'>;宿主动态回收/分配 guest 内存(气泡膨胀=回收、收缩=归还)。 - Right-sizing(合理规格化):VM 实例规划/安装/配置"刚刚够"的资源以控成本、保性能与扩展性:只装必要包、只跑所需服务;持续观察 host/guest 行为(空闲实例/重负载),不够再水平扩展;right-sizing 是持续过程。
- kvm_stat(host 侧看 guest):诊断 guest 性能;默认报所有运行中 guest。看 entry/exit 事件(kvm_entry/kvm_exit)比例——进出 KVM 与用户态 guest 的切换过高=CPU 开销过大信号。交互键:x=切换全局内核/用户统计,q=退出。
- perf kvm(host 上同时采 host+guest 计数):流程:
- guest 内把
/proc/modules、/proc/kallsyms重定向拷贝(直接 cp 设备文件=0 字节)到 /tmp,再 scp 到 host(供符号解析)。 - host:
perf kvm record -a -o <file> --guest --guestmodules=guest-modules --guestkallsyms=guest-kallsyms(Ctrl+C 停止)。 perf kvm report生成报告:guest 符号标[g]、host 内核标[k],据此分析热点(如 vmx_vcpu_run、vcpu_enter_guest 占高=虚拟化开销)。
- guest 内把
3.2 GE(lab: viewing-virtual)
servera 上跑 VM:用 virsh 看 guest、virsh dumpxml 查 cpu mode/balloon;host 用 kvm_stat 观察 entry/exit;guest 内导 /proc/modules、/proc/kallsyms 回 host,跑 perf kvm record/report 分析 guest 热点(对照 cpu 型号/特性输出)。
命令速查表
| 用途 | 命令 | | 内核消息 | dmesg \| head -n 2;dmesg -T;dmesg \| grep -i 'dma\|Huge\|io scheduler' | | CPU 信息 | lscpu;lscpu -p | | 系统参数 | getconf -a(PAGESIZE/NPROCESSORS_ONLN/缓存参数) | | SMBIOS/DMI | dmidecode;cat /sys/class/dmi/id/product_name | | 外设 | lspci;lsusb | | 拓扑 | lstopo / lstopo-no-graphics | | 硬件清单 | lshw [-short\|-C system] | | RAS 报错 | yum install rasdaemon;systemctl enable --now rasdaemon;ras-mc-ctl --summary\|--errors | | 虚拟化视图 | virsh dumpxml <guest>(cpu mode/balloon);kvm_stat | | guest 分析 | guest 里 cat /proc/modules >/tmp/modules、cat /proc/kallsyms >/tmp/kallsyms → host perf kvm record -a --guest… → perf kvm report | | 实验/评分 | lab start viewing-physical\|viewing-virtual |
词汇表
| 英文 | 中文 | 速记 |
|---|---|---|
| hardware profile | 硬件画像 | 调优第一步 |
| dmesg | 内核消息 | 版本/引导参数/驱动/DMA/调度器 |
| lscpu | CPU 概览 | 核/线程/插槽/NUMA/缓存 |
| getconf | 系统配置参数 | PAGESIZE、CPU/缓存常数 |
| dmidecode / SMBIOS/DMI | 固件信息读取 | CPU/内存条/序列号 |
| lspci / lsusb | PCI/USB 设备列表 | 总线视图 |
| lstopo / hwloc | 拓扑图 | 缓存共享与 NUMA 可视化 |
| lshw | 硬件清单 | -short 精简、-C 按类 |
| rasdaemon / ras-mc-ctl | RAS 错误上报 | 内存纠错/PCIe AER 统计 |
| KVM / QEMU / libvirt / virsh | 虚拟化栈 | 内核模块/模拟器/管理库/CLI |
| passthrough | 透传 | PCI 独占;CPU 特性共享(host-passthrough/model) |
| SR-IOV | 单根 I/O 虚拟化 | 一卡多虚功能,直通数据面 |
| virtio-balloon | 内存气球 | 宿主动态回收/归还 guest 内存 |
| right-sizing | 合理规格化 | 恰到好处的资源+水平扩展 |
| kvm_stat | KVM 统计 | entry/exit 比例=切换开销 |
| perf kvm | KVM 采样 | 需 guest modules/kallsyms 符号 |
自测 10 题
- 调优为什么先建硬件画像?(懂理论能力才能定目标与基线)
- dmesg 前两行给什么?(内核版本与引导命令行参数)
- RHEL8 的 /var/log/dmesg 还自动生成吗?(不,走 journal;可自建 service)
- 怎么判断哪些逻辑 CPU 共享 L2?(lscpu -p 解析列)
- getconf 有什么用?(程序化取 PAGESIZE、CPU 数、各级缓存大小等)
- dmidecode 对扩内存有什么帮助?(列出全部插槽含空槽,可评估加容量)
- 哪些命令做拓扑/清单?(lstopo/lstopo-no-graphics、lshw)
- CPU host-passthrough 与 host-model 区别?(前者全特性直通配置,后者同族但非全特性;都不是真直通 CPU)
- kvm_stat 里高 entry/exit 比例说明什么?(guest↔host 切换开销过大)
- perf kvm 分析 guest 前要准备什么?(guest 的 /proc/modules 与 /proc/kallsyms 拷贝到 host 供符号解析)
