Too young, too simple. Sometimes, naive & stupid

Tuned

Tuned是一个守护进程,用于udev监视连接的设备,并根据所选的配置文件静态和动态地调整系统设置。Tuned分布有许多预定义的配置文件,适用于高吞吐量,低延迟或powersave等常见用例。可以修改为每个配置文件定义的规则,并自定义如何调整特定设备。要还原特定配置文件对系统设置所做的所有更改,可以切换到另一个配置文件或停止tuned服务。

Tuned 支持 Tuned in on-deamon mode,此模式下,tuned会应用设置并退出。要启用这种模式,在/etc/tuned/tuned-main.conf文件中设置deamon = 0

静态调优主要包括预定义的sysctlsysfs设置以及一些配置工具的一次性激活。tuned还根据监控信息动态监控系统组件的使用并调整系统设置。

动态调整考虑了在任何给定系统的整个正常运行时间内各种系统组件的使用方式不同。例如,阴干驱动器在启动和登录期间大量使用,但稍后再用户可能主要使用web浏览器或电子邮件客户端几乎不适用,类似地,CPU和网络设备在不同时间使用特点也不同。tuned监控这些组件的活动并对其使用的变化做出反应。

典型的,办公室工作站。大多数情况下,以太网网络接口不是很活跃。每隔一段时间只有少量的电子邮件进出,或者可能会加载一些网页。对于那些类型的负载,网络接口不必全速运行,就像默认情况下那样。tuned有一个用于网络设备的监控和调整插件,可以检测到这活动,然后自动降低网络速率,通常为了降低功耗。如果界面上的活动增减了很长一段时间。例如正在下载,tuned检测到这一点并将接口速率设置为最大,以便活动级别如此之高时提供最佳性能。此原则也用于CPU和硬盘的其他插件。

动态tuned默认是禁用的,可以更改/etc/tuned/tuned-main.conf文件中的dynamic_tuning1来启用。

插件

tuned使用两种类型的插件:tuning plugins和,monitoring plugins,目前有一下monitoring plugins:

  • disk

    获取每个设备的磁盘负载(IO操作数)和测量间隔。

  • net

    获取每个网卡的网络负载(传输的数据包数)和测量间隔。

  • load

    获取每个CPU的CPU负载和测量间隔。

可能通tuning plugins进行动态调整来使用monitoring plugins的输出。当前实现的动态调整算法尝试平衡性能和powersave,因此在性能配置文件中被禁用(可以在tuned配置文件中启用或禁用各个插件的动态调整)。只要任何启用的调优插件需要其指标,monitoring plugins就会自动实例化,如果两个tuning plugins需要相同的数据,则只创建一个monitoring plugins实例并共享数据。

每个tuning plugins都会调整单个子系统,并从调整后的配置文件中获取几个参数。每个子系统可以具有多个设备(例如,多个CPU或网卡),这些设备由tuning plugins的各个实例处理。还支持各个设备的特定设置。提供的配置文件使用通配符来匹配各个子系统的所有设备,这允许插件根据所需膜表调整这些子系统(选定的配置文件)并且用户唯一需要做的就是选择正确的tuned配置文件。

目前,实现了以下tuning plugins

cpu

​ 将CPU调度器设置为governor参数指定的值,并根据CPU负载动态更改PM Qos CPU DMA延迟。如果CPU负载低于load_threshold参数指定的值,则将latency设置为latency_high参数指定的值,否则将其设置为latency_low指定的值。侧歪,可以将延迟强制为特定值,而无需进一步动态更改。这可以通过将force_latency参数设置为所需的延迟值来实现。

eeepc_she

​ 根据CPU负载情况动态设置FSB速度;一般不需要配置,如果CPU负载低于或等于load_threshold_powersave参数指定的值,则插件将FSB速度设置为参数指定的值。

net

​ 将wake-on-lan配置为wake_on_lan参数指定的值。还根据接口利用率动态改变接口速率。

sysctl

​ 设置sysctl插件参数指定的各种设置。语法为name = value,其中namesysctl工具提供的名称相同。如果需要更改其他插件未涵盖的设置,请使用此插件。

usb

​ 将USB设备的自动暂停超时设置为autosuspend参数指定的值。0表示禁用自动挂起。

audio

​ 将音频解码器的自动暂停超时设置为timeout参数指定的值。目前snd_hda_intelsnd_ac97_aodec得到支持。该值为0表示禁用自动暂停。

disk

将电梯设置为elevator参数指定的值。它还将ALPM设置为参数指定的值alpm,ASPM为参数指定的值aspm,scheduler quantum为scheduler_quantum参数指定的值,disk spindown timeout为spindown参数指定的值,disk readahead为指定的值readahead参数,可以将当前磁盘预读值乘以readahead_multiply参数指定的常量。此外,此插件根据当前驱动器利用率动态更改驱动器的高级电源管理和spindown超时设置。动态调整可以通过布尔参数控制dynamic,默认情况下启用。

mounts

根据disable_barriers参数的布尔值启用或禁用装载障碍。

script

此插件可用于执行在加载或卸载配置文件时运行的外部脚本。该脚本由一个参数调用,该参数可以是startstop(它取决于在配置文件加载或卸载期间是否调用脚本)。脚本文件名可以由script参数指定。请注意,您需要在脚本中正确实现停止操作并恢复在启动操作期间更改的所有设置,否则回滚将不起作用。为了您的方便,functions默认情况下安装Bash帮助程序脚本,允许您导入和使用其中定义的各种函数。请注意,此功能主要是为了向后兼容性而提供的,建议您将其用作最后的手段,如果它们涵盖了所需的设置,则更喜欢其他插件。

sysfs

设置sysfs插件参数指定的各种设置。语法是name= value,其中namesysfs要使用的路径。如果您需要更改其他插件未涵盖的某些设置,请使用此插件(如果它们涵盖了所需的设置,请选择特定的插件)。

video

在视频卡上设置各种powersave级别(目前仅支持Radeon卡)。可以使用radeon_powersave参数指定powersave级别。支持的值是:defaultautolowmidhigh,和dynpm

bootloader

将参数添加到内核引导命令行。此插件支持旧版GRUB 1,GRUB 2以及带可扩展固件接口(EFI)的GRUB。可以通过grub2_cfg_file选项指定grub2配置文件的自定义非标准位置。参数将添加到当前grub配置及其模板中。需要重新启动计算机才能使内核参数生效。

可以通过以下语法指定参数:

1
cmdline= arg 1 arg 2 ... arg n。

安装及其使用

要安装tuned, 运行:

1
yum install tuned

tuned包还预设了最合适系统的配置文件。目前根据以下可自定义规则选择默认配置文件:

throughput-performance

​ 这是在充当计算节点操作系统上预先选择的。此类型目标是最佳吞吐量性能。

virtual-guest

​ 这是在虚拟机上预先选择的。目标是最佳表现。如果对性能不感兴趣,可以希望将其修改为balancedpowersave配置文件。

balanced

​ 这是在所有其他情况下预先选择的。目标是平衡性能和功耗。

要启动tuned运行:

1
systemctl start tuned

开机启动:

1
systemctl enable tuned

tuned控制。例如选择配置文件和其他:

1
tuned-adm

此命令要求tuned服务在运行。

要查看可用的已安装配置文件,运行:

1
tuned-adm list

要查看当前激活的配置文件,运行:

1
tuned-adm active

要选择或激活配置文件,运行:

1
tuned-adm profile profile

可以一次选择多个配置文件。应用程序将尝试在装载过程中合并他们,如果存在冲突,则最后指定的配置文件中的设置优先。这是自动完成的,下面示例优化系统以便在虚拟机中获得最佳性能,并同事针对低功耗进行调整,低功耗作为优先级:

1
tuned-adm prfile virtual-guest powersave

要让tuned建议您为系统选择最合适的配置文件,而不更改任何现有配置文件并使用安装期间使用的相同逻辑,运行:

1
tuned-adm recommend

自定义配置文件

特定于分发的配置文件存储在/usr/lib/tuned/目录中。每个配置文件都有自己的目录。该配置文件由调用的主配置文件tuned.conf和可选的其他文件组成,例如帮助程序脚本。

如果需要自定义配置文件,请将配置文件目录复制到/etc/tuned/用于自定义配置文件的目录中。如果有两个相同名称的配置文件,则使用包含在/etc/tuned/其中的配置文件。

还可以在/etc/tuned/目录中创建的配置文件,已使用/usr/lib/tuned/中包含的配置文件,仅调整或覆盖某些参数。

tuned.conf文件包含几个部分。有一个[mian]部分。其他部分是插件实例的配置。所有部分都是可选的,包括[mian]部分。以#开头是行的注释。

[main]部分 有以下选项:

include-profile

​ 将包括指定的配置文件,例如include=powersave将包括powersave配置文件。

藐视插件实例的部分按以下方法格式化:

1
2
3
[NAME]
type=TYPE
decices=DEVICES

NAME是日志中使用的插件实例名称。它可以是任意字符串。TYPE是插件类型。DEVICES是此插件实例将处理的设备列表。devices行可以包含列表,通配符和否定。您还可以组织规则。如果没有decices行,则系统中存在或稍后附加的所有设备TYPE将由插件实例处理。如果未配置插件的实例,则不会启用插件,如果插件支持更多选项,可以在插件部分指定它们。如果未指定该选项,则将使用默认值。

描述实例

以下示例将匹配sd开头的内容,例如sdasdb,并且不会禁它们的障碍:

1
2
3
4
[data_disk]
type=disk
devices=sd*
disable_barriers=false

以下示例将匹配除sda1sda2之外的所有内容:

1
2
3
4
[data_disk]
type=disk
devices=!sda1. !sda2
disable_barriers=false

如果不需要插件实例的自定义命名,并且配置文件中只有一个实例定义,Tuned支持以下简短语法:

1
2
[TYPE]
devices=DEVICES

在这种情况下,可以省略TYPE行,然后将使用与类型相同的名称引用该实例。之前的示例可以重写为:

1
2
3
[disk]
devices=sdb*
disable_barriers=false

如果使用include选项多次指定相同的部分,则合并设置。如果由于冲突中的先前设置。有时,不知道之前定义的是什么,在这种情况下,可以设置replacetrue.这将导致所有以前具有相同名称的定义被覆盖,而且不会发生合并。

您还可以通过指定enabled=false选项来禁用插件。这与从未定义实例的效果相同。如果要从include选项重新定义先前的定义并且不希望插件在自定义配置文件中处于活动状态,则禁用该插件会很有用。

以下是基于balance配置文件的自定义配置文件示例,并将其拓展为将所有设备的ALPM设置为最大省电方式。

1
2
3
4
5
[main]
include=balanced

[disk]
alpm=min_power

以下是将isolcpus=2添加到内核引导命令行的自定义配置文件的示例:

1
2
[bootloader]
cmdline=isolcpus=2

应用配置文件后,需要重新启动计算机才能使更改生效。

Tuned-adm

对系统的详细分析可能非常耗时,默认包含许多典型用例的预定义的配置文件,可以使用tuned-adm程序轻松激活这些配置文件,还可以创建,修改和删除配置文件。

要列出所有可用的配置文件并标识当前活动配置文件,运行:

1
tuned-adm list

要仅显示当前活动的配置文件,运行:

1
tuned-adm active

要切换到其中一个可用的配置文件,运行:

1
tuned-adm profile PROFILE_NAME

例如:

1
tuned-adm profile latency-performance

要禁用所有:

1
tuned-adm off

以下是默认的预置的配置文件列表:

配置文件 描述
balanced 默认节能配置文件。旨在成为性能和功耗之间的折衷。尽可能尝试使用自动缩放和自动调整。对大多数负载都有很好的效果。唯一的缺点是延迟增加。
powersave 最佳节能配置文件。可以牺牲性能以最小化实际功耗。在当前的tuned版本中,它可以在SATA主机适配实现USB自动挂起等省电方式。
throughput-performance 针对高吞吐量优化的服务器配置文件它禁用节能机制并启用sysctl设置,提高磁盘,网络I/O的吞吐量性能并切换到deadline调度程序。CPU调控器为performance
latency-performance 针对低延迟优化服务器配置文件。它禁用省电机制并启用sysctl设置以改善延迟。CPU调控器设置为performance并且CPU锁定到低C状态。
network-latency 用于低延迟网络的配置文件。基于latency-performance设置,禁用透明大页面,NUMA平衡和调整其他几个网络相关的sysctl参数。
network-throughput 吞吐量网络的配置文件,基于throughput-performance,增加了内核网络缓冲区。
virtual-guest 基于enterprise-storage配置文件,除其他任务外,还可减少虚拟内存并增加磁盘预读值。不会禁用磁盘障碍。
virtual-host 基于enterprise-storage配置文件,减少虚拟内存吞吐量,增加磁盘预读值并启用更强大的脏页值。
oracle 基于throughput-performance配置文件,针对oracle数据库优化,禁用透明的大页面并修改其他一些与性能相关的内核参数。
desktop 基于balanced配置文件。还支持调度程序自动组,以便更高的相应交互式程序。
default 只启动CPU和磁盘插件。
desktop-powesave 针对桌面系统的节能配置文件。
lapto-ac-powersave 针对运行AC的笔记本电脑节能配置文件。
lapto-battery-powersave 针对笔记本节能配置文件。
spindown-disk 经典HDD的机器的节能配置文件,最大限度地延长spindown时间。禁用省电机制,禁用USB自动挂起,禁用蓝牙,启用WiFi省电,禁用日志同步,增加磁盘回写时间,降低磁盘刷新,使用noatime选项重新挂载所有分区。
enterprise-storage 针对企业级存储的服务器配置文件,最大化I/O吞吐量,禁用非root和非引导分区上的障碍。

powertop2tuned

powertop2tuned是一个实用程序,允许从PowerTOP建议创建自定义tuned配置文件。

要安装请运行:

1
yum install tuned-utils

创建一个自定义配置文件,运行:

1
powertop2tuned NEW_PROFILE_NAME

默认情况下,它会在/etc/tuned目录中创建配置文件,并将其基于当前选定的配置文件。出于安全原因,最初在新配置文件中禁用所有PowerTOP调整,要使他们能够在/etc/tuned/profile/tuned.conf中取消对您感兴趣的调整。可以使用--enable 或者-e选项生成新的配置文件,其中包含启用PowerTOP建议的大多数调整。一些危险和调整,如USB自动暂停仍将被禁用。如果确实需要它们,必须手动取消注释。默认情况下,不会激活新的配置文件,要激活请运行如下命令:

1
tuned-adm profile NEW_PROFILE_NAME