Довольно часто можно встретить примеры настройки (тюнинга) сетевого стека Linux для высоконагруженных систем, однако некоторые из этих гайдов сильно устарели и не используют рекомендованные подходы к конфигурированию системы. В этом обзоре мы рассмотрим подготовку Linux, для использования в качестве узла плоскости управления Кубернетес.

Tuned

Tuned – это демон, который использует udev для отслеживания подключенных устройств
и статически или динамически настраивает системные настройки используя выбранный профиль.

Tuned устанавливается вместе с коллекцией профилей под определенные типы нагрузки: network-latency, powersave, desktop и другие.

Для установки tuned на дистрибутивах использующих yum/dnf:

yum install -y tuned
systemctl enable --now tuned
systemctl status tuned

Для того, чтобы вывести активный профиль:

tuned-adm active

Current active profile: virtual-host

Для того, чтобы вывести список со всеми доступными профилями tuned:

tuned-adm list
Available profiles:
- accelerator-performance     - Throughput performance based tuning with disabled higher latency STOP states
- aws                         - Optimize for aws ec2 instances
- balanced                    - General non-specialized tuned profile
- desktop                     - Optimize for the desktop use-case
- hpc-compute                 - Optimize for HPC compute workloads
- intel-sst                   - Configure for Intel Speed Select Base Frequency
- latency-performance         - Optimize for deterministic performance at the cost of increased power consumption
- network-latency             - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance
- network-throughput          - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks
- optimize-serial-console     - Optimize for serial console use.
- powersave                   - Optimize for low power consumption
- throughput-performance      - Broadly applicable tuning that provides excellent performance across a variety of common server workloads
- virtual-guest               - Optimize for running inside a virtual guest
- virtual-host                - Optimize for running KVM guests
Current active profile: network-latency

Для того, чтобы активировать профиль «network-latency»:

tuned-adm profile network-latency
tuned-adm active
Current active profile: network-latency

Настройки для профиля «network-latency»:

cat /usr/lib/tuned/network-latency/tuned.conf
#
# tuned configuration
#

[main]
summary=Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance
include=latency-performance

[vm]
transparent_hugepages=never

[sysctl]
net.core.busy_read=50
net.core.busy_poll=50
net.ipv4.tcp_fastopen=3
kernel.numa_balancing=0

[bootloader]
cmdline_network_latency=skew_tick=1

С помощью директивы «include» в этом профиле включены настройки из «latency-performance».

Существуют профили tuned с настройками для высоконагруженных баз данных:

yum search tuned-profiles
yum install -y tuned-profiles-mssql tuned-profiles-oracle

По-умолчанию tuned работает в режиме демона Linux, но это можно поменять добавив daemon = 0 в /etc/tuned/tuned-main.conf.

Создаем кастомный профиль tuned

Профили tuned по-умолчанию находятся в каталоге /etc/tuned/<profile_name>/tuned.conf или в /usr/lib/tuned/<profile_name>/tuned.conf.

Создайте директорию для вашего профиля:

mkdir /usr/lib/tuned/custom

Создайте новый конфиг в директории профиля:

touch /usr/lib/tuned/custom/tuned.conf

Сделайте файл исполняемым:

chmod +x /usr/lib/tuned/custom/tuned.conf

Откройте для редактирования (vim /usr/lib/tuned/custom/tuned.conf) созданный профиль и добавьте следующие строчки:

[main]
summary=Кастомизированный профиль tuned

В списке с доступными профилями должен появится новый пресет:

tuned-adm list | grep custom
- custom                      - Кастомизированный профиль tuned

Скопируйте пример профиля «железного» хоста или виртуальной машины предназначенной для установки узлов плоскости Кубернетес:

[main]
summary=Кастомизированный профиль tuned

[cpu]
governor=performance
energy_perf_bias=performance
min_perf_pct=100

[vm]
transparent_hugepages=never

[net]
nf_conntrack_hashsize=131072

[sysctl]
net.ipv4.ip_forward=1
net.core.busy_read=50
net.core.busy_poll=50

# Увеличиваем значения параметров net.nf_conntrack_max и net.netfilter.nf_conntrack_max,
# отвечающих за максимальное количество сетевых соединений.
net.netfilter.nf_conntrack_max=1048576
net.nf_conntrack_max=1048576

# https://datatracker.ietf.org/doc/html/rfc7413
# https://repository.ihu.edu.gr/xmlui/bitstream/handle/11544/29857/Grendas_Dimitrios_Dissertation_IHU_Cybersecurity_2021.pdf?sequence=1
# Для сборки nginx с поддержкой TCP Fast Open нужно использовать флаг `-DTCP_FASTOPEN=23`
# https://github.com/VKCOM/nginx-quic/issues/1
net.ipv4.tcp_fastopen=3

# https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_for_real_time/7/html/tuning_guide/reduce_tcp_performance_spikes
net.ipv4.tcp_timestamps=0

kernel.sched_autogroup_enabled=0
kernel.sched_migration_cost_ns=5000000
kernel.sched_min_granularity_ns=10000000

# https://github.com/kubernetes-sigs/kubespray/issues/8825
net.ipv4.conf.all.arp_announce=2
net.ipv4.neigh.default.gc_thresh1=8192
net.ipv4.neigh.default.gc_thresh2=32768
net.ipv4.neigh.default.gc_thresh3=65536
net.ipv6.neigh.default.gc_thresh1=8192
net.ipv6.neigh.default.gc_thresh2=32768
net.ipv6.neigh.default.gc_thresh3=65536

fs.inotify.max_user_watches=65536
fs.inotify.max_user_instances=8192

# Разрешаем больше SYN соединений
net.ipv4.tcp_max_syn_backlog=100000
# И больше запросов на сокет
net.core.somaxconn=100000

# Увеличиваем значения по-умолчанию для сокетов TCP. Три значения: minimum, default, maximum.
net.ipv4.tcp_wmem='4096 12582912 16777216'
net.ipv4.tcp_rmem='4096 12582912 16777216'

# Расширяем диапазон динамических портов
net.ipv4.ip_local_port_range='10240 65535'

vm.max_map_count=262144

[sysfs]
/sys/module/nvme_core/parameters/io_timeout=4294967295
/sys/module/nvme_core/parameters/max_retries=10

Примените данный профиль в системе:

tuned-adm profile custom

Для того, чтобы проверить работу tuned выполните следующую команду:

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
performance

Благодаря scaling_governor, можно выбрать оптимальную схему управления частотой процессора, что влияет на потребление электроэнергии и производительность:

cpupower -c all frequency-info

Теперь если вы поменяете значение scaling_governor на powersave (режим энергосбережения) и снова выполните команду:

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
powersave

Полезные ссылки


Записывайтесь на курс «Основый Кубернетес».

Комментарии (1)


  1. Numen_Divinum
    11.07.2023 11:46
    +2

    Где можно увидеть конкретные цифры, как изменился перформанс системы после тюнинга?