Довольно часто можно встретить примеры настройки (тюнинга) сетевого стека 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
Полезные ссылки
ссылка на оригинал статьи https://habr.com/ru/articles/747118/
Добавить комментарий