2.5. Tuned

tuned 是一项守护程序,它会使用 udev 来监控联网装置,并且根据选择的配置文件对系统设置进行静态和动态的微调。它有许多为常见使用案例(例如高吞吐量、低延迟或者节电)的预定义配置文件,并且允许用户更改为每个配置文件定义的规则,还可以自定义如何对一个特定的设备进行微调。若要通过某个配置文件还原系统设置的所有更改,您可以切换到另一个配置文件,或者停用 tuned 守护程序。
静态微调主要包括预定义的 sysctlsysfs 设置和对几种配置工具的单次激活,例如 ethtooltuned 还会监控系统组件的使用状况,并根据监控的信息动态地微调信息系统设置。动态微调使得在任何给定系统的运行时间内,不同的系统组件能够以不同的方式被使用。例如,在启动和登录过程中会大量使用硬盘驱动器,但是之后用户可能主要使用类似网页浏览器或者电子邮件客户端这类的应用程序,这种情况下就几乎不会使用硬盘驱动器。类似地,不同的时间对 CPU 和网络设备的使用是不同的。Tuned 会监控这些组件的活动,并且对它们在使用过程中出现的改变作出反应。

注意

动态微调在 Red Hat Enterprise Linux 中被全局禁用,若要启用,请编辑 /etc/tuned/tuned-main.conf 文件, 将 dynamic_tuning 修改为 1
以典型的办公室工作站为例。大多数时间里,以太网网络接口是非常不活跃的。这段时间内可能只会偶尔接收和发送一些电子邮件,或者载入一些网页。对这类型的负载,网络接口并不需要一直按默认设置全速运行。tuned 有一个针对网络设备的监控和微调插件,能够检测这种低活跃度,然后自动降低该接口的速度,这样通常能够降低电源消耗。如果接口的活跃度在较长的时间内增加(比如因为正在下载一个 DVD 映像,或者打开一个有大附件的电子邮件),tuned 会检测到这种情况并将接口速度设置为最大,以便在活跃等级很高的时候提供最佳的性能。此原则也适用于 CPU 和硬盘的其它插件。

2.5.1. 插件

tuned 通常使用两种插件:“监控插件”和“微调插件”。监控插件是用来获取运行中的系统的信息。目前使用的是下列监控插件:
disk
获取每个设备在每个测量间隔的磁盘负载( IO 操作的数量)。
net
获取每个网卡在每个测量间隔的网络负载(已传输数据包的数量)。
load
获取每个 CPU 在每个测量间隔的 CPU 负载。
用于动态微调的微调插件可以使用监控插件的输出结果。目前使用的动态微调算法试图在性能和节能之间找到平衡,因此它在性能配置文件中是被禁用的(对单项插件的动态微调能够在 tuned 配置文件中启用或禁用)。若任何启用的微调插件需要监控插件的指标,监控插件将会自动实例化。如果两个微调插件需要相同的数据,监控插件只会生成一个实例,两个微调插件共享该数据。
每个微调插件会对一个单独的子系统进行调整,并且获得从 tuned 配置文件中导出的参数。每个子系统可以有多个由微调插件的单独实例操作的设备(比如多个 CPU 或者网卡)。同样支持为单独设备进行特定设置。提供的配置文件使用通配符来将所有的设备和独立子系统配对(欲知如何更改,请参阅〈第 2.5.3 节 “自定义配置文件”〉),这使得插件能够根据需要的目标(选定的文件)对子系统进行微调,用户只需要选择正确的 tuned 配置文件(欲知如何选择配置文件或获取提供的配置文件列表,请参阅〈第 2.5 节 “Tuned”〉和〈第 2.5.4 节 “Tuned-adm”〉)。目前主要使用下列微调插件(这些插件中只有一部分是用于动态微调,插件所支持的参数同样也已列出):
cpu
通过 governor 参数将 CPU 调控器设置为指定值,并且根据 CPU 负载动态地改变 PM QoS CPU DMA 延迟。如果 CPU 负载低于 load_threshold 参数设定的指定值,延迟便会根据 latency_high 参数设定的指定值被设置,不然它就会由 latency_low 参数设定的指定值设置。延迟同样可以被设为一个固定的值,而不被动态更改。这可以通过将 force_latency 参数设置为需要的延迟值办到。
eeepc_she
根据 CPU 负载动态设置 FSB 速度。一些上网本也具有此功能,这一功能也被称为华硕 Super Hybrid Engine。如果 CPU 负载低于或等于 load_threshold_powersave 参数设定的指定值, 插件会根据 she_powersave 参数设置 FSB 速度(请在 kernel 文档中查看关于 FSB 频率极其对应值的详细信息,该文档提供了对大多数用户有用的默认设置)。 如果 CPU 负载高于或等于 load_threshold_normal 参数设定的指定值,插件会根据 she_normal 参数设置 FSB 速度。若无法检测到硬件支持,那么就无法支持静态微调,插件也会被禁用。
net
根据 wake_on_lan 参数设定的指定值对 LAN 唤醒进行配置(它使用的是和 ethtool 实用工具相同的语法)。它也会根据接口使用情况动态地更改接口速度。
sysctl
使用插件参数设置不同的 sysctl 设置。该语法是 name=value,其中 namesysctl 工具提供的名称相同。如果需要改变其它插件无法更改的设置,请使用本插件(如果其它插件可以更改该设置,最好使用其它特定插件)。
usb
根据 autosuspend 参数设定的指定值对 USB 设备自动挂起超时进行设置。若该值为 0 意味着禁用自动挂起。
vm
启用或禁用透明 Huge Page 取决于 transparent_hugepages 参数的布尔值。
audio
根据 timeout 参数设定的指定值设置音频编码解码器的自动挂起超时。目前支持 snd_hda_intelsnd_ac97_codec。该值为 0 意味着自动挂起被禁用。您还可以将 reset_controller 的布尔参数设置为 true,以此来强制重设控制器。
disk
根据 elevator 参数设定的指定值设置 elevator。它同样会根据 alpm 参数设置 ALPM (请参阅〈第 3.7 节 “主动连接电源管理”〉),根据 aspm 参数设置 ASPM (请参阅〈第 3.6 节 “活动状态电源管理”〉),根据 scheduler_quantum 参数设置计划程序量程,根据 spindown 参数设置磁盘旋转降速,根据 readahead 参数设置磁盘 readahead ,根据 readahead_multiply 参数指定的常量乘以当前的 readahead 值。除此之外,这一插件会动态地更改高级电源管理和磁盘旋转降速超时,根据当前的驱动器使用情况对驱动器进行设置。默认情况下动态微调将被启用,并可以通过 dynamic 的布尔参数进行控制。
mounts
根据 disable_barriers 参数的布尔值启用或禁用挂载障碍。
script
此插件能够用来执行一种外置脚本,该脚本在配置文件已加载或未加载时都会运行。此脚本会被 startstop 参数调用(这取决于在配置文件加载或卸载期间脚本是否被调用)。您可以通过 script 参数指定脚本文件名。您需要在脚本中正确执行停止行为,并且还原在启动期间改变的所有设置,否则还原将无法运行。为了方便使用,functions 文件的 Bash 帮助脚本已经默认安装,您可以导入和使用其中定义的多种函数。此功能主要用于实现后向兼容性,建议您仅在其它插件无法提供需要的设置时使用本功能。
sysfs
通过插件参数设定不同的 sysfs 设置。该语法为 name=value,其中 name 是供 sysfs 路径使用的。如需更改其他插件未提供的设置,请使用本插件(若其它插件有提供需要的设置,最好使用该特定插件)。
video
为视频卡设置不同的节电等级(目前仅支持 Radeon 卡)。可使用 radeon_powersave 参数指定节电等级。支持的值有:defaultautolowmidhighdynpm。详情请参阅 http://www.x.org/wiki/RadeonFeature#KMS_Power_Management_Options。请注意此插件正处于试验阶段,未来发行时参数可能有所更改。

2.5.2. 安装和使用

若要安装 tuned 软件包,请以 root 身份运行下列指令:
yum install tuned
安装 tuned 软件包还会预先设置对您的系统最佳的配置文件。目前,默认配置文件是根据下列可自定义的规则选择的:
throughput-performance
此配置为 Fedora 操作系统预先选定的计算节点。在该系统上的目标是为了达到最佳吞吐量性能。
virtual-guest
虚拟机会预先选定此配置。若您不想实现最佳性能,请将其改变为 balanced 或者 powersave 配置文件(如下所示)。
balanced
其他情况下都会预先选定此配置。其目标在于平衡性能和电源消耗。
如需启动 tuned,请以 root 身份运行下列指令:
systemctl start tuned
若要在每次计算机启动时激活 tuned,请输入以下指令:
systemctl enable tuned
其它的 tuned 控制,例如配置文件选择等,请使用:
tuned-adm
此命令需要 tuned 服务正在运行。
若要查看可用的已安装配置文件,请运行:
tuned-adm list
若要查看目前已激活的配置文件,请运行:
tuned-adm active
若要选择或激活某一配置文件,请运行:
tuned-adm profile profile
例如:
tuned-adm profile powersave
此功能是一项试验性的功能,它可能一次选择较多的配置文件。 tuned 应用将会试图在加载期间将它们合并。若有冲突,将优先选择最后选定的配置文件的设置。这会自动实现,并且不会检查产生的合并参数是否有意义。如果不加考虑的使用,此功能可能会以完全相反的方式微调某些参数,其结果可能适得其反。例如,使用 throughput-performance 配置文件,将磁盘吞吐量设置为 high,同时,使用 spindown-disk 配置文件,将磁盘旋转降速设置为 low。下面的例子是在一台虚拟机上将系统优化为最佳性能,同时将其微调为低能耗,并且以低能耗为优先:
tuned-adm profile virtual-guest powersave
若要让 tuned 推荐最适合您的系统的配置文件,同时不改变任何现有的配置文件,也不使用安装期间使用过的逻辑,请运行以下指令:
tuned-adm recommend
tuned 自身有额外选项以供手动运行时使用。然而,我们并不建议您这样做,它主要用于 debug 目的。若要查看可用的选项,请使用以下指令:
tuned --help

2.5.3. 自定义配置文件

特定分配的配置文件被储存在 /usr/lib/tuned 目录中。每个配置文件都有它自己的目录。该配置文件可以构成名为 tuned.conf 的主要配置文件,也可选择构成其它文件,比如 helper 脚本。不要更改 /usr/lib/tuned 中的配置文件。若需要自定义配置文件,请将配置文件目录复制到 /etc/tuned 目录。这是自定义配置文件的位置。若存在两个名称相同的配置文件,将会以 /etc/tuned 中的配置文件为优先。您可以在 /etc/tuned 目录中创建您自己的配置文件,该目录中会有您感兴趣的配置文件,并且只会更改或替代您想要改动的参数。
tuned.conf 文件包含几个小节。其中有一个 [main] 节。其它的小节是插件配置实例。所有的节都是可选的,包括 [main] 节。该文件同样支持注释。以 # 开头的行就是注释。
[main] 节有如下选项:
include=profile
特定的配置文件将会被包含在内,例如,include=powersave 将会包括 powersave 配置文件。
描述插件的节将会以下列格式编排:
[NAME]
type=TYPE
devices=DEVICES
NAME 是插件实例在日志中使用的名称。它可以是任意字符。TYPE 指的是微调插件的类型。若要查看微调插件的清单和描述,请查看〈第 2.5.1 节 “插件”〉。DEVICES 是该插件实例将会管理的装置清单。devices 行可能包含一个清单,一个通配符(*),和否定(!)。您还可以将规则结合起来。若没有 devices 行,系统中现有的和之后连接的设备,只要符合 TYPE,都将被该插件实例管理。这和使用 devices=* 的效果是一样的。若插件中没有指定任何实例,插件将不会被启用。若插件支持更多的选项,它们也能在插件节中被指定。如果没有制定选项,默认值将被使用(如果之前没有在已包括的插件中进行指定)。若要查看插件选项列表,请查看〈第 2.5.1 节 “插件”〉。

例 2.1. 插件实例描述

下面的例子将对所有以 sd 开头(比如 sda 或者sdb)的装置进行匹配,同时不禁用障碍:
[data_disk]
type=disk
devices=sd*
disable_barriers=false
下面的例子将会除了 sda1sda2 以外的所有装置进行匹配:
[data_disk]
type=disk
devices=!sda1, !sda2 
disable_barriers=false
如果您不需要为插件实例自定义名称,而且您的配置文件中只有一个对该实例的定义,tuned 支持下面的短语法:
[TYPE]
devices=DEVICES
在这种情况下,可以省略 type 行。该实例将会被引用为一个 name,和 type 一样。那么先前的例子就能被改写为:
[disk]
devices=sdb*
disable_barriers=false
如果同一节被 include 选项指定超过一次,那么设置就会被合并。 如果它们因为有冲突而无法合并,最后的冲突定义将会优先于先前的设置。有时候您并不清楚之前有什么样的定义。这种情况下您可以使用 replace 布尔选项,将它设置为 true。这将会使得先前所有的名称相同的定义都会被覆盖,合并也就不会发生了。
您还可以通过指定 enabled=false 选项来禁用插件。这和不定义该实例的效果是一样的。若您想要重新定义 include 选项中的定义,并且不想要插件在自定义配置文件中被激活,禁用插件是很有用的。
大多数情况下,装置会被一个插件实例管理。如果装置和多个实例定义匹配,将会报告错误。
下面的例子是一个以 balanced 配置文件为基础的自定义配置文件,将它扩展为将所有设备的 ALPM 设置为最大节电模式。
[main]
include=balanced

[disk]
alpm=min_power

2.5.4. Tuned-adm

通常,具体的系统审核和分析非常耗时,并且这样做也不节能。之前的做法是使用默认设置。因此,Red Hat Enterprise Linux 7 针对两种极端的不同使用方式提供了不同的配置文件以供选择。同时,它还提供了 tuned-adm 工具,使得您可以通过命令行在这些配置文件间进行切换。Red Hat Enterprise Linux 7 包含很多适用于典型案例的预定义配置文件,您只要使用 tuned-adm 命令即可选择并激活它们,但您也可以自己创建、修改并删除配置文件。
要列出所有可用配置文件并识别目前激活的配置文件,请运行:
tuned-adm list
要只显示当前激活的配置文件请运行:
tuned-adm active
要切换到某个可用的配置文件请运行:
tuned-adm profile profile_name
例如:
tuned-adm profile server-powersave
要禁用所有微调:
tuned-adm off
下面是通过基础数据包安装的配置文件清单:
balanced
默认节电配置文件。其目的为在性能和节能之间找到平衡。它试图在任何可能的情况下都使用自动调整和自动微调。它对大多数负载都会产生好的结果。它唯一的缺点是会增加延迟。目前的 tuned 使得它能够启用 CPU、磁盘、音频和视频插件,还会激活 ondemand 调控器。radeon_powersave 会被设定为 auto
powersave
用于最大化节能效能的配置文件。它能限制效能,以最大限度地减少实际电量消耗。目前的 tuned 使得它能够为 SATA 主适配器启用 USB 自动挂起、 WiFi 节能和 ALPM 节能(请参阅〈第 3.7 节 “主动连接电源管理”〉)。它还会以低唤醒率为系统调度多核节能,同时激活 ondemand 控制器。它会根据您的系统启用 AC97 音频节电,或者启用每 10 秒超时的 HDA-Intel 节能。以防您的系统支持启用 KMS 的 Radeon 图形卡,它将自己配置为自动启用节能模式。在华硕 Eee PC 上,会启用动态 Super Hybrid Engine。

注意

powersave 配置文件可能不会总是最有效率的。请考虑以下情况:有一个工作量一定的任务需要完成,例如一个视频文件需要转码。若转码是在满电状态下进行的,您的电脑会消耗较少的电能,因为这种情况下任务会很快的完成,计算机将会闲置,并且能自动进入高效节电模式。另一方面如果您使用受限的机器对文件进行转码,在转码过程中会消耗较少的电能,但是转码过程将持续更久,总体的电量消耗可能会更高。这就是为什么 balanced 配置文件总体来说是一个更优的选择。
throughput-performance
将服务器向高吞吐量优化的配置文件。它会禁用节电机制,并启用 sysctl 设置,提升磁盘和网络 IO 的吞吐性能,并切换到 deadline 计划程序。CPU 调控器被设定为 performance
latency-performance
将服务器向低延迟优化的配置文件。它会禁用节电机制并启用 sysctl 设置,改善延迟。CPU 调控器被设定为 performance,CPU 会被锁定到低 C 状态(通过 PM QoS)。
network-latency
用于低延迟网络微调的配置文件。它以 latency-performance 配置文件为基础。它还会额外禁用透明 huge page 和 NUMA 平衡,并且微调一些与网络相关的 sysctl 参数。
network-throughput
用于微调网络吞吐量的配置文件。它以 throughput-performance 配置文件为基础。此外它还会增加 kernel 网络缓冲区。
virtual-guest
针对虚拟客机设计的配置文件。它基于企业储存配置文件,会降低虚拟内存的 sawp,增加磁盘预读值。它不会禁用磁盘障碍。
virtual-host
基于 enterprise-storage 的配置文件,会降低虚拟内存的 sawppiness,增加磁盘预读值,并且启用更积极的脏页(dirty page)回写。
sap
针对 SAP 软件进行最佳性能优化的配置文件。它基于 enterprise-storage 配置文件。sap 配置文件会额外微调有关共享内存和信号量的 sysctl 设置,以及进程可能有的最大内存映射数量。
desktop
基于 balanced 文件,针对台式电脑进行优化的配置文件。它会额外启用 autogroups 计划程序,以使交互应用获得更好的回复。
可以在选用频道中使用 tuned-profiles-compat 软件包安装额外的预定义配置文件。这些配置文件针对的是后向兼容性,并且不再开发。基础数据包中的通用配置文件的效果通常和这些配置文件一样或者更佳。若您没有特别的理由一定要使用这种配置文件,最好使用上面提到的基础数据包中的配置文件。兼容性配置文件如下所示:
default
此配置文件对节电的作用最小,并且只会启用 tuned 中的 CPU 和磁盘插件。
desktop-powersave
针对台式计算机系统的节电配置文件。它会为 SATA 主机适配器启用 ALPM 节电 (参阅〈第 3.7 节 “主动连接电源管理”〉),并启用 tuned 中的 CPU、以太网和磁盘插件。
server-powersave
针对服务器系统的节电配置文件。它会为 SATA 主机适配器启用 ALPM 节电,并激活 tuned 的 CPU 和磁盘插件。
laptop-ac-powersave
针对 AC 运行的笔记本电脑的中等节电配置文件。它会启用针对 SATA 主机适配器的 ALPM,还会启用 Wi-Fi 节能,以及 tuned 的 CPU、以太网和磁盘插件。
laptop-battery-powersave
针对使用电池电源的笔记本计算机的高效节电配置文件。目前的 tuned 中有一个 powersave 配置文件的别名。
spindown-disk
针对使用标准硬盘驱动器的计算机的节电配置文件,使旋转降速时间达到最长。它会禁用 tuned 节电机制,禁用 USB 自动挂起、蓝牙、Wi-Fi 节电和日志同步,增加磁盘回写时间,降低磁盘的 swap。所有的分区都通过 noatime 选项重新挂载。
enterprise-storage
针对企业级存储的服务器配置文件,使 I/O 吞吐量达到最大。它和 throughput-performance 配置文件激活一样的设置,增加预读设置,禁用非 root 分区和非 boot 的分区上的障碍。

2.5.5. Powertop2tuned

powertop2tuned 实用程序是一种允许您根据 PowerTOP 的建议创建自定义 tuned 配置文件的工具。(欲知关于 PowerTOP 的详细信息,请参阅〈第 2.2 节 “PowerTOP”〉)。
若要安装 powertop2tuned 应用,请以 root 身份运行以下指令:
yum install tuned-utils
若要创建自定义配置文件,请以 root 身份运行以下指令:
powertop2tuned new_profile_name
基于目前选择的 tuned 配置文件,它默认将配置文件创建在 /etc/tuned 目录中。为了安全,新配置文件中的所有 PowerTOP 微调最初都会被禁用。若要启用,请在 /etc/tuned/profile/tuned.conf 中对您想要启用的微调取消注释。您可以使用 --enable-e 选项,这些选项将会生成新的配置文件,同时会启用 PowerTOP 建议的大部分微调。一些危险的微调(例如 USB 自动挂起)将会被禁用。若您确实需要启用该微调,您需要手动取消注释。新配置文件默认为未激活状态。如需激活,请运行以下指令 :
tuned-adm profile new_profile_name
如需查看完整的 powertop2tuned 支持的选项清单,请输入以下指令:
powertop2tuned --help