13 使用 TuneD 进行自适应动态微调 #
TuneD 是 Linux 系统的一个守护程序,它会监控 CPU 和磁盘使用情况,并调整特定设置,以在特定工作负载下优化系统性能。其他系统设置(如通过 sysctl
配置的那些)会在服务启动时应用,且保持静态,除非手动重新加载。TuneD 提供了为服务器、虚拟机等常见用例量身定制的预定义微调配置文件,同时支持创建自定义配置文件。TuneD 借助多个微调插件与底层 Linux 子系统交互,对 CPU、磁盘 I/O、网络、虚拟内存、电源管理及其他组件进行微调。
13.1 TuneD 简介 #
TuneD 应用程序会根据 CPU、磁盘等不同系统资源的使用情况,监控并调整特定 SUSE Linux Enterprise Server 工作负载上的系统设置。TuneD 的主要目标是在无需手动配置底层系统设置(这些设置可能复杂且容易出错)的情况下,实现能源效率、优化性能和高效的资源利用。
系统管理员可根据当前的使用场景或系统上的工作负载,应用预定义或自定义的 TuneD 配置文件。这些配置文件包含针对 CPU、磁盘 I/O 调度程序、虚拟内存和电源管理等特定系统组件的设置。系统组件由插件进行管理,这些插件会根据已激活的配置文件设置对系统进行微调。
13.2 TuneD 的组件 #
TuneD 应用程序由以下关键组件构成:
tuned
守护程序这是在后台运行的核心守护进程,负责监控系统使用情况并应用微调设置。它处理配置文件切换以及其他组件的协调工作。与该守护程序相关联的内容如下:
tuned
命令:在使用systemctl
启用 TuneD 后即可使用。默认情况下,从终端手动调用时,tuned
以普通进程形式运行。不过,您可使用--daemon
选项使其以后台进程形式运行。tuned
systemd 服务:用于管理守护进程,例如在系统引导时启动守护程序、停止或重启守护程序,以及确保其在必要的权限和环境下运行。
有关详细信息,请查看
tuned
手册页。>
man tuned
- tuned-adm
这是一个用于管理
tuned
守护程序的命令行实用程序。要了解使用tuned-adm
管理tuned
守护程序的基础知识,请参见第 13.4.2.1 节 “使用tuned-adm
”。- 配置文件
TuneD 配置文件是一组系统组件设置的集合,可应用于系统以进行微调。系统管理员既可使用随 tuned 软件包一同安装在
/usr/lib/tuned/
目录下的受支持配置文件,也可在/etc/tuned/
目录下创建自定义配置文件来应用此类配置文件。如果自定义配置文件与受支持配置文件的文件名相同,则优先应用自定义配置文件。有关详细信息,请访问 第 13.4 节 “TuneD 配置文件”。- 插件
TuneD 插件是针对不同子系统的微调逻辑实现。当配置文件中包含与其控制的子系统相关的设置时,会调用插件。插件根据相关设置的值对该子系统进行微调。一些关键且最常用的插件用于管理 CPU、磁盘、网络、虚拟机、视频和音频等子系统。此外,我们还提供了可选的监控插件,用于监控特定子系统并将相关信息传递给守护程序,以进行动态微调。有关详细信息,请访问 第 13.6 节 “TuneD 插件”。
- 扩展脚本
系统管理员可通过自定义脚本来扩展 TuneD 配置文件和插件的生态系统,这些脚本可在应用配置文件之前或之后执行。要使用扩展脚本,需在配置文件配置中指定脚本的路径和类型。这种可扩展性支持实现自定义微调逻辑,并能更好地控制整个配置文件应用过程。有关详细信息,请参见第 13.4.2.2 节 “使用配置文件钩子”。
13.3 管理 TuneD #
本节介绍用于在 SUSE Linux Enterprise Server 上管理 tuned
服务生命周期的基本任务。内容包括如何安装来自官方储存库的 tuned 软件包、启用和禁用相关的 systemd 服务以实现自动启动,以及将 tuned
守护程序作为由 systemd 管理的后台进程运行或作为普通的前台进程运行。对 tuned
服务进行妥善管理可确保动态微调功能在需要时可用且能得到有效控制,从而让您能够根据需求优化系统性能和资源利用率。
13.3.1 安装 TuneD #
安装受支持版本的 TuneD 的推荐方法是使用 zypper
软件包管理器安装 tuned 软件包。
tuned 软件包仅在 SUSE Linux Enterprise Server 官方储存库中提供。SUSE Linux Enterprise Desktop 官方储存库中没有对应的软件包。
运行以下命令安装
tuned
守护程序、命令行实用程序、配置文件和插件:>
sudo
zypper install -y tuned
运行以下命令确认安装结果:
>
tuned --help
>
tuned-adm --help
(可选) 要了解更多信息,请查看
tuned
、tuned-adm
、tuned-profiles
和tuned.conf
的手册页。
13.3.2 启用 tuned
#
要启用 tuned
,请执行以下过程:
检查
tuned
服务的状态:>
sudo
systemctl status tuned
默认情况下,该服务处于禁用状态。
如果要启用 systemd 服务以确保
tuned
守护程序在未来系统引导时自动启动,请运行以下命令:>
sudo
systemctl enable tuned
不过,此命令不会启动
tuned
过程。如果现在检查 systemd 服务的状态,它应该处于已启用但非活动状态。
13.3.3 启动 tuned
#
为 tuned
启用相关的 systemd 服务后,对于当前会话,您可以启动 tuned
作为后台守护程序运行或作为连接到 TTY 的普通前台进程运行。
或者,您也可以启用相关的 systemd 服务并同时启动该守护程序。
根据您希望如何在不同会话中启动
tuned
,您可以采用以下几种方式:如果只想在当前会话中启动
tuned
,请执行以下步骤之一:启动
tuned
作为后台进程并让 systemd 管理该守护程序的状态:>
sudo
systemctl start tuned
注意:tuned
运行的配置文件一旦激活,
tuned
就会根据适用于系统的默认配置文件或当前活动的配置文件开始进行系统微调。要更改此行为,请使用tuned-adm
命令。有关详细信息,请参见第 13.4 节 “TuneD 配置文件”和第 13.6 节 “TuneD 插件”。仅在当前会话中启动
tuned
作为连接到 TTY 的普通进程运行:>
sudo
tuned
提示:运行tuned
命令您可以使用此命令来激活配置文件,甚至将其作为守护程序运行。有关详细信息,请运行
tuned --help
命令。
要让 systemd 服务在未来系统引导时启动,同时在当前会话中启动
tuned
守护程序,请运行以下命令:>
sudo
systemctl enable --now tuned
13.3.4 禁用 tuned
#
作为最佳实践,请执行以下步骤禁用 tuned
:
检查
tuned
systemd 服务的状态:>
sudo
systemctl status tuned
关闭或禁用之前应用的所有微调设置:
>
sudo
tuned-adm off
如果
tuned
守护程序处于活动状态,停止该守护程序:>
sudo
systemctl stop tuned
要阻止
tuned
守护程序在下次系统引导时自动激活,您可以采用两种方式:仅禁用相关的 systemd 服务:
>
sudo
systemctl disable tuned
同时禁用
tuned
systemd 服务并立即停止tuned
守护程序:>
sudo
systemctl disable --now tuned
13.4 TuneD 配置文件 #
TuneD 通过预定义配置文件对 SUSE Linux Enterprise Server 系统进行优化,这些配置文件包含为不同使用场景量身定制的设置。这些配置文件会调整多项系统设置,包括 CPU 调节器策略、磁盘 I/O 调度、网络参数和内核参数等,以提升性能、能源效率或其他系统特性。每个配置文件都针对特定场景设计,例如高吞吐量、低延迟、节能或虚拟化环境等。系统管理员可以使用 tuned-adm
命令在不同配置文件之间切换,也可以自定义或组合配置文件以满足特殊需求。本节介绍管理、创建和自定义 TuneD 配置文件的基础知识。
13.4.1 支持的 TuneD 配置文件 #
SUSE Linux Enterprise Server 支持以下配置文件:
- balanced
balanced
配置文件提供通用的系统优化,在性能和能耗之间取得良好平衡。它会动态调整 CPU 频率和电源状态,平衡 I/O 及网络性能与节能需求,适用于大多数桌面和服务器环境。- cpu-partitioning
cpu-partitioning
配置文件专为需要为特定任务或应用程序划分 CPU 资源的系统设计。它会配置 CPU 隔离和亲和性设置,并调整调度程序参数,以确保性能可预测性并减少进程间的干扰。该配置文件的配置变量在/etc/tuned/cpu-partitioning-variables.conf
中定义。- desktop
desktop
配置文件针对桌面环境优化系统,提升图形界面和桌面应用程序的性能。它会优化 CPU 和 I/O 性能,调整低延迟音频和视频播放设置,并减少节能措施,以确保流畅且响应迅速的用户体验。- latency-performance
latency-performance
配置文件优先考虑低延迟和确定性性能,而非节能。它将 CPU 调节器设置为性能模式,调整内核参数以减少延迟,并禁用可能产生延迟的节能功能,适用于实时应用程序和高性能计算场景。- mssql
mssql
配置文件通过微调 CPU 和内存设置、针对数据库访问模式优化磁盘 I/O、提升网络设置以改善数据库连接,从而优化运行 Microsoft SQL Server 的系统。- network-latency
network-latency
配置文件针对要求低延迟的应用程序(如金融交易平台和实时通讯系统)优化网络性能。它会配置网络设置以减少延迟,将 CPU 调节器设为性能模式,并调整内核参数以优先处理网络流量。- network-throughput
network-throughput
配置文件可增强系统以支持持续的高数据传输速率,尤其适用于旧款 CPU 或高速网络环境。它会微调网络堆栈参数以实现最大的吞吐量,并优化 CPU 设置以应对高网络负载。- powersave
该模式会优化系统以提升能源效率,这可能会以牺牲性能为代价。将此配置作为独立配置文件或合并配置文件使用时,请仔细分析部署场景,确保其比
balanced
配置文件更节能。- throughput-performance
throughput-performance
配置文件可为处理多种任务的通用服务器最大化整体系统性能。它将 CPU 调节器设为性能模式,微调 I/O 和网络设置以实现高吞吐量,并调整内核参数以提升系统性能。- virtual-guest
virtual-guest
配置文件可为作为 Guest 运行的虚拟机优化性能和效率。它会针对虚拟化环境微调 CPU 和内存设置,并调整磁盘和网络设置,以确保实现最佳的资源利用率和虚拟机性能。- virtual-host
virtual-host
配置文件通过优化资源分配和性能,增强运行 KVM Guest 的系统。它会配置 CPU 和内存设置以支持托管多个虚拟机,微调 I/O 和网络设置,并优化内核参数以支持虚拟化。
有关 TuneD 配置文件的信息,请参见以下章节:
13.4.2 管理 TuneD 配置文件 #
如果您只想激活某个配置文件,请将其名称传递给 tuned
命令:
>
sudo
tuned --profile PROFILE_NAME
不过,管理 TuneD 配置文件生命周期的最佳做法是使用 tuned-adm
命令行工具。
13.4.2.1 使用 tuned-adm
#
您可以使用 tuned-adm
命令执行以下任务:
列出所有可用配置文件。
>
sudo
tuned-adm list
列出活动配置文件。
>
sudo
tuned-adm active
显示当前配置文件的信息。
>
sudo
tuned-adm profile_info
显示指定配置文件的信息。
>
sudo
tuned-adm profile_info PROFILE_NAME
根据当前系统使用情况推荐配置文件。
>
sudo
tuned-adm recommend
默认情况下,SUSE Linux Enterprise Server 中的 TuneD 会根据
/usr/lib/tuned/recommend.d/50-tuned.conf
中指定的配置推荐配置文件。您还可以通过创建文件/etc/tuned/recommend.conf
来定义自定义推荐规则,其优先级高于默认规则。显示当前配置文件选择模式。
>
sudo
tuned-adm profile_mode
自动选择配置文件,以及改用推荐的配置文件。
>
sudo
tuned-adm auto_profile
手动改用指定的配置文件。
>
sudo
tuned-adm profile PROFILE_NAME
验证是否已成功应用配置文件,以及系统状态是否与配置文件的配置相匹配。
>
sudo
tuned-adm verify
关闭所有微调配置。
>
sudo
tuned-adm off
有关 tuned-adm
的详细信息,请参见其帮助信息或手册页。
>
sudo
tuned-adm --help
>
man tuned-adm
13.4.2.2 使用配置文件钩子 #
配置文件钩子是在配置文件生命周期的不同阶段执行的特定脚本。使用它们,可以在应用配置文件时对所发生的操作进行更精细的控制和自定义。自定义配置文件的钩子通常放在 /etc/tuned/PROFILE_NAME/
配置文件目录下,默认或受支持配置文件的钩子则放在 /usr/lib/tuned/PROFILE_NAME/
目录下。
配置文件钩子可用于在特定事件发生前后执行自定义命令或脚本,这些事件包括:
启动配置文件
停止配置文件
验证配置文件
完全回滚配置文件
例如,在一个混用 balanced
和 powersave
配置文件的自定义配置文件中,我们可以包含一个配置文件钩子,以在应用该配置文件前显示某些相关信息。
在自定义配置文件目录
/etc/tuned/CUSTOM_PROFILE_NAME/
中创建名为start.sh
的脚本,其内容如下:例 13.2︰ 自定义钩子脚本以在应用自定义配置文件之前处理特定任务 ##!/bin/bash # Example task: Log the current CPU governor and energy performance bias echo "Current CPU governor: $(cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor)" >> /var/log/tuned/CUSTOM_PROFILE_NAME.log echo "Current energy performance bias: $(cat /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_bias)" >> /var/log/tuned/CUSTOM_PROFILE_NAME.log # Example task: Check for specific conditions before applying settings if [ ! -d "/sys/devices/system/cpu/cpufreq/policy0" ]; then echo "CPU frequency scaling not available, aborting profile application." >> /var/log/tuned/CUSTOM_PROFILE_NAME.log exit 1 fi # Example task: Notify about the upcoming profile application echo "Preparing to apply custom profile settings." >> /var/log/tuned/CUSTOM_PROFILE_NAME.log
确保该脚本可执行:
>
sudo
chmod +x /etc/tuned/CUSTOM_PROFILE_NAME/start.sh
在
/etc/tuned/CUSTOM_PROFILE_NAME/tuned.conf
的[script]
部分中添加该自定义脚本的路径:例 13.3︰ 包含自定义脚本路径的 TuneD 配置文件 #[main] include=balanced [cpu] governor=powersave energy_perf_bias=powersave [disk] # Inherit settings from balanced profile [sysctl] vm.swappiness=10 [script] script=/etc/tuned/CUSTOM_PROFILE_NAME/start.sh
应用自定义配置文件以测试自定义脚本:
>
sudo
tuned-adm profile CUSTOM_PROFILE_NAME
13.5 TuneD 配置 #
配置文件 (Configuration file) 构成了 TuneD 及其配置文件 (profile) 的基础。在 SUSE Linux Enterprise Server 中,/etc/tuned/
文件是 tuned
守护程序的主配置文件。该文件包含影响 TuneD 整体行为的全局设置。
此外,每个 TuneD 配置文件都有相应的 tuned.conf
配置文件,用于定义特定配置文件的具体微调参数和插件设置。特定于配置文件的配置文件分为几个部分,每个部分对应一个特定的 TuneD 插件或一组相关设置。系统管理员可以跨不同的子系统(例如 CPU、磁盘和网络)指定系统微调参数。有关 TuneD 插件的详细信息,请参见第 13.6 节 “TuneD 插件”。
13.5.1 全局 TuneD 配置 #
当 tuned
开始运行时(默认作为守护程序运行),系统会应用 /etc/tuned/tuned-main.conf
全局配置文件中的设置。此操作会为系统做好准备,以便在后续阶段应用特定于配置文件的额外微调。
默认的 /etc/tuned/tuned-main.conf
文件包含以下全局设置:
daemon = 1 1 dynamic_tuning = 1 2 sleep_interval = 1 3 update_interval = 10 4 recommend_command = 1 5 reapply_sysctl = 1 6 default_instance_priority = 0 7 udev_buffer_size = 1MB 8 log_file_count = 2 9 log_file_max_size = 1MB 10
指定是否使用 | |
启用或禁用设备的动态微调。如果设为 | |
定义 | |
设置更新动态微调的间隔(以秒为单位)。此值必须是 | |
控制 | |
决定在应用 TuneD 的 sysctl 设置后,是否重新应用来自 | |
指定分配给 TuneD 实例的默认优先级。值越大,优先级越高。 | |
定义 udev 事件的缓冲区大小。此设置有助于管理从 udev 处理的数据量。 | |
设置 | |
指定每个日志文件在轮换前的最大大小。这可防止日志文件无限增大。例如,当默认日志文件 |
仅当确定修改会对 TuneD 的行为产生何种影响时,才可调整 /etc/tuned/
中全局设置的值。
有关 TuneD 主配置文件的详细说明,请查看手册页:
>
man 5 tuned-main.conf
13.5.2 支持的配置文件配置 #
每个支持的 TuneD 配置文件在 /usr/lib/tuned/
下都有对应的目录,每个该目录中都包含 /usr/lib/tuned/PROFILE_NAME/tuned.conf
配置文件。该配置文件 (configuration file) 包含一组适用于此配置文件 (profile) 的默认插件、参数和选项。
13.5.2.1 TuneD 配置文件的一般语法 #
配置文件的一般语法如下:
[main] summary=SUMMARY_TEXT_STRING include=ANOTHER_PROFILE_NAME_AS_BASE [PLUG-IN] PARAMETER=OPTION PARAMETER=OPTION ... [PLUG-IN] # COMMENT_STRING PARAMETER=OPTION ...
要大致了解 TuneD 配置文件,请查看其手册页:
>
man 5 tuned.conf
13.5.3 自定义配置文件配置 #
此外,您可以定义自定义配置文件。对于每个自定义配置文件,需在 /etc/tuned/
中创建一个 PROFILE_NAME 目录,并将其配置文件放在该目录中。例如,自定义配置文件 (profile) 的配置文件 (configuration file) 可能位于路径 /etc/tuned/PROFILE_NAME/tuned.conf
下。不过,如果默认路径 /usr/lib/tuned/PROFILE_NAME
与自定义路径 /etc/tuned/PROFILE_NAME
中的 PROFILE_NAME 相同,则会优先应用自定义配置文件配置。自定义受支持配置文件的最佳实践是,从 /usr/lib/tuned/
将该配置文件复制到 /etc/tuned/
,然后再进行修改。这样可保留原始配置文件,并将自定义配置分离开来。
您可以在 /etc/tuned/
中指定除受支持配置文件和自定义配置文件的标准路径之外的路径,但不建议这么做,具体语法如下:
profile_dirs=/etc/tuned/,/usr/lib/tuned/,/PATH/TO/CUSTOM/DIRECTORY/
系统会按列出顺序在这些目录中搜索配置文件。在上面的示例中,会先搜索 /etc/tuned/
,再搜索 /usr/lib/tuned/
,最后搜索 /PATH/TO/CUSTOM/DIRECTORY/。
SUSE 不支持任何不属于 SUSE Linux Enterprise Server 官方储存库所提供 tuned 中包含的受支持配置文件的其他配置文件。仅当确定其效果后,才可在生产系统上创建并应用自定义配置文件。
13.5.3.1 通过合并配置创建自定义配置文件 #
最佳做法是,始终通过手动创建自定义配置文件配置来合并两个或多个配置文件。这种方式能让您清楚了解自定义的合并配置文件中参数和插件的具体组合。相比同时应用两个或多个配置文件而不检查动态生成的合并结果,这种方式虽然更繁琐,但更可靠。
在下面的示例中,我们来简单合并 balanced
和 powersave
配置文件。
balanced
和 powersave
配置文件 #创建自定义配置文件的路径:
>
sudo
mkdir /etc/tuned/CUSTOM_PROFILE_NAME
在以下目录中创建配置文件:
>
sudo
vi /etc/tuned/CUSTOM_PROFILE_NAME/tuned.conf
将以下配置添加到该文件:
例 13.6︰balanced
和powersave
TuneD 配置文件的合并配置 #[main] include=balanced 1 [cpu] 2 governor=powersave energy_perf_bias=powersave [disk] 3 # Inherit settings from balanced profile [sysctl] vm.swappiness=10 4
保存配置文件并退出文本编辑器。
合并
balanced
和powersave
配置文件中的特定参数后,应用新的自定义配置文件。>
sudo
tuned-adm profile CUSTOM_PROFILE_NAME
13.6 TuneD 插件 #
TuneD 插件是扩展 TuneD 系统守护程序功能的模块化组件。借助这些插件,系统管理员可以创建针对特定工作负载或硬件配置的自定义优化配置文件。TuneD 插件会利用多种系统指标和用户定义的参数,动态调整内核设置、CPU 频率、磁盘 I/O 调度程序以及其他底层系统参数,以实现最佳性能和能效。尽管核心 tuned 软件包中包含了多个预配置的配置文件,您仍可通过自定义插件扩展该软件包的功能,从而对系统进行更精细的控制。
在 TuneD 配置文件中包含插件的一般语法如下:
... [PLUGIN-NAME] PARAMETER_1=VALUE_1 PARAMETER_2=VALUE_2 ...
SUSE Linux Enterprise Server 支持的 TuneD 配置文件中包含多个插件及其参数。要查看所有此类插件的列表,请运行以下命令:
>
sudo
grep -r '\[.*\]' /usr/lib/tuned/*/tuned.conf | sort -u
13.6.1 支持的 TuneD 插件 #
SUSE Linux Enterprise Server 上支持以下 TuneD 插件:
- main
main
并非插件,而是 TuneD 配置文件中的一个特殊部分,用于提供配置文件的整体设置和元数据。[main]
部分最常用的参数如下:summary:配置文件关键功能的摘要。
include:用于将其他配置文件作为父配置文件包含在内,以便其配置可作为基础被继承。如果存在冲突,子配置文件的配置优先于被包含的配置文件的配置。
注意:TuneD 配置文件更新的影响当父配置文件的配置更新时,继承该父配置文件的子配置文件也会受到影响。
- modules
modules
插件用于在配置文件中管理内核模块。当配置文件被激活时,该插件可以加载或卸载特定模块,这样管理员便可通过控制激活的内核模块来优化系统针对不同工作负载的行为。使用此插件时,TuneD 会将内核模块的相关信息写入/etc/modprobe.d/tuned.conf
文件。如需添加应由
tuned
处理的内核模块参数,请使用以下语法将其包含在配置文件配置中:[modules] MODULE_NAME=MODULE_PARAMETERS1
多个模块参数可用逗号分隔。
如果希望模块自动重新加载,请使用
+r
选项:[modules] MODULE_NAME=+r,MODULE_PARAMETERS
例如:
例 13.7︰ 通过 TuneD 自动重新加载内核模块 #[modules] cpufreq_conservative=+r,down_threshold=20,up_threshold=80,sampling_rate=20000 1
cpufreq_conservative 是一个根据系统负载调整 CPU 时钟速度的内核模块。与
ondemand
等其他调节器相比,它在频率调节方面更为保守。=+r
语法表示如果模块尚未加载,则应加载该模块,且 TuneD 会跟踪有多少配置文件正在使用此模块。当加载带有+r
的模块时,TuneD 会增加该模块的引用计数。如果之后配置文件被停用,引用计数会减少。仅当引用计数为零时,模块才会被卸载,这意味着没有其他活动的配置文件在使用它。这些参数的含义如下:
down_threshold=20 表示当 CPU 使用率降至 20% 以下时,调节器会降低 CPU 频率以节省电量。
up_threshold=80 表示当 CPU 使用率超过 80% 时,调节器会提高 CPU 频率以提升性能。
sampling_rate=20000 表示调节器每 20,000 微秒(即 20 毫秒)进行一次 CPU 使用率采样。
有关内核模块的详细信息,请参见第 28 章 “管理内核模块”。此外,您可以通过查看
/sys/module/MODULE_NAME/parameters/
来检查系统上已安装模块的参数。- cpu
cpu
插件用于管理和优化与 CPU 相关的设置,以提升性能、节能或在两者之间取得平衡。此插件允许对 CPU 的运行方式进行精细控制,包括设置频率调节器、能源性能偏向,以及其他直接影响 CPU 行为和性能特性的参数。cpu
插件的一些常用参数如下:priority:设置 CPU 微调操作的优先级。值越大,微调操作的优先级越高。
governor:设置 CPU 频率调节调节器。该参数的常见选项如下:
performance
:强制 CPU 以最高频率运行,以更高的功耗为代价提供最佳性能。ondemand
:根据系统负载动态调整 CPU 频率,在性能和节能之间取得平衡。conservative
:与ondemand
调节器类似,但 CPU 频率升降更为平缓。适用于对节能的要求很高但仍需维持性能的系统。
energy_perf_bias:指示 CPU 如何平衡功耗与性能。该参数的常见选项如下:
performance
:偏向最高性能,可能会增加功耗。powersave
:偏向节能,可能会降低性能。power
:比powersave
更激进的节能设置,但对性能的影响可能小于performance
。normal
:性能与节能之间的平衡设置。
force_latency:控制 CPU 的强制延迟设置。值越小,系统越积极地应用节能措施,可能会以增加延迟为代价。值越大,节能措施的积极性越低,可能会提高响应速度。
min_perf_pct:以 CPU 最高性能的百分比指定最低性能水平。例如,值为 100 表示 CPU 始终以最高性能水平运行。如果值较小,则表示 CPU 可在不需要全性能时以较低性能水平运行,从而实现节能。
例如,为 CPU 密集型工作负载(如高性能计算)创建的配置文件可以将该插件配置为最大限度地利用 CPU 资源:
例 13.8︰ CPU 密集型工作负载的 TuneD 插件配置 #[cpu] priority=1 governor=performance energy_perf_bias=performance force_latency=10 min_perf_pct=100
有关 CPU 性能调节的详细信息,请访问 https://www.kernel.org/doc/Documentation/admin-guide/pm/cpufreq.rst。
- audio
audio
插件可对系统进行微调,以优化音频性能。这可能包括调整 CPU 调度策略、设置 CPU 亲和性以及配置其他系统参数,以将音频延迟降至最低、确保音频播放流畅并记录实时音频活动。例如:例 13.9︰ 优化音频性能的 TuneD 插件配置 #[audio] timeout=10 1 reset_controller=False 2
- video
video
插件提供了用于微调特定显卡(尤其是 AMD Radeon 显卡)节能设置的选项。例如:[video] radeon_powersave=dpm-balanced
此插件的常用参数如下:
radeon_powersave:该参数控制 AMD Radeon 显卡的节能模式。它决定 GPU 如何处理电源管理,会影响性能和能耗。该参数的配置选项如下:
default
:默认节能配置文件,是显卡驱动程序提供的默认设置。auto
:根据当前系统使用情况自动调整节能设置。low
:降低性能以节省能源的低功耗配置文件。mid
:平衡性能与节能的中功耗配置文件。high
:以更高功耗为代价实现性能最大化的高功耗配置文件。dynpm
:允许根据工作负载动态调整的动态电源管理 (DPM) 模式。dpm-battery
:针对电池使用优化的 DPM 配置文件。dpm-balanced
:平衡性能与能效的 DPM 配置文件。dpm-performance
:针对最高性能优化的 DPM 配置文件。
- disk
disk
插件可对磁盘驱动器的性能和功耗进行微调和优化。常用参数及其可能的值如下:
devices:指定微调参数应该应用于哪些磁盘设备。默认情况下,包含所有设备。可用逗号分隔指定多个设备。
dynamic:用于启用或禁用基于磁盘负载的动态微调的布尔值。默认情况下设为
True
。elevator:为磁盘配置 I/O 调度程序(电梯算法)。根据系统可用的调度程序,可能的选项包括
noop
、deadline
或cfq
。apm:用于设置磁盘高级电源管理 (APM) 级别的整数 (1–254)。值越大,通常性能越好,但功耗也越高。
spindown:spindown 参数的整数值是 hdparm 实用程序用于设置磁盘停转超时的特殊编码。有关可接受的停转值的说明,请查看 hdparm 手册页中的
-S
选项。readahead:设置磁盘预读值(以千字节为单位)的整数。可以通过添加适当的后缀将其改为扇区。例如,
readahead = 8192 s
。确保数字和后缀之间至少有一个空格。readahead_multiply:一个浮点值,表示 readahead 参数值的乘数因子。
scheduler_quantum:一个整数,用于设置调度程序同时处理的 I/O 请求数量。如果设置较大的值,则允许在切换前处理更多请求,从而提升顺序 I/O 操作的吞吐量。相反,如果设置的值较小,则会降低延迟,从而提升随机 I/O 操作的响应速度。
请参考 TuneD 配置文件中的以下
disk
插件配置示例:例 13.10︰ TuneD 配置文件中的disk
插件配置 #[disk] # Comma separated list of devices, all devices if commented out. devices=sda,sdb dynamic=True elevator=deadline apm=128 spindown=60 # Readahead adjusted to sectors by specifying relevant suffix. # There must be at least one space between the number and suffix. readahead=8192 s readahead_multiply=1.5 scheduler_quantum=64
- scsi_host
scsi_host
插件用于管理 Linux 系统上 SCSI(小型计算机系统接口)主机适配器的节能设置。该插件的常用参数如下:alpm:积极链路电源管理 (ALPM) 设置用于控制串行 ATA (SATA) 链路的电源管理策略。它可接受不同的值,以在节能与性能之间取得平衡。该参数的可能选项如下:
min_power
:此设置在节能方面更为激进。当 SATA 链路空闲时,它会将系统置于较低功耗状态,这样可以节省更多电量,但可能会增加磁盘访问时的延迟。medium_power
:此设置在节能与性能之间实现平衡。其目标是在不过度影响系统性能的前提下降低功耗。max_performance
:此设置使 SCSI 主机和设备保持在最高功耗状态。它优先考虑速度和响应性而非能效,会禁用节能功能,以最大限度地降低延迟和提升吞吐量。
例如,我们来看看下面的配置,该配置适用于电池供电设备、低使用率服务器和长时间空闲的系统:
[scsi_host] alpm=min_power
注意:TuneD 对链路电源管理策略的读写通常会从
/sys/class/scsi_host/SCSI_HOST_NAME/link_power_management_policy
文件读取可能的值或将值写入该文件。具体的值可能取决于内核和硬件的支持情况。
- variables
variables
插件可用于定义可在不同 TuneD 配置文件中使用的变量。这对于设置可能会因系统环境或用户偏好而异的参数特别有用。通过集中定义变量,可以简化配置文件管理并提高微调配置的灵活性。在配置文件配置的
[variables]
部分,可以通过以下方式指定变量:[variables] include=PATH/TO/VARIABLE/CONFIGURATION/FILE 1 VAR_NAME=value 2 VAR_ANOTHER=${VAR_NAME_suffix} 3 VAR_DYNAMIC=$(uname -r) 4
包含一个已包含特定上下文变量定义的配置文件。例如,可以包含
/etc/tuned/cpu-partitioning-variables.conf
文件,使isolated_cores
等变量及其值可用于当前的配置文件配置。通过赋值直接定义变量。
使用另一个变量定义变量。
使用命令输出定义变量。
例如,我们来看看下面的变量配置,以及它后续在为某个配置文件配置其他插件时的用法:
例 13.11︰ 在 TuneD 配置文件中为插件配置使用动态变量 #[variables] include=/etc/tuned/cpu-partitioning-variables.conf SWAPPINESS_VALUE=10 NETWORK_INTERFACE=$(ip -o -4 route show to default | awk '{print $5}') [sysctl] vm.swappiness=${SWAPPINESS_VALUE} [net] interface=${NETWORK_INTERFACE} disable_offload=yes
对于更复杂的变量定义,请查看受支持配置文件中的
[variables]
插件配置。要获取包含[variables]
插件的配置文件配置路径列表,请运行以下命令:>
sudo
grep -r '\[.*\]' /usr/lib/tuned/*/tuned.conf | sort -u | grep variables
- sysctl
sysctl
插件提供了一种在运行时自定义多个内核参数的有效方式。这样系统管理员便能优化系统性能、增强安全性并调整网络行为,而无需直接编辑系统文件或手动运行 sysctl 命令。sysctl
插件接受多种参数。常见类别包括:内核参数 (kernel.*)
虚拟内存参数 (vm.*)
网络参数 (net.*)
文件系统参数 (fs.*)
其中
*
是通配符,表示该类别允许的参数。应用这些参数时,TuneD 可能会在底层使用sysctl
。例如:>
sysctl -q -w CATEGORY.PARAMETER=VALUE
下面概述了
sysctl
插件的常用参数及可能的值:重要:修改sysctl
参数前需了解相关影响修改这些参数可能会显著影响系统行为。在进行更改前,务必了解其影响。有关详细说明,请参见官方内核文档。
kernel.hung_task_timeout_secs:任务被视为挂起前的时长(以秒为单位,默认值:
120
)。kernel.numa_balancing:启用 (
1
) 或禁用 (0
) 自动 NUMA 平衡。kernel.nmi_watchdog:启用 (
1
) 或禁用 (0
) NMI 看门狗。kernel.timer_migration:启用 (
1
) 或禁用 (0
) 计时器迁移。kernel.sched_autogroup_enabled:启用 (
1
) 或禁用 (0
) 调度程序自动分组。kernel.sched_min_granularity_ns:CPU 密集型任务的最小抢占粒度(以纳秒为单位)。
kernel.sched_migration_cost_ns:调度程序将迁移的进程视为“缓存热点”的时长(以纳秒为单位)。
vm.stat_interval:虚拟机统计信息的更新间隔(默认值:
1
)。vm.dirty_ratio:系统内存中可被脏页填充的百分比,达到此百分比后,进程必须将脏页写入磁盘。
vm.dirty_background_ratio:系统内存中可被脏页填充的百分比,达到此百分比后,后台写回进程开始将脏页写入磁盘。
vm.swappiness:内核换出空闲进程的倾向。如果 swappiness 值为
0
,则表示内核应尽可能长时间地将进程保留在主内存中。vm.max_map_count:一个进程可拥有的内存映射区域的最大数量。
net.core.busy_read:
recvmsg
的忙循环次数(默认值:50
)。net.core.busy_poll:
poll
的忙循环次数(默认值:50
)。net.ipv4.tcp_fastopen:启用 (
1
) 或禁用 (0
) TCP 快速打开。net.ipv4.tcp_rmem:TCP 读缓冲区大小(最小值、默认值和最大值,以空格分隔)。
net.ipv4.tcp_wmem:TCP 写缓冲区大小(最小值、默认值和最大值,以空格分隔)。
net.ipv4.udp_mem:UDP 缓冲区大小(最小值、默认值和最大值,以空格分隔)。
fs.aio-max-nr:允许的最大并发异步 I/O 请求数量。
fs.file-max:Linux 内核分配的最大文件句柄数量。
fs.inotify.max_user_instances:每个用户的最大
inotify
实例数量。fs.inotify.max_user_watches:每个用户的最大
inotify
监视点数量。fs.nr_open:一个进程可拥有的最大文件描述符数量。
fs.suid_dumpable:控制是否为设置了用户 ID 或设置了组 ID 的程序生成核心转储。
请参考下面的
sysctl
插件配置示例:例 13.12︰ TuneD 配置文件中的sysctl
插件配置示例 #[sysctl] # Kernel Parameters kernel.hung_task_timeout_secs = 600 kernel.nmi_watchdog = 0 kernel.timer_migration = 1 kernel.sched_autogroup_enabled = 1 kernel.sched_min_granularity_ns = 10000000 kernel.sched_migration_cost_ns = 5000000 kernel.sched_latency_ns = 60000000 kernel.sched_wakeup_granularity_ns = 2000000 kernel.numa_balancing = 0 # Virtual Machine Parameters vm.stat_interval = 10 vm.dirty_ratio = 10 vm.dirty_background_ratio = 3 vm.swappiness = 10 vm.max_map_count = 800000 # Network Parameters net.core.busy_read = 50 net.core.busy_poll = 50 net.ipv4.tcp_fastopen = 3 net.ipv4.tcp_rmem = "4096 87380 16777216" net.ipv4.tcp_wmem = "4096 16384 16777216" net.ipv4.udp_mem = "3145728 4194304 16777216" # Filesystem Parameters fs.aio-max-nr = 1048576 fs.file-max = 2097152 fs.inotify.max_user_instances = 1024 fs.inotify.max_user_watches = 524288 fs.nr_open = 1048576 fs.suid_dumpable = 1
提示:更改sysctl
设置的最佳实践最佳 sysctl 设置可能会因具体使用场景、硬件和系统的工作负载而有很大差异。建议对更改进行全面测试,并在应用新的 sysctl 配置后监控系统性能。
- sysfs
sysfs
插件接受系统文件系统下的任何有效文件路径或/sys/
目录。该插件会检查文件路径是否有效,并可以读取和写入属于配置的文件中的值。请参考下面的sysfs
插件配置示例:例 13.13︰ TuneD 配置文件中的sysfs
插件配置 #[sysfs] /sys/bus/workqueue/devices/writeback/cpumask = 2,6 1 /sys/devices/virtual/workqueue/cpumask = 3-5 2 /sys/devices/system/machinecheck/machinecheck*/ignore_ce = 1 3
以逗号分隔的单个 CPU。仅允许那些未使用 isolcpus 内核引导参数隔离的 CPU。要检查已隔离的 CPU,请运行
grep isolcpus /proc/cmdline
命令。要检查系统中的 CPU 总数,请运行lscpu | grep "^CPU(s):"
命令。CPU 范围。仅允许那些未使用 isolcpus 内核引导参数隔离的 CPU。要检查已隔离的 CPU,请运行
grep isolcpus /proc/cmdline
命令。要检查系统中的 CPU 总数,请运行lscpu | grep "^CPU(s):"
命令。可纠正错误 (CE) 是系统已检测到并自动纠正的硬件错误。
ignore_ce
属性属于 sysfs 设置,用于控制系统是否必须报告这些可纠正错误。如果ignore_ce
设为1
,系统会忽略可纠正错误,即这些错误不会被记录或报告给操作系统的错误处理机制。如果ignore_ce
设为0
(默认值),系统会报告并记录可纠正错误,供管理员监控。- systemd
systemd
插件主要用于配置systemd
的参数,后者是 SUSE Linux Enterprise Server 的系统和服务管理器。请参考下面的systemd
进程 CPU 亲和性插件配置示例:例 13.14︰ TuneD 配置文件中的systemd
插件配置 #[systemd] cpu_affinity=0,1,2 1
将 systemd 服务绑定到多个指定的 CPU 核心。默认为
None
。此示例中将服务配置为在 CPU 核心0
、1
和2
上运行。传递值的其他方式包括传递 CPU 核心范围,例如0-2
。不过,传递的值不能是在/etc/tuned/cpu-partitioning-variables.conf
文件中声明为 isolated_cores 的 CPU 核心。在该插件中配置 cpu_affinity 参数等同于在systemd
配置文件/etc/systemd/system.conf
中配置 CPUAffinity。- script
利用
script
插件,用户可以执行自定义脚本,TuneD 会在不同阶段运行这些脚本。系统管理员可以通过指定此类脚本的路径,使用该插件自动执行多项系统配置和优化操作。常用参数及可能的值如下:priority:用于设置脚本优先级的整数值。TuneD 会根据脚本的优先级执行脚本,数值越小表示优先级越高。因此,优先级为
5
的脚本与优先级数字小于5
的脚本相比,前者的优先级较低。script:指定 TuneD 要执行的脚本的路径。可以提供脚本的绝对路径作为参数值,也可以使用
PROFILE_DIR
变量传递脚本的相对路径。
请参考下面的相对脚本路径用法示例:
例 13.15︰ 在 TuneD 配置文件中使用变量包含相对脚本路径 #[script] priority=5 script=${i:PROFILE_DIR}/script.sh
提示:变量定义的参考资源有关实用变量的列表,请查看源代码文件 https://github.com/redhat-performance/tuned/blob/v2.10.0/tuned/consts.py 中定义的常量。
- scheduler
scheduler
插件用于管理 CPU 核心的隔离,以及通过添加到许可列表或 拒绝列表来选择要管理的进程。该插件主要用于隔离特定 CPU 核心,并管理哪些进程应由调度程序管理或不应由调度程序管理。常用参数及可能的值如下:isolated_cores:将特定 CPU 核心与通用调度程序隔离。进程可以绑定到这些隔离的核心上,以确保它们运行时不受其他系统进程的干扰。要为此参数传递值,请使用表示核心的整数(多个值需以逗号分隔)或十六进制格式的整数位掩码。例如,
isolated_cores=0,1
也可以用更简洁的0x3
表示。ps_whitelist:调度程序插件有权管理的允许的进程名称列表。只有与该模式匹配的进程才会被纳入调度调整范围。为此参数传递的值应是进程名称的正则表达式。例如,
.*
会与所有进程匹配,而^bash$
仅会与bash
进程匹配。ps_blacklist:插件排除在管理范围之外的进程名称列表。与该模式匹配的进程不会被插件调整。为此参数传递的值应是进程名称的正则表达式。例如,
.*
会与所有进程匹配,而^idle$
仅会与idle
进程匹配。
请参考下面的
scheduler
插件配置示例:例 13.16︰ TuneD 配置文件中的scheduler
插件配置 #isolated_cores=0x3 ps_whitelist=.* ps_blacklist=^idle$;.*pmd.*;.*PMD.*;^DPDK;.*qemu-kvm.*
- bootloader
bootloader
插件用于应用需要更改系统引导参数的性能配置文件。这些更改在引导加载程序配置文件(通常是 GRUB 2 配置)中进行,并在系统引导时应用。需要通过设置特定内核参数(如控制 CPU 隔离或电源管理的参数)以及其他可能影响整体系统行为和性能的引导时设置来优化系统性能时,该插件特别有用。下面概述了常用参数及其值:
grub2_cfg_file:指定要修改的 GRUB 2 配置文件。如果未提供,插件将使用系统中默认的 GRUB2 配置文件。
initrd_dst_img:设置 initrd 映像的目标路径。如果指定了该参数,initrd 映像将会复制到相应位置。路径必须是绝对路径,如果未提供,将使用默认的引导目录。
initrd_add_img:在 GRUB 2 配置中添加 initrd 映像的路径,以便在引导过程中使用自定义 initrd 映像。
initrd_add_dir:添加一个要包含在 initrd 映像中的目录。该参数会指定一个目录的路径,该目录的内容会被封装到 initrd 映像中并包含在引导配置中。这对于向 initrd 添加自定义模块或脚本非常有用。
initrd_remove_dir:一个布尔选项,用于指定在 initrd_add_dir 中指定的目录被封装到 initrd 映像后是否去除该目录。如果设为
True
,创建 initrd 映像后会删除源目录。cmdline:指定要添加到 GRUB 2 配置中的额外内核命令行参数。使用此参数,您可以添加可根据工作负载的特定需求优化系统性能或行为的自定义内核参数。
请参考下面的
bootloader
插件配置示例:例 13.17︰ TuneD 配置文件中的bootloader
插件配置 #[bootloader] cmdline="isolcpus=1-3 nohz_full=1-3 intel_pstate=disable" initrd_add_img="/path/to/custom-initrd.img" initrd_add_dir="/path/to/custom-initrd-dir" initrd_remove_dir=True initrd_dst_img="/boot/initrd-custom.img" grub2_cfg_file="/etc/grub2.cfg"
- net
net
插件用于配置多项优化网络性能的参数。下面概述了该插件常用的参数及其值:devices:指定以逗号分隔的网络设备名称列表。例如,
devices=eth0,eth1
。默认情况下,该设置会应用于所有网络设备。dynamic:用于启用或禁用基于网络负载的动态微调的布尔值 (
true
/false
)。wake_on_lan:使用以下字符的任意组合配置网络唤醒 (WoL) 设置:
p
:通过 PHY 活动唤醒。u
:通过单播消息唤醒。m
:通过多播消息唤醒。b
:通过广播消息唤醒。a
:通过 ARP 唤醒。g
:通过 MagicPacketTM 唤醒。s
:为 MagicPacketTM 启用 SecureOnTM。d
:禁用网络唤醒。
nf_conntrack_hashsize:用于设置连接跟踪哈希表大小的整数值。
features:网络设备功能名称及其期望状态的字典。例如,
tx-checksum: off, sg: on
。coalesce:数据包合并参数的字典。
adaptive-rx
和adaptive-tx
的可能值为on
或off
。以下参数的值为整数:
rx-usecs
、rx-frames
、rx-usecs-irq
、rx-frames-irq
、tx-usecs
、tx-frames
、tx-usecs-irq
、tx-frames-irq
、stats-block-usecs
、pkt-rate-low
、rx-usecs-low
、rx-frames-low
、tx-usecs-low
、tx-frames-low
、pkt-rate-high
、rx-usecs-high
、rx-frames-high
、tx-usecs-high
、tx-frames-high
、sample-interval
pause:暂停帧参数的字典。暂停帧参数
autoneg
、rx
和tx
的值为on
或off
。ring:环形缓冲区大小的字典。以下环形缓冲区大小参数的值为整数:
rx
、rx-mini
、rx-jumbo
和tx
。
请参考下面的网络设备参数配置示例:
例 13.18︰ TuneD 配置文件中的net
插件配置 #[net] devices=eth0,eth1 dynamic=true wake_on_lan=g nf_conntrack_hashsize=16384 features=tx-checksum:off, sg:on coalesce=adaptive-rx:on, rx-usecs:50, rx-frames:32 pause=autoneg:on, rx:on, tx:off ring=rx:2048, tx:1024
- vm
vm
插件用于优化虚拟化环境中的内存管理。它提供了微调与内存相关的参数的机制,特别侧重于透明大页 (THP) 的管理。该插件的常用参数及其值如下:transparent_hugepage 或 transparent_hugepages:这两个参数通常可互换使用,它们是别名,功能是控制透明大页的行为。与此参数相关的常见属性和值如下:
enabled
:控制透明大页的整体启用。可能的值为always
、madvise
和never
。defrag
:确定碎片整理应在何时进行(如果需要)。可能值的为always
、defer
、madvise
、defer+madvise
和never
。khugepaged
:配置与 khugepaged 守护程序相关的设置,包括scan_sleep_millisecs
和alloc_sleep_millisecs
等选项。
请参考 TuneD 配置文件中下面的
vm
插件配置示例:例 13.19︰ TuneD 配置文件中的vm
插件配置 #[vm] transparent_hugepages.enabled=always transparent_hugepage.defrag=always transparent_hugepages.khugepaged.scan_sleep_millisecs=10000
- eeepc_she
eeepc_she
插件增强了 ASUS EeePC 上网本的电源管理功能,特别是那些配备了超级混合引擎 (SHE) 技术的机型。它通过动态调整 CPU 频率和电源状态来优化系统性能,从而在能效和处理能力之间取得平衡。常用参数及其值如下:load_threshold_normal:切换至正常模式的负载阈值。默认值是
0.6
。load_threshold_powersave:切换至节能模式的负载阈值。默认值是
0.4
。she_powersave:用于将 SHE 设置为节能模式的值。默认值是
2
。she_normal:用于将 SHE 设置为正常模式的值。默认值是
1
。
13.7 更多信息 #
有关详细信息,请参考以下资源:
TuneD 项目官方网站:https://tuned-project.org/
GitHub 上的源代码储存库:https://github.com/redhat-performance/tuned。您可能会发现以下资源特别有用:
https://github.com/redhat-performance/tuned/tree/v2.10.0/profiles 上提供了多个配置文件 (profile) 的配置文件 (configuration file)。利用这些配置示例,您可以轻松着手创建 SUSE Linux Enterprise Server 的 tuned 软件包中未包含的自定义配置文件。
如果您有兴趣实现插件,以便根据配置文件中提供的值监控并动态微调系统,可在 https://github.com/redhat-performance/tuned/tree/v2.10.0/tuned/plugins 上获取源代码。
通过运行 tuned
--version
命令查看 SUSE Linux Enterprise Server 系统中的 tuned
版本。在 GitHub 储存库中,选择对应分支或标记,以查看系统上安装的特定 tuned
版本的源代码。