A-Tune: тонкая настройка системы с использованием машинного обучения

от автора

Привет, Хабр!

Меня зовут Артём, я инженер-программист в департаменте серверных решений. В статье расскажу про новый инструмент для повышения производительности, который получилось портировать и доработать для ОС Astra Linux Special Edition.

Итак, один из ключевых аспектов работы серверов — производительность серверного ПО. Повысить ее можно разными способами. Например, можно рефакторить код и оптимизировать алгоритмы, если есть доступ к исходному коду. Или производить горизонтальное или вертикальное масштабирование.

А что если я скажу, что работу серверных приложений можно оптимизировать без изменений в исходном коде и без дополнительных мощностей, необходимых для масштабирования систем?

Существует специальный класс приложений для тонкой настройки операционной системы. Они помогают выжимать максимум из имеющихся ресурсов и при правильной настройке в некоторых случаях позволяют получить прирост до 30%. Причем это очень дешевый способ повышения производительности, так как нужно просто установить соответствующую утилиту и настроить ее под сценарий использования соответствующего серверного ПО.

Одним из ярких представителей таких утилит является A-Tune. Она включена в состав дистрибутива openEuler, который на текущий момент поддерживается и развивается независимым открытым сообществом разработчиков.

Я решил проанализировать существующие на рынке решения, поскольку мы столкнулись с тем, что пользователям Astra Linux нужно было повысить производительность на серверных сценариях. Проведенный анализ программ для тюнинга выявил большой потенциал у A-Tune в сфере оптимизации производительности операционной системы Astra Linux Special Edition в варианте лицензирования «Сервер» (ОС СН ALSE Сервер).

Перечисленные особенности приложения говорят о наиболее современном подходе к тюнингу:

  • A-Tune определяет оптимальные параметры за счет применения алгоритмов оптимизации. Другие приложения подобного класса используют заранее подготовленную информацию о влиянии параметров на производительность ОС.

  • A-Tune использует машинное обучение для определения текущей нагрузки. Подобный подход интересен для серверов с динамической и скачкообразной нагрузкой.

  • A-Tune может распределенно управлять оптимизацией настроек сервера.

Утилита умеет работать в трех режимах:

  • Статический режим. Автоматизирует установку заданных параметров в системе.

  • Динамический режим. Автоматизирует поиск оптимальных параметров.

  • Распределенный режим. Позволяет конфигурировать первые два режима для большого количества машин с одной клиентской машины.

Подробнее об этих режимах расскажу ниже.

Статический режим работы A-Tune

В терминах A-Tuneпрофиль — это набор секций с настройками для компонента системы, где каждая секция, в свою очередь, называется плагином. Утилита в своем составе имеет уже набор готовых профилей и функционал для их применения в операционной системе, который называется статическим режимом работы.

В статическом режиме работы A-Tune применяет параметры, заданные в профиле. Зачастую параметры для тюнинга ОС применяются в разных каталогах системы и разных конфигурационных файлах, поэтому вручную конфигурировать систему под определенный сценарий нагрузки может быть весьма трудоёмко. Статический режим работы позволяет упростить применение параметров и откат измененных файлов в первоначальное состояние.

Команды для работы с профилями

# включить A-Tune systemctl start atuned  # посмотреть список доступных профилей atune-adm list  вывод: Support profiles: +---------------------------------------------+-----------+ | ProfileName                                 | Active    | +=============================================+===========+ | arm-native-android-container-robox          | false     | +---------------------------------------------+-----------+ | basic-test-suite-baseline-fio               | false     | +---------------------------------------------+-----------+ | basic-test-suite-baseline-lmbench           | false     | +---------------------------------------------+-----------+ | basic-test-suite-baseline-netperf           | false     | +---------------------------------------------+-----------+ | default-default                             | false     | +---------------------------------------------+-----------+  # применить профиль из списка atune-adm profile [профиль]  # пример применения профиля  atune-adm profile default-default    вывод:  [ SUGGEST] Bios                                     please change the BIOS configuration NUMA to Enable   [ SUGGEST] Bootloader                               Need reboot to make the config change of grub effect.   [ SUCCESS] memory                                   memory num is 0, memory interpolation is correct     [ SUGGEST] Kernel                                   please change the kernel configuration CONFIG_NUMA_AWARE_SPINLOCKS to y   # посмотреть информацию о профиле  atune-adm info [профиль]  # задать пользовательский профиль  atune-adm define [тип сервиса] [название приложения] [название пользовательского сценария] [путь к файлу с профилем]  # удалить профиль (только для профилей, заданных пользователем) atune-adm undefine [профиль]
Рисунок 1. Статический режим работы утилиты A-Tune. Определение профиля

Рисунок 1. Статический режим работы утилиты A-Tune. Определение профиля

Чтобы применить оптимальный профиль, нужно знать, какой из них лучше всего подходит под желаемый сценарий использования системы. Решить данную задачу призвана одна из главных особенностей утилиты — определение оптимального профиля с помощью классификаторов из sklearn и xgboost. Для определения профиля A-Tune запускает анализ рабочей нагрузки, в ходе которого собираются данные о состоянии системы через A-Tune-Collector. Данный модуль вызывает консольные команды мониторинга:

  • sar — выводит статистику скорости ввода/вывода, активности подкачки, активности процессов, прерываний, сетевой активности, использования оперативной памяти и подкачки, использования ЦП, активности ядра и TTY, а также многое другое.

  • mpstat — возвращает статистику использования процессоров в системе. Команда показывает развёрнутую статистику или всех процессов системы (mpstat -P ALL), или каждого по отдельности (mpstat -P 0), где 0 (ноль) отмечается как первый процессор.

  • iostat — отображает основные параметры ввода/вывода данных на диск, скорость записи и чтения данных, а также объем записанных или прочитанных данных, выводит параметры загруженности процессора.

  • lshw — Linux Hardware Lister, показывает детальную информацию о компонентах компьютера: процессоре, конфигурации оперативной памяти, материнской плате, BIOS информацию, конфигурацию кэша, шины и т. д. (в комплекте с утилитой также имеется база данных оборудования с USB- и PCI-интерфейсами).

  • perf stat — cобирает статистику производительности различных операций в ядре и пользовательском пространстве.

После вызова команд модуль парсит результаты и компонует их в вектор данных, который отправляется на вход классификатора. По результатам сопоставления входных данных с имеющимися определяется типовая нагрузка и ее название, после чего уже происходит сопоставление с наиболее подходящим профилем. В A-Tune используются классификаторы: Random Forest ClassifierSupport Vector Machine Classifier и XGBoost classifier. Последний основан на градиентном бустинге деревьев.

Определение профиля с помощью классификатора осуществляется командой atune-adm analysis, использующей подготовленные математические модели.

Определение рабочей нагрузки

# запустить определение профиля с параметрами по умолчанию (20 интервалов измерения состояния системы без применения профиля) atune-adm analysis  # запустить определение профиля и задать число интервалов измерения atune-adm analysis -t 5  # запустить определение профиля, используя заранее сгенерированную модель (например, с именем self_trained.m в текущей директории) atune-adm analysis --model ./self_trained.m  # запустить определение профиля и применить оптимальный профиль atune-adm analysis --apply

Чтобы распознать уникальные типы нагрузки, существует возможность обучения A-Tune средствами утилиты для генерации отдельной математической модели.

Шаги для генерации математической модели:

  1. Создание профиля для нагрузки, которую A-Tune будет учиться распознавать. Для этого необходимо воспользоваться командой atune-adm define, которой на вход подается файл с пустым профилем.Общий вид команды создания профиля

    atune-adm define [тип сервиса] [название приложения] [название пользовательского сценария] [путь к файлу с пустым профилем]

    Пример:

    Создать профиль для нагрузки

    # пакет atune устанавливает пустой профиль, который мы можем использовать - generic_profile.conf atune-adm define bench sysbench cpu /usr/lib/atuned/profiles/generic/generic_profile.conf

    Проверить результат работы команды можно выводом списка доступных профилей в утилите A-Tune:

    Новый профиль

    atune-adm list | grep bench-sysbench-cpu  вывод: | bench-sysbench-cpu                          | false     |
  2. Подача нагрузки на систему и сбор данных через команду atune-adm collection. Для ее реализации необходимо собрать данные для двух и более классов нагрузки, чтобы обучить классификаторы (при одном классе нагрузки A-Tune сообщит об ошибке работы). Так формируется датасет с лейблом профиля, который подходит под этот тип нагрузки.

    Общий вид команды сбора данных

    atune-adm collection -f [имя файла] -o [путь для сохранения датасета]   -b [диск, на котором находится файловая система, используемая приложением]   -n [имя сетевого адаптера]   -i [количество интервалов сбора данных (по умолчанию 5)]   -d [длительность (в секундах) сбора данных (по умолчанию 1200)]   -t [имя профиля, который мы создали ранее, или тип сервиса для существующего профиля] 

    Следовательно, нам нужно собрать данные с нагрузкой и без нее. Пример команд для сбора данных:

    Сбор данных

    # запустим нагрузку, например sysbench sysbench cpu --threads=16 --time=120 --cpu-max-prime=10000 run  # соберем данные под нагрузкой atune-adm collection -f testcpu -o /home/astra/atune/test/ -b sda -n enp0s3 -d 120 -t bench-sysbench-cpu  # соберем данные без нагрузки, т. е. без запуска sysbench atune-adm collection -f testcpu -o /home/astra/atune/test/ -b sda -n enp0s3 -d 120 -t default

    Когда работа команды завершится, в каталоге /home/astra/atune/test будут находиться CSV-файлы с собранной статистикой.

  3. Обучение математической модели на полученном датасете. Осуществляется командой atune-adm train.

    Обучение математической модели

    atune-adm train --data_path=/home/astra/atune/test/ --output_file=/home/astra/atune/test/testcpu.m
  4. Классификация профиля с использованием модели. Осуществляется с помощью команды: atune-adm analysis --model <путь к сгенерированной модели>.

    Использование модели для классификации профиля

    atune-adm analysis --model /home/astra/atune/test/testcpu.m

    Если мы с использованием созданной модели дадим команду определения профиля под работу нашего приложения, то увидим, что A-Tune автоматически применила созданный нами в самом начале профиль. Он работает согласно той модели, которую мы обучили на собранных данных.

Динамический режим работы A-Tune

Вторым режимом работы A-Tune является динамический режим. В нем утилита дает возможность автоматически искать оптимальную конфигурацию, минимизируя затраты на ручную настройку и оценку производительности. Такой подход существенно повышает эффективность тюнинга (около 10%) и применяется в случае, когда у продвинутых пользователей повышенные требования к производительности.

Также такой подход значительно упрощает подбор оптимальных параметров. Если раньше для подбора параметров нужно было проводить исследования и собирать базу знаний, то теперь подбор параметров выполняется в автоматическом режиме.
В данном режиме A-Tune устанавливает параметры для целевого устройства и получает показатели эффективности обратной связи. Эти шаги повторяются до тех пор, пока не будут получены оптимальные параметры.

Ключевые особенности этого режима работы:

  1. Автоматический выбор значимых параметров для уменьшения пространства поиска и повышения эффективности обучения.

  2. Пользовательский выбор оптимального алгоритма в зависимости от сценария применения приложения, типов параметров и требуемой производительности.

  3. Добавление характеристики текущей рабочей нагрузки и оптимальных параметров в базу знаний, чтобы улучшить эффективность последующего тюнинга.

Рисунок 2. Общие принципы функционирования динамического режима работы

Рисунок 2. Общие принципы функционирования динамического режима работы

Одно из условий запуска динамического режима работы — наличие конфигурационных yaml-файлов для сервера и клиента. Файл сервера содержит информацию о векторе управляемых параметров. Для каждого такого параметра задается его вид: дискретный или непрерывный, область допустимых значений и bash-команды для записи и чтения параметров.
Файл клиента содержит информацию о целевых функциях многокритериальной оптимизации: bash-команда для получения значения функции, вес функции, тип функции: positive — оптимум в минимуме, negative — оптимум в максимуме. Кроме того, в файле определяется алгоритм оптимизации, который будет использоваться в рамках тюнинга.

Описание файла конфигурации представлено в таблице 1.

Таблица 1 — Структура данных файла сервера

Имя

Описание

Тип

Диапазон значений

project

Название проекта.

Character string

startworkload

Скрипт для запуска оптимизируемого сервиса.

Character string

stopworkload

Скрипт для остановки службы, подлежащий оптимизации.

Character string

maxiterations

Максимальное количество итераций оптимизации, которое используется для ограничения количества итераций на клиенте. Как правило, чем больше итераций оптимизации, тем лучше эффект оптимизации, но тем больше требуется времени.

Integer

>10

object

Параметры, которые необходимо оптимизировать (вектор управляемых параметров), и связанная с ними информация.

Детальное описание вектора управляемых параметров представлено в таблице 2.

Таблица 2 — Информация о векторе управляемых параметров файла сервера

Имя

Описание

Тип

Диапазон значений

name

Параметр, требующий оптимизации.

Character string

desc

Описание оптимизируемого параметра.

Character string

get

Скрипт для запроса значений параметров.

set

Скрипт для настройки значений параметров.

needrestart

Флаг перезапуска службы для применения параметра.

Enumeration

true или false

type

Тип параметра. В настоящее время поддерживаются типы discrete и continuous.

Enumeration

дискретный или непрерывный

dtype

Этот параметр доступен только в том случае, если для параметра type установлено значение discrete. В настоящее время поддерживаются только intfloat и string.

Enumeration

int, float, string

scope

Диапазон настройки параметров.

Этот параметр действителен, только если для type установлено значение discrete, а для dtype — значение int или float, или для type установлено значение continuous.

Integer/Float

Значение определяется пользователем и должно находиться в допустимом диапазоне этого параметра.

step

Шаг значения параметра, который используется, когда для dtype установлено значение int или float.

Integer/Float

Это значение определяется пользователем.

items

Перечисляемое значение, значение параметра которого не входит в область видимости. Используется, когда для dtype установлено значение int или float.

Integer/Float

Значение определяется пользователем и должно находиться в допустимом диапазоне этого параметра.

options

Перечисляемый диапазон значений параметра value, который используется в случае, если для dtype установлено значение string.

Character string

Значение определяется пользователем и должно находиться в допустимом диапазоне этого параметра.

В файле клиента используются другие параметры, которые представлены в таблице 3.

Таблица 3 — Описание структуры файла клиента

Имя

Описание

Тип

Диапазон значений

project

Название проекта, которое должно совпадать с именем в файле конфигурации на сервере.

Character string

engine

Алгоритм оптимизации. Подробное описание доступных алгоритмов оптимизации приведено в таблице 5.

Character string

«random», «forest», «gbrt», «bayes», «extraTrees»

iterations

Количество итераций оптимизации.

Integer

≥ 10

random_starts

Количество случайных итераций.

Integer

< итерации

feature_filter_engine

Алгоритм поиска параметров, который используется для выбора важных параметров. Этот параметр необязателен.

Character string

«lhs»

feature_filter_cycle

Циклы поиска параметров, которые используются для выбора важных параметров. Этот параметр используется вместе с feature_filter_engine.

Integer

feature_filter_iters

Количество итераций для каждого цикла поиска параметров, которое используется для выбора важных параметров. Этот параметр используется вместе с feature_filter_engine.

Integer

split_count

Количество равномерно выбранных параметров в диапазоне значений параметров настройки, который используется для выбора важных параметров. Этот параметр используется вместе с feature_filter_engine.

Integer

benchmark

Скрипт тестирования производительности.

evaluations

Описание целевых функций многокритериальной оптимизации.

Подробное описание целевой функции многокритериальной оптимизации представлено в таблице 4.

Таблица 4 — Целевая функция многокритериальной оптимизации

Имя

Описание

Тип

Диапазон значений

name

Название индекса оценки.

Character string

get

Скрипт для получения результатов оценки производительности.

type

Указывает положительный или отрицательный тип результата оценки. Значение positive указывает на то, что значение производительности минимально, а значение negative указывает на то, что значение производительности максимально.

Enumeration

positive или negative

weight

Вес индекса.

Integer

0-100

threshold

Минимальные требования к производительности индекса.

Integer

Определяется пользователем.

Таблица 5 — Описание доступных алгоритмов оптимизации

Примеры настройки серверных и клиентских файлов:Примеры настройки серверных и клиентских файлов:Обозначение в A-Tune

Расшифровка

Краткое описание

Библиотека

Справочный материал

bayes

Байесовская линейная регрессия (англ. Bayesian linear regression).

Подход в линейной регрессии, в котором предполагается, что шум распределен нормально.

Нормальное распределение из sklearn

https://ru.wikipedia.org/wiki/Байесовская_линейная_регрессия

https://neerc.ifmo.ru/wiki/index.php?title=Вариации_регрессии

gbrt

Градиентный бустинг деревьев (англ. Gradient Boosting Regression Trees).

Градиентный бустинг — это техника машинного обучения для задач классификации и регрессии, которая строит модель предсказания в форме ансамбля слабых предсказывающих моделей, обычно деревьев решений.

sklearn

http://neerc.ifmo.ru/wiki/index.php?title=XGBoost&mobileaction=toggle_view_desktop

forest

Случайные леса (англ. Random Forest Regressor).

Множество решающих деревьев. В задаче регрессии их ответы усредняются.

sklearn

https://scikit-learn.ru/1-11-ensemble-methods/

https://ru.wikipedia.org/wiki/Метод_случайного_леса

extraTrees

Крайне рандомизированные деревья (Extra Trees Regressor).

К множеству решающих деревьев добавляется случайность порогового значения для выбора ответа с каждого дерева.

sklearn

https://scikit-learn.ru/1-11-ensemble-methods/

abtest

А/В-тестирование.

Значения параметров разбиваются на несколько групп, тестируется подстановка каждой группы и выбирается лучший результат.

tpe

Древовидный парзеновский оценщик (Tree-structured Parzen Estimator (TPE)).

В TPE задаются два различных распределения параметров: первое — при значениях целевой функции меньших, чем пороговое значение. Второе — при значениях целевой функции больших, чем пороговое значение. Далее параметры из каждого распределения образуют пару, и из каждой пары выбирается оптимальное значение.

hyperopt

https://neerc.ifmo.ru/wiki/index.php?title=Настройка_гиперпараметров

gridsearch

Поиск по сетке.

Метод считает результат для каждого возможного сочетания значений параметров и в конце выбирает сочетание, при котором результат оптимальный.

https://neerc.ifmo.ru/wiki/index.php?title=Настройка_гиперпараметров

lhs

Выборка латинского гиперкуба (Latin hypercube sampling).

Метод, который можно использовать для выборки случайных чисел, в котором выборки равномерно распределены по пространству выборки.

lhsmdu

https://www.codecamp.ru/blog/latin-hypercube-sampling/

Примеры настройки серверных и клиентских файлов:

Ниже приведен пример конфигурации файла YAML на сервере:

project: "compress" maxiterations: 500 startworkload: "" stopworkload: "" object :   -     name : "compressLevel"     info :         desc : "The compresslevel parameter is an integer from 1 to 9 controlling the level of compression"         get : "cat /root/A-Tune/examples/tuning/compress/compress.py | grep 'compressLevel=' | awk -F '=' '{print $2}'"         set : "sed -i 's/compressLevel=\\s*[0-9]*/compressLevel=$value/g' /root/A-Tune/examples/tuning/compress/compress.py"         needrestart : "false"         type : "continuous"         scope :           - 1           - 9         dtype : "int"   -     name : "compressMethod"     info :         desc : "The compressMethod parameter is a string controlling the compression method"         get : "cat /root/A-Tune/examples/tuning/compress/compress.py | grep 'compressMethod=' | awk -F '=' '{print $2}' | sed 's/\"//g'"         set : "sed -i 's/compressMethod=\\s*[0-9,a-z,\"]*/compressMethod=\"$value\"/g' /root/A-Tune/examples/tuning/compress/compress.py"         needrestart : "false"         type : "discrete"         options :           - "bz2"           - "zlib"           - "gzip"         dtype : "string"

Ниже приведен пример настройки файла YAML на клиенте:

project: "compress" engine : "gbrt" iterations : 20 random_starts : 10  benchmark : "python3 /root/A-Tune/examples/tuning/compress/compress.py" evaluations :   -     name: "time"     info:         get: "echo '$out' | grep 'time' | awk '{print $3}'"         type: "positive"         weight: 20   -     name: "compress_ratio"     info:         get: "echo '$out' | grep 'compress_ratio' | awk '{print $3}'"         type: "negative"         weight: 80

Другие примеры клиентских и серверных файлов находятся в директории /usr/share/doc/atune.

После того как подготовили файлы для поиска оптимальных параметров, нужно скопировать серверный файл в директорию /etc/atuned/tuning. Файл клиента рекомендуется хранить в той папке, откуда запускается команда на поиск оптимальных параметров.

Для запуска оптимизации необходимо воспользоваться командой tuning.

Общий вид команды поиска оптимальных параметров

atune-adm tuning --project [имя проекта, указанное в конфигурационных файлах] <опциональный параметр> имя_файла_клиента

Если файл клиента находится в другой директории, то последним параметром должно быть не имя файла клиента, а полный путь к нему.

Таблица 6 — Описание опциональных параметров для команды tuning

Параметр

Описание

—restore, -r

Восстановить первоначальную конфигурацию перед настройкой.

—restart, -c

Выполнить настройку на основе исторических результатов настройки.

—detail, -d

Вывести на экран подробную информацию о процессе настройки.

—save имя_файла, -s имя_файла

Указать имя файла для сохранения профиля.

Пример использования динамического режима

Данный функционал был протестирован на различных рабочих нагрузках. Приведем пример, в котором производилась оптимизация параметров для работы сервера приложений Tomcat. За показания целевой функции взяли утилиту ab для оценки производительности (https://httpd.apache.org/docs/current/programs/ab.html).

Команда для бенчмарка

ab -n 8000 http://localhost:8080/

Для данной оптимизационной задачи файл сервера уже сгенерирован и находится в каталоге /etc/atuned/tuning. Файл клиента нужно составить самостоятельно:

Файл клиента «tomcat.yaml»

project: "tomcat" engine : "gbrt" iterations : 30 random_starts : 10  benchmark : "sh tomcat_benchmark.sh" evaluations :   -     name: "rps"     info:         get: "echo '$out' | grep 'taken' | awk '{print $5}'"         type: "negative"         weight: 100

Чтобы запустить поиск оптимальных параметров для tomcat, нужно вызвать команду atune-adm:

Команда для поиска оптимальных параметров

atune-adm tuning --project tomcat --detail tomcat.yaml

Вывод команды tuning

Start to benchmark baseline...  1.Loading its corresponding tuning project: tomcat  2.Start to tuning the system......  Current Tuning Progress......(1/30)  Used time: 7s, Total Time: 7s, Best Performance: (rps=4.50), Performance Improvement Rate: -0.00%  The 1th recommand parameters is: vm.drop_caches=3,net.ipv4.tcp_tw_reuse=2,net.ipv4.tcp_fin_timeout=16,net.ipv4.tcp_max_tw_buckets=1015808,net.ipv4.ip_local_port_range=32768 60999,net.core.somaxconn=22144,net.ipv4.tcp_max_syn_backlog=251904,net.core.rmem_max=42991616,net.core.wmem_max=52428800,ulimit.nofile=8824,connector.maxThreads=1710,connector.minSpareThreads=55,connector.maxConnections=11700,connector.enableLookups=true,connector.acceptCount=1350,connector.connectionTimeout=23500,connector.maxHttpHeaderSize=71680,connector.tcpNoDelay=true,connector.compression=force,connector.compressionMinSize=23040,connector.disableUploadTimeout=false  The 1th evaluation value: (rps=1.82)(-59.56%)  Current Tuning Progress......(2/30)  Used time: 9s, Total Time: 9s, Best Performance: (rps=4.50), Performance Improvement Rate: -0.00%  The 2th recommand parameters is: vm.drop_caches=3,net.ipv4.tcp_tw_reuse=0,net.ipv4.tcp_fin_timeout=63,net.ipv4.tcp_max_tw_buckets=491520,net.ipv4.ip_local_port_range=8192 65535,net.core.somaxconn=41856,net.ipv4.tcp_max_syn_backlog=53248,net.core.rmem_max=3145728,net.core.wmem_max=42991616,ulimit.nofile=6490,connector.maxThreads=1370,connector.minSpareThreads=45,connector.maxConnections=8600,connector.enableLookups=true,connector.acceptCount=1300,connector.connectionTimeout=48000,connector.maxHttpHeaderSize=37888,connector.tcpNoDelay=true,connector.compression=on,connector.compressionMinSize=18432,connector.disableUploadTimeout=true  The 2th evaluation value: (rps=1.29)(-71.33%)  ... ... итерация, на которой появилось улучшение ...   Current Tuning Progress......(14/30)  Used time: 54s, Total Time: 54s, Best Performance: (rps=4.50), Performance Improvement Rate: -0.00%  The 14th recommand parameters is: vm.drop_caches=3,net.ipv4.tcp_tw_reuse=1,net.ipv4.tcp_fin_timeout=22,net.ipv4.tcp_max_tw_buckets=917504,net.ipv4.ip_local_port_range=1024 65535,net.core.somaxconn=64128,net.ipv4.tcp_max_syn_backlog=37888,net.core.rmem_max=3145728,net.core.wmem_max=13631488,ulimit.nofile=10236,connector.maxThreads=1470,connector.minSpareThreads=140,connector.maxConnections=11500,connector.enableLookups=true,connector.acceptCount=1350,connector.connectionTimeout=56500,connector.maxHttpHeaderSize=60416,connector.tcpNoDelay=false,connector.compression=force,connector.compressionMinSize=24576,connector.disableUploadTimeout=true  The 14th evaluation value: (rps=2.16)(-52.00%)  Current Tuning Progress......(15/30)  Used time: 1m7s, Total Time: 1m7s, Best Performance: (rps=4.87), Performance Improvement Rate: 8.22%  The 15th recommand parameters is: vm.drop_caches=3,net.ipv4.tcp_tw_reuse=0,net.ipv4.tcp_fin_timeout=1,net.ipv4.tcp_max_tw_buckets=655360,net.ipv4.ip_local_port_range=8192 65535,net.core.somaxconn=57600,net.ipv4.tcp_max_syn_backlog=3072,net.core.rmem_max=27262976,net.core.wmem_max=18874368,ulimit.nofile=7119,connector.maxThreads=1710,connector.minSpareThreads=105,connector.maxConnections=11000,connector.enableLookups=false,connector.acceptCount=1350,connector.connectionTimeout=10000,connector.maxHttpHeaderSize=21504,connector.tcpNoDelay=true,connector.compression=on,connector.compressionMinSize=1536,connector.disableUploadTimeout=true  The 15th evaluation value: (rps=4.87)(8.22%)  ... ... итоговый вывод ... Current Tuning Progress......(30/30)  Used time: 3m24s, Total Time: 3m24s, Best Performance: (rps=4.87), Performance Improvement Rate: 8.22%  The 30th recommand parameters is: vm.drop_caches=1,net.ipv4.tcp_tw_reuse=2,net.ipv4.tcp_fin_timeout=92,net.ipv4.tcp_max_tw_buckets=622592,net.ipv4.ip_local_port_range=8192 65535,net.core.somaxconn=42624,net.ipv4.tcp_max_syn_backlog=87040,net.core.rmem_max=22020096,net.core.wmem_max=56623104,ulimit.nofile=3188,connector.maxThreads=1780,connector.minSpareThreads=45,connector.maxConnections=10100,connector.enableLookups=false,connector.acceptCount=650,connector.connectionTimeout=53000,connector.maxHttpHeaderSize=21504,connector.tcpNoDelay=false,connector.compression=force,connector.compressionMinSize=1536,connector.disableUploadTimeout=false  The 30th evaluation value: (rps=2.43)(-46.00%)   The final optimization result is: vm.drop_caches=3,net.ipv4.tcp_tw_reuse=0,net.ipv4.tcp_fin_timeout=1,net.ipv4.tcp_max_tw_buckets=655360,net.ipv4.ip_local_port_range=8192 65535,net.core.somaxconn=57600,net.ipv4.tcp_max_syn_backlog=3072,net.core.rmem_max=27262976,net.core.wmem_max=18874368,ulimit.nofile=7119,connector.maxThreads=1710,connector.minSpareThreads=105,connector.maxConnections=11000,connector.enableLookups=false,connector.acceptCount=1350,connector.connectionTimeout=10000,connector.maxHttpHeaderSize=21504,connector.tcpNoDelay=true,connector.compression=on,connector.compressionMinSize=1536,connector.disableUploadTimeout=true  The final evaluation value is: rps=4.87   Baseline Performance is: (rps=4.50)   Tuning Finished

Можем наблюдать, что автоматический поиск оптимальных параметров улучшил изначальные показания бенчмарка на 8,22%.

В A-Tune мы с командой доработали возможность сохранения значений оптимальных параметров в профиль для статического режима оптимизации, что позволило повысить удобство работы с утилитой.

Команда для сохранения профиля

atune-adm tuning --project tomcat --save tomcat_profile.conf

После этого можно сохранить профиль в список профилей A-Tune, и он станет доступен для применения.

Сохранить профиль в A-Tune

# в данном примере [тип сервиса] - servlet [название приложения] - tomcat [название пользовательского сценария] - optimized atune-adm define servlet tomcat optimized tomcat_profile.conf

Если понадобится удалить профиль из A-Tune, то используем следующую команду.

Удалить профиль из A-Tune

atune-adm undefine servlet-tomcat-optimized

A-Tune изменяет параметры в системе во время оптимизации, поэтому в утилите предусмотрен механизм для возврата параметров в исходное состояние.

Возврат параметров в исходное состояние

atune-adm tuning --restore --project tomcat

Распределенный режим работы A-Tune

Еще одна возможность A-Tune — это распределенный режим работы, который представляет собой разнесение клиентских и серверных частей. Для взаимодействия между собой они используют TLS-протокол.
Из-за особенностей реализации меняются и команды для запуска: в обычном режиме команды A-Tune (например, analysis) будут запущены командой atune-adm analysis, а в распределенном — atune-adm -a <ipv4 адрес сервера> -p <порт> analysis. Настройка конфигурации происходит именно на сервере, в этом режиме A-Tune никак не влияет на клиентскую машину.

Пример команды для распределенного режима работы

atune-adm -a 10.0.2.6 -p 60001 analysis -t 5
Рисунок 3. Расположение частей модуля в стандартном и распределенных режимах работы

Рисунок 3. Расположение частей модуля в стандартном и распределенных режимах работы

Сравнение A-Tune и TuneD

Прародителем для утилиты A-Tune является популярный у администраторов инструмент TuneD от компании Red Hat, который также позволяет решать задачу тонкого тюнинга системы.

В TuneD используется конфигурационный файл, в котором вручную задаются условия для рекомендации того или иного профиля. Условия учитываются по следующему алгоритму:

  1. Если указана опция virt, то вызывается virt-what.

  2. Если указана опция system, то поиск по регулярному выражению в файле /etc/os-release.

  3. Если строка начинается с «/», то производится поиск файла по заданному пути, проверяется его существование и поиск по регулярному выражению в этом файле.

  4. Если указана опция process, то происходит поиск через procfs.pidstats()

  5. Если указана опция chassis_type, то выводится строка через /sys/devices/virtual/dmi/id/chassis_type, или если не получается, то через dmidecode -s chassis-type. Потом в выведенной строке происходит поиск по регулярному выражению.

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

В A-Tune и TuneD применение профилей отличается самим составом, набором и синтаксисом плагинов.

Таблица 6 — Сравнение A-Tune и TuneD

TuneD

A-Tune

Стабильность

Стабильный проект от Red Hat.

Относительно новый проект от открытого сообщества оpenEuler.

Зрелость

Давно находится в разработке.

В активной стадии разработки и доработки.

Распространенность

Популярный и распространенный среди администраторов.

Новый инструмент, мало распространен за пределами Китая.

Функционал и технические возможности

Применение профиля в системе.

Применение профиля в системе.

Рекомендация профиля с помощью заданных пользователем правил.

Рекомендация профиля с помощью методов машинного обучения.

GUI для выбора и редактирования профилей

Более широкий набор плагинов и настраиваемых параметров профилей.
Меньшее количество заготовленных профилей.

Меньшее количество плагинов и настраиваемых параметров профилей.
Больше заготовленных профилей.

Тренировка рекомендательной системы для узкопрофильных нагрузок.

Поиск оптимальных параметров профиля.

Сохранение оптимальных параметров в профиле.

Распределенный режим работы.

Заключение

После проделанной работы по изучению и доработке утилиты в ОС Astra Linux Special Edition 1.8 появился функционал для тюнинга и повышения производительности ОС. Использование в проекте алгоритмов машинного обучения и алгоритмов глобальной и локальной многокритериальной оптимизации призвано повысить эффективность подбора оптимальных параметров. Оно сделает тюнинг более гибким и позволит адаптироваться к изменяющимся нагрузкам. Также функционал, связанный с машинным обучением, расширяет сферу применения A-Tune по сравнению с TuneD, позволяет проводить собственные исследования в сфере тонкой настройки систем и работать с узкопрофильными нагрузками.

Эксперименты с функционалом A-Tune показали, что это приложение имеет большой потенциал в области оптимизации производительности систем.


ссылка на оригинал статьи https://habr.com/ru/articles/870074/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *