精读笔记(RHCA 英文教材)· RH442 Chapter 4 Configuring Kernel Tunables and Tuned Profiles
精读笔记(RHCA 英文教材)· RH442 Chapter 4 Configuring Kernel Tunables and Tuned Profiles
教材原文:RHCA 官方英文教材(PDF 第 136~171 页)(OCR 整书版已从本站移除,本页为章节精读) 关联中文笔记:
02-09-性能调优RH442(RHCA).md(内核参数:sysctl 临时 /etc/sysctl.conf 永久);本章=内核可调参数(/proc/sys、/sys、模块参数)+ tuned 服务(选档/自订档)。 结构:3 个 Section(4.1 内核可调参数+GE kerneltuning-tunables;4.2 选 tuned 档+GE kerneltuning-profile;4.3 自订 tuned 档+GE kerneltuning-customize)+ Lab(lab: kerneltuning-review)。
Chapter Goal / Objectives(原文+译)
- GOAL: Configure the operating system to best optimize performance for common workloads.(为常见工作负载配置最优性能。)
- OBJECTIVES: ① 配静态内核与动态可加载模块/驱动的设置;② 按最常见负载选合适 tuned 档;③ 为独特负载建自订档。
4.1 Configuring Kernel Tunables(内核可调参数)
- /proc 伪文件系统:内核数据结构的外部接口(开机挂 /proc)。文件权限与所代表参数一致(静态信息只读、可配置项可写)。改 /proc 文件=直接改内核内存里的参数。如 vmstat 读 /proc/meminfo。好处:开发者不用懂内核内部结构,按普通文件 open/read/write。
- /proc/sys 子目录(可调参数区):
/proc/sys/dev(RAID/CD-ROM/SCSI/并口等设备)、fs(文件系统如 quota)、kernel(内核内部行为如共享内存)、net(网络收发 socket 缓冲等)。- ⚠️ 直接改 /proc/sys 只写内存、重启即失效;且可能伤及其他负载(例:加大 TCP 缓冲提吞吐,但每连接占更多内存,连接多时挤压应用内存)。
- sysctl 命令:
sysctl -a列全部;sysctl -n <key>只打值(如sysctl -n vm.swappiness);sysctl -w vm.swappiness=10改运行中内核(值越低越不积极写 swap)。 - 持久化目录(开机加载顺序/覆盖关系):
/etc/sysctl.d/*.conf>/run/sysctl.d/*.conf>/usr/lib/sysctl.d/*.conf;同名文件用 /etc 覆盖更低层。别改 /usr/lib/sysctl.d(厂商默认,包更新会覆盖);文件必须以.conf结尾。 - /sys(sysfs)伪文件系统:挂 /sys,暴露设备/文件系统/内核模块信息与参数(从 /proc 独立出来,提高内核稳定性)。常用子目录:
/sys/module/(已载模块)、/sys/devices/、/sys/bus/(总线)、/sys/dev/(块/字符设备)。 - 模块参数:
modinfo -p <模块>查参数(如 loop 的 max_loop/max_part);载入后参数文件在/sys/module/<模块>/parameters/,可写就直接重定向改(重启失效)。- 持久化:建
/etc/modprobe.d/<名>.conf,语法options <模块> <参数>=<值>(如options loop max_loop=5);手动modprobe loop max_loop=5不持久。 - 内核可调项说明文档在
kernel-doc包:/usr/share/doc/kernel-doc-*/Documentation/...。
4.1 GE(lab: kerneltuning-tunables)
servera 上:用 sysctl 看/改若干参数(vm.swappiness 等)、写 /etc/sysctl.d 自定义 .conf 并 sysctl --system 加载;modinfo 查模块参数、写 /etc/modprobe.d/*.conf;重启/重载验证持久性。
4.2 Selecting a Tuned Profile
- tuned 服务:RHEL 性能调优服务,按工作负载用profile(档)做调优;可静态也可动态调优:
- 静态调优:服务启动/切换档时一次性设置预定义 sysctl 与 /sys 参数(不随负载变化)。
- 动态调优:监视系统活动、按运行时行为持续调整(兼顾性能与省电;性能类档通常禁用动态)。
- 安装启用:
yum install tuned;systemctl enable --now tuned(最小化 RHEL8 默认已装)。 - 内置档分类与代表(RHEL 建议别改预置档——很多是别档的父档):
- 省电类(powersave:USB auto-suspend/WiFi 省电/激进磁盘 spin-down…)
- 性能类(禁省电机制、提磁盘/网络吞吐、关 transparent huge pages 与 NUMA balancing、CPU governor=performance)
- 具体档:
balanced(默认通用)、desktop、throughput-performance(最大吞吐)、latency-performance(低延迟,静态锁高频防变频抖动)、network-latency(继承 latency-performance+网络低延迟参数)、network-throughput(继承 throughput-performance+加大网络缓冲)、virtual-guest(KVM guest 用)、virtual-host(宿主用)、oracle(继承 throughput-performance,面向 Oracle 负载:vm.swappiness=10、关 THP 等)、cpu-partitioning等。
- 管理命令:
tuned-adm list # 列可用档 + 当前档
tuned-adm active # 看当前档
tuned-adm profile latency-performance # 切换档
tuned-adm verify # 校验系统设置与档一致(查 /var/log/tuned/tuned.log)- 也可在 GNOME/cockpit 界面改(Settings→Power/Performance Profile)。
- 档文件布局:预置档在
/usr/lib/tuned/<档名>/tuned.conf;/etc/tuned/放自订档、active_profile(当前档名)、tuned-main.conf(动态调优配置)。档内可用 [main]、[sysctl]、[vm]、[disk](readahead)、[cpu] 等段。 - ⚠️
blockdev --getss <设备>可查扇区大小(read_ahead_kb 是 KiB,blockdev 用扇区=512 字节历史惯例,现多更大)。
4.2 GE(lab: kerneltuning-profile)
servera 上列档、切到 throughput-performance/latency-performance 等并 tuned-adm active 确认、用 tuned-adm verify 核对系统与档一致(含 Cockpit 界面路径)。
4.3 Customizing Tuned Profiles
- 为什么自订:预置档可能随更新变化;独特负载需更细调优。
- 继承父档:自订目录
/etc/tuned/<名字>/tuned.conf写[main] include=<父档>(如继承 network-throughput)。内置档有父子关系树(throughput-performance→network-throughput;balanced→desktop…;custom 可再做孙档)。 - 插件(plug-in):tuning 插件调各子系统、monitoring 插件收集数据;常用 tuning 插件:cpu、disk、mount、net、vm、sysctl、script。配置段语法:
[NAME] # 段名唯一;与插件同名时 type 可省,否则 type=必填
type=TYPE
devices=DEVICES # 逗号分隔列表;支持 * 通配;! 排除;缺省=*(所有设备)- 例:
[vm] transparent_hugepages=never(关透明大页,经 /sys/kernel/mm/transparent_hugepage/enabled);[sysctl] vm.swappiness=10等。 - script 插件:
[script] script=${i:PROFILE_DIR}/script.sh——脚本模板抄/usr/lib/tuned/powersave/script.sh、/usr/lib/tuned/sap/script.sh(提供 start()/stop(),停档时还原设置)。${i:PROFILE_DIR} 内建函数返回档所在目录。 - 验证:
tuned-adm verify("Verification succeeded, current system settings match the preset profile",日志 /var/log/tuned/tuned.log)。
4.3 GE(lab: kerneltuning-customize)
建自订档继承 throughput-performance,加 sysctl/disk/vm 定制(swappiness、readahead、关 THP),tuned-adm profile 应用 + verify 通过。
Lab 概要(lab: kerneltuning-review)
serverb:装/启 tuned;选 latency-performance 或按要求档;建自订档继承之并加 vm/disk 参数(dirty_ratio 等);verify + 评分 lab grade kerneltuning-review。
命令速查表
| 用途 | 命令 | | 读写内核参数 | sysctl -a;sysctl -n <key>;sysctl -w <key>=<值> | | 持久化 sysctl | /etc/sysctl.d/<名>.conf(重载 sysctl --system) | | 模块参数 | modinfo -p <模块>;cat /sys/module/<m>/parameters/<p>;modprobe <m> <p>=<值> | | 持久化模块参数 | /etc/modprobe.d/<名>.conf:options <模块> <p>=<值> | | tuned 管理 | yum install tuned;systemctl enable --now tuned;tuned-adm list\|active\|profile <档>\|verify | | 档目录 | /usr/lib/tuned/<档>/tuned.conf(内置);/etc/tuned/<档>/tuned.conf(自订) | | 实验/评分 | lab start kerneltuning-tunables\|kerneltuning-profile\|kerneltuning-customize\|kerneltuning-review;lab grade kerneltuning-review |
词汇表
| 英文 | 中文 | 速记 |
|---|---|---|
| proc pseudo file system | /proc 伪文件系统 | 内核数据结构接口 |
| tunable | 可调参数 | 改内存,重启失效 |
| sysctl | 内核参数工具 | -w 改、/etc/sysctl.d 持久 |
| sysfs (/sys) | 设备/模块信息 | 模块参数在 /sys/module |
| modprobe.d | 模块参数持久化 | options 模块 参数=值 |
| tuned / tuned-adm | 调优服务/管理命令 | profile 档、verify |
| static/dynamic tuning | 静态/动态调优 | 一次性设置 vs 按负载持续调 |
| profile inheritance | 档继承 | [main] include=父档 |
| tuning plug-in | 调优插件 | cpu/disk/net/vm/sysctl/script |
| transparent huge pages | 透明大页 | 性能档常关闭([vm]) |
| readahead | 预读 | disk 插件参数(read_ahead_kb) |
自测 10 题
- 改 /proc/sys 文件会持久吗?(不会,只改内存,重启还原)
- 持久化内核参数放哪?(/etc/sysctl.d/*.conf;别改 /usr/lib/sysctl.d)
- sysctl -w 与 -n 区别?(-w 写、-n 只打值)
- /sys 与 /proc 什么关系?(/sys 从 /proc 分离,管设备/模块参数)
- 模块参数怎么持久化?(/etc/modprobe.d/*.conf:options 模块 参数=值)
- 静态与动态调优区别?(静态一次性设参数;动态监控负载持续调,性能档禁用)
- 低延迟/最大吞吐档名?(latency-performance / throughput-performance;网络版 network-latency/network-throughput)
- 自订档怎么继承?(/etc/tuned/<名>/tuned.conf 的 [main] include=父档)
- 档配置里 [vm] transparent_hugepages=never 改哪个文件?(/sys/kernel/mm/transparent_hugepage/enabled)
- 怎么确认系统实际设置与档一致?(tuned-adm verify,日志 /var/log/tuned/tuned.log)
