Skip to main content

2.Tuned系统调优

简介

Tuned是一个优化系统性能的工具,它可以根据系统的负载、硬件配置和用途自动调整系统的各种设置,以提高系统的性能和稳定性。Tuned可以根据不同的工作负载(如虚拟化、数据库、Web服务器等)自动调整系统的参数,以优化系统的性能。

安装

Tuned是一个单独的软件包,使用以下命令安装:

sudo dnf install tuned

启动

sudo systemctl start tuned
sudo systemctl enable tuned

配置文件简介

Tuned的配置文件:/etc/tuned/tuned.conf

可以编辑/etc/tuned/tuned.conf文件来配置Tuned的全局设置,或者创建自定义的配置文件来针对特定的工作负载进行优化。

软件目录其他配置文件:

ll /etc/tuned
total 16
-rw-r--r--. 1 root root 23 Feb 13 21:44 active_profile
-rw-r--r--. 1 root root 1111 Feb 17 2023 bootcmdline
-rw-r--r--. 1 root root 0 Feb 13 21:44 post_loaded_profile
-rw-r--r--. 1 root root 5 Feb 13 21:44 profile_mode
drwxr-xr-x. 2 root root 6 Feb 18 2023 recommend.d
-rw-r--r--. 1 root root 2547 Feb 18 2023 tuned-main.conf

使用预定义的配置文件

Tuned提供了许多预定义的配置文件,用于不同类型的工作负载和硬件环境。可以使用以下命令来查看已经配置好的配置文件列表:

ls /usr/lib/tuned/

启用指定的配置文件

sudo tuned-adm profile <profile_name>

<profile_name>:预配置文件名称

示例:

#查看预配置文件
ls /usr/lib/tuned/
#结果
accelerator-performance desktop intel-sst network-throughput recommend.d virtual-host
aws functions latency-performance optimize-serial-console throughput-performance
balanced hpc-compute network-latency powersave virtual-guest

#启用数据库服务器的优化配置
sudo tuned-adm profile database-server

#检查当前配置
tuned-adm active

常用预配置文件简介

以下是对常用的Tuned预配置文件的解释:

accelerator-performance

  • 目的 : 用于优化加速器设备(如 GPU、FPGA 等)的性能。
  • 优化 : 包括优化 CPU、内存、I/O 和网络等方面的参数,以提高加速器设备的性能。
  • 用途 : 适用于需要充分利用加速器设备性能的场景,如深度学习、科学计算等。

network-throughput

  • 目的 : 用于优化网络吞吐量和性能。
  • 优化 : 包括优化网络栈、TCP 参数、网络缓冲区大小等,以提高网络传输速度和吞吐量。
  • 用途 : 适用于需要高网络吞吐量的场景,如网络服务器、数据中心等。

virtual-host

  • 目的 : 用于优化虚拟化宿主机,提供更好的资源管理和性能。
  • 优化 : 包括优化 CPU 调度、内存管理、网络栈等,以提高虚拟化平台的性能和资源利用率。
  • 用途 : 适用于运行虚拟化平台的主机,如虚拟化服务器、云主机等。

aws

  • 目的 : 用于优化在 AWS 云平台上运行的实例。
  • 优化 : 包括调整网络参数、I/O 调度、电源管理等,以提高在 AWS 上的性能和稳定性。
  • 用途 : 适用于在 AWS 云平台上运行的实例,优化实例的性能和资源利用率。

functions

  • 目的 : 用于优化特定功能的性能,如调整内存、I/O 或网络方面的参数。
  • 优化 : 根据功能需求进行优化,可能会调整各种系统参数。
  • 用途 : 适用于特定功能场景的性能优化,如数据库服务器、Web 服务器等。

latency-performance

  • 目的 : 用于优化系统的响应时间和低延迟性能。
  • 优化 : 包括调整 CPU、内存、I/O 和网络等方面的参数,以降低系统响应时间和延迟。
  • 用途 : 适用于需要低延迟性能的场景,如实时数据处理、金融交易等。

optimize-serial-console

  • 目的 : 用于优化串行控制台的性能和稳定性。
  • 优化 : 包括调整串行控制台参数、日志记录和错误处理等。
  • 用途 : 适用于使用串行控制台进行系统管理的场景,如嵌入式设备、服务器远程管理等。

throughput-performance

  • 目的 : 用于优化系统的吞吐量和数据处理性能。
  • 优化 : 包括调整 CPU、内存、I/O 和网络等方面的参数,以提高系统的数据吞吐量和处理性能。
  • 用途 : 适用于需要高吞吐量和数据处理性能的场景,如数据中心、大规模数据处理等。

hpc-compute

  • 目的 : 用于优化高性能计算(HPC)场景下的系统性能。
  • 优化 : 包括调整 CPU、内存、I/O 和网络等方面的参数,以提高系统的计算性能和并行处理能力。
  • 用途 : 适用于需要进行科学计算、数值模拟等大规模计算任务的场景。

network-latency

  • 目的 : 用于优化网络延迟和响应时间。
  • 优化 : 包括调整网络栈参数、TCP 参数和网络优化设置,以降低网络延迟和提高响应速度。
  • 用途 : 适用于需要低网络延迟和快速响应的网络应用场景,如实时通信、在线游戏等。

virtual-guest

  • 目的 : 用于优化虚拟化客户机(虚拟机)的性能和稳定性。
  • 优化 : 包括优化虚拟化参数、调整内存管理、I/O 调度等,以提高虚拟机的性能和稳定性。
  • 用途 : 适用于在虚拟化环境中运行的客户机,提高性能并减少与宿主机之间的资源竞争。

原理

throughput-performance 配置文件为例,看一下具体更改了哪些配置。

查看文件

cat /etc/tuned/throughput-performance/tuned.conf
#示例只列出部分重要内容
[main]
include=throughput-performance

[cpu]
governor=performance
energy_perf_bias=performance

[vm]
transparent_hugepages=always

[devices]
# Set vm.dirty_background_ratio to 3%
# The default is 10%
writeback=1

[sysctl]
# Set vm.dirty_ratio to 80%
# The default is 20%
vm.dirty_ratio = 80
  • governor=performance:将 CPU 调度策略设置为性能模式,以提高系统的响应速度和处理能力。
  • transparent_hugepages=always:启用透明大页,以提高内存管理的效率。
  • 调整了磁盘写入策略和内核参数等,以提高磁盘 I/O 性能和网络传输的吞吐量。

通过这些具体的配置项,throughput-performance 配置文件对系统的各个方面进行了优化,以提高系统的整体性能和吞吐量。

注意:

以上只是示例,并未列出所有选项。

Tuned总体优化思路总结

  1. CPU 调度策略
  • 优化 : 将 CPU 调度策略设置为性能模式,以确保系统优先处理高优先级的任务,从而提高系统的响应速度和处理能力。
  1. 内存管理参数
  • 优化 : 调整内存管理参数,以提高内存的使用效率和系统的性能。可能会调整页面分配策略、内存回收机制等。
  1. 磁盘 I/O 调度
  • 优化 : 调整磁盘 I/O 调度策略,以提高磁盘读写性能和吞吐量。可能会使用更为积极的调度策略,如 deadline 或者 noop。
  1. 网络参数调整
  • 优化 : 调整网络参数,以提高网络传输的吞吐量和性能。可能会调整 TCP 参数、网络缓冲区大小等。
  1. 文件系统参数
  • 优化 : 调整文件系统参数,以提高文件系统的性能和数据处理能力。可能会调整文件系统缓存策略、日志写入策略等。
  1. 其他系统参数
  • 优化 : 对其他系统参数进行调整,以提高系统的整体性能和稳定性。可能会调整内核参数、系统服务参数等。

Tuned常用命令

列出所有可用的 Tuned 配置文件

tuned-adm list

列出系统中所有已经安装的 Tuned 配置文件,包括预配置文件和自定义配置文件。

显示当前系统正在使用的 Tuned 配置文件

sudo tuned-adm active

将指定的 Tuned 配置文件应用到系统

tuned-adm profile <profile_name>

提供一个推荐的 Tuned 配置文件

tuned-adm recommend

根据当前系统的硬件和负载情况,推荐一个适合的 Tuned 配置文件,以帮助优化系统性能。

关闭当前应用的 Tuned 配置文件

tuned-adm off

显示指定 Tuned 配置文件的详细信息

tuned-adm active <profile_name>

配置文件详解

以下是一个全局配置文件示例:

# Global tuned configuration file.

# Whether to use daemon. Without daemon it just applies tuning. It is
# not recommended, because many functions don't work without daemon,
# e.g. there will be no D-Bus, no rollback of settings, no hotplug,
# no dynamic tuning, ...
daemon = 1

# Dynamicaly tune devices, if disabled only static tuning will be used.
dynamic_tuning = 0

# How long to sleep before checking for events (in seconds)
# higher number means lower overhead but longer response time.
sleep_interval = 1

# Update interval for dynamic tunings (in seconds).
# It must be multiply of the sleep_interval.
update_interval = 10

# Recommend functionality, if disabled "recommend" command will be not
# available in CLI, daemon will not parse recommend.conf but will return
# one hardcoded profile (by default "balanced").
recommend_command = 1

# Whether to reapply sysctl from /run/sysctl.d/, /etc/sysctl.d/ and
# /etc/sysctl.conf. If enabled, these sysctls will be re-appliead
# after TuneD sysctls are applied, i.e. TuneD sysctls will not
# override user-provided system sysctls.
reapply_sysctl = 1

# Default priority assigned to instances
default_instance_priority = 0

# Udev buffer size
udev_buffer_size = 1MB

# Log file count
log_file_count = 2

# Log file max size
log_file_max_size = 1MB

# Preset system uname string for architecture specific tuning.
# It can be used to force tuning for specific architecture.
# If commented, "uname" will be called to fill its content.
# uname_string = x86_64

# Preset system cpuinfo string for architecture specific tuning.
# It can be used to force tuning for specific architecture.
# If commented, "/proc/cpuinfo" will be read to fill its content.
# cpuinfo_string = Intel

# Enable TuneD listening on dbus
# enable_dbus = 1

# Enable TuneD listening on unix domain socket
# As this functionality is not used commonly, we disable it by default
# and it is needed to allow it manually
# enable_unix_socket = 0

# Path to socket for TuneD to listen
# Existing files on given path will be removed
# unix_socket_path = /run/tuned/tuned.sock

# Paths to sockets for TuneD to send signals to separated by , or ;
# unix_socket_signal_paths =

# Default unix socket ownership
# Can be set as id or name, -1 or non-existing name leaves unchanged
# unix_socket_ownership = -1 -1

# Permissions for listening sockets
# unix_socket_permissions = 0o600

# Size of connections backlog for listen function on socket
# Higher value allows to process requests from more clients
# connections_backlog = 1024

daemon :

  • 作用:指定是否启用 Tuned 守护进程。
  • 默认值:1(启用)
  • 解释:当设置为 1 时,表示启用 Tuned 守护进程,该进程将作为后台服务运行,并提供更多功能,如 D-Bus 通信、动态调整、配置回滚等。建议保持默认值,因为许多功能在没有守护进程的情况下将无法正常工作。

dynamic_tuning :

  • 作用:指定是否启用动态调整。
  • 默认值:0(禁用)
  • 解释:当设置为 1 时,表示启用动态调整,Tuned 可以根据系统负载和其他条件动态调整系统参数。禁用时,只会使用静态调整。建议根据需要启用或禁用。

sleep_interval :

  • 作用:指定 Tuned 守护进程检查事件的间隔时间(以秒为单位)。
  • 默认值:1
  • 解释:该值决定了 Tuned 守护进程检查系统事件的频率。较高的数值会降低检查的频率,减少系统开销,但可能导致响应时间延迟。

update_interval :

  • 作用:指定动态调整的更新间隔(以秒为单位)。
  • 默认值:10
  • 解释:该值决定了动态调整的更新频率,即多久重新检查一次系统状态并应用调整。

recommend_command :

  • 作用:指定是否启用 recommend 命令。
  • 默认值:1(启用)
  • 解释:当设置为 1 时,表示启用 recommend 命令,用户可以使用该命令查看 Tuned 推荐的优化配置文件。

reapply_sysctl :

  • 作用:指定是否重新应用系统的 sysctl 设置。
  • 默认值:1(启用)
  • 解释:当设置为 1 时,Tuned 在应用调整后会重新应用系统的 sysctl 设置。禁用时,Tuned 的 sysctl 设置将覆盖用户提供的系统 sysctl 设置。

default_instance_priority :

  • 作用:指定默认实例的优先级。
  • 默认值:0
  • 解释:Tuned 实例的优先级用于确定哪个配置文件将被应用。默认情况下,优先级为 0,表示使用默认配置。

udev_buffer_size :

  • 作用:指定 udev 缓冲区的大小。
  • 默认值:1MB
  • 解释:用于设备管理的 udev 缓冲区的大小。

log_file_countlog_file_max_size :

  • 作用:指定日志文件的数量和大小限制。
  • 默认值:2 个文件,每个文件最大 1MB。
  • 解释:用于限制日志文件的数量和大小,以避免日志文件过大或过多。

被注释的选项:

uname_string :

  • 作用:用于指定系统的 uname 字符串,以便为特定架构进行调优。
  • 默认值:被注释掉,即不指定。
  • 解释:如果需要强制指定特定架构的调优,可以取消注释并设置为对应的架构字符串,如 x86_64。如果未指定,则会使用 uname 命令来获取系统的架构信息。

cpuinfo_string :

  • 作用:用于指定系统的 CPU 信息字符串,以便为特定的 CPU 进行调优。
  • 默认值:被注释掉,即不指定。
  • 解释:如果需要强制指定特定 CPU 的调优,可以取消注释并设置为对应的 CPU 信息字符串,如 Intel。如果未指定,则会从 /proc/cpuinfo 文件中读取系统的 CPU 信息。

enable_dbus :

  • 作用:指定是否启用 D-Bus 监听。
  • 默认值:被注释掉,即不启用。
  • 解释:如果需要通过 D-Bus 与 Tuned 进行通信,则取消注释并设置为 1。启用 D-Bus 可以使得其他程序通过 D-Bus 接口调用 Tuned 的功能。

enable_unix_socket :

  • 作用:指定是否启用 Unix 域套接字监听。
  • 默认值:被注释掉,即不启用。
  • 解释:如果需要通过 Unix 域套接字与 Tuned 进行通信,则取消注释并设置为 1。但通常情况下,这个功能不常用,所以默认被禁用。

unix_socket_path :

  • 作用:指定 Unix 域套接字的路径。
  • 默认值:被注释掉,即不指定。
  • 解释:如果启用了 Unix 域套接字监听,可以通过该配置项指定套接字的路径。当启用该功能时,存在给定路径的文件会被删除并用作套接字文件。
  1. unix_socket_signal_paths :
  • 作用:指定用于发送信号的 Unix 域套接字的路径。
  • 默认值:空,即未指定。
  • 解释:该配置项允许你指定用于发送信号的 Unix 域套接字的路径。多个路径之间使用逗号或分号分隔。
  1. unix_socket_ownership :
  • 作用:指定 Unix 域套接字的默认所有者。
  • 默认值:-1 -1,即不更改默认所有者。
  • 解释:可以通过该配置项指定 Unix 域套接字的默认所有者,可以设置为用户 ID 或用户名。设置为 -1 -1 表示不更改默认所有者。
  1. unix_socket_permissions :
  • 作用:指定 Unix 域套接字的权限。
  • 默认值:0o600,即设置为 600(读写权限)。
  • 解释:该配置项指定了 Unix 域套接字的权限。可以通过八进制数值或者符号表示法设置权限。

#红帽官网Tuned参考文档

https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/performance_tuning_guide/chap-red_hat_enterprise_linux-performance_tuning_guide-tuned#ch-Tuned-overview

#Linux低延迟服务器系统调优

https://zhuanlan.zhihu.com/p/58669088