Мониторинг и корректировка прерываний сетевых интерфейсов | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 1 мая, печатный экземпляр отправим 5 мая.

Опубликовать статью в журнале

Автор:

Рубрика: Информационные технологии

Опубликовано в Молодой учёный №15 (357) апрель 2021 г.

Дата публикации: 07.04.2021

Статья просмотрена: 6 раз

Библиографическое описание:

Поселенов, К. В. Мониторинг и корректировка прерываний сетевых интерфейсов / К. В. Поселенов. — Текст : непосредственный // Молодой ученый. — 2021. — № 15 (357). — С. 22-24. — URL: https://moluch.ru/archive/357/79855/ (дата обращения: 20.04.2021).



Ключевые слова: программный модуль, прерывание, сетевой интерфейс, демон.

Во многих IT-компаниях используется ЭВМ, в которые устанавливаются многоядерные процессоры, где количество ядер, как правило, больше восьми. Через такие ЭВМ проходит огромное количество сетевых пакетов данных. Поэтому залогом быстрой и эффективной работы ЭВМ, является грамотное распределение нагрузки по доступным ядрам процессора, для того чтобы время обработки одного пакета было минимальным. В связи с этим, в системе применяется механизм прерываний.

Прерывание — это событие, генерируемое внешним (по отношению к процессору) устройством. В системе ЭВМ можно настраивать прерывания в зависимости от потребностей пользователя, это позволяет равномерно распределить работу по ядрам процессора. Оператор ЭВМ может самостоятельно определить, какие конкретно ядра будут обрабатывать то или иное прерывание, что позволит ему скорректировать работу всей ЭВМ. Для удобного изменения прерываний было создано решение внутри компании, которое работало в виде драйвера на уровне ядра.

Актуальность данной проблемы обусловлена тем, что существующие решения не удовлетворяют всем требованиям. Рассмотрим одно из существующих решений — это решение компании ООО «С-Терра СиЭсПи». С помощью драйвера, реализованного в компании, нельзя было надежно установить необходимые оператору прерывания для обработки событий от сетевых интерфейсов. Сейчас в драйвере регистрируются обработчики событий NETDEV_UP/NETDEV_DOWN/NETDEV_CHANGE от сетевых интерфейсов. Но вызов этих обработчиков может происходить в неподходящее время. Например, драйвер сетевой карточки способен динамически изменить параметры её работы — в том числе, модифицировать привязку RX/TX очередей сетевой карты к номерам CPU, которые должны обрабатывать прерывания от этих очередей, и не вызвать обработчик NETDEV_CHANGE. Было принято решение создать программный модуль, работающий в фоновом циклическом режиме с заданным интервалом времени.

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

Реализацией данного программного модуля является программа — демон. Демон [3] — это сервисный процесс, который работает в фоновом режиме и контролирует систему. В нашем решении демон будет работать с определенным временным интервалом.

В качестве входных параметров для запуска программного модуля используются:

  1. Флаг интерактивного режима работы. Все сообщения будут выводиться не только в специализированный лог-файл, но и на экран пользователя (не является обязательным параметром);
  2. Флаг считывания данных о прерывании из заготовленного файла. Данный флаг позволяет отлаживать программу на тестовых данных, чтобы была возможность протестировать все варианты работы модуля перед его внедрением в реальную систему (не является обязательным параметром);
  3. Флаг «сухого» режима работы. При данном режиме работы все сообщения поступают на экран пользователя, а также модуль не вносит никаких изменений в работу системы (не является обязательным параметром);
  4. Путь к файлам, обеспечивающие работу модуля.

Информация о том, как будет работать модуль, за какими интерфейсами он должен следить, задается в конфигурационном файле. Структура данного файла следующая:

  1. Указывается интервал работы (пример: interval 30, значит корректировка прерываний будет осуществляться раз в 30 с);
  2. Указываются названия сетевых интерфейсов, за которыми модуль будет следить (пример: eth0).

Информация о том, сколько выделять ядер для обработки прерывания от того или иного сетевого интерфейса задается в отдельном файле. Структура данного файла содержит строки такого формата [*]: / [2], где:

  1. Параметр до «:» определяет выполнять или не выполнять привязку прерываний от сетевых интерфейсов к процессорам;
  2. — число процессорных ядер, полностью выделенных под обработку прерываний сетевых интерфейсов;
  3. — количество рабочих ниток, число процессорных ядер, используемых для IPsec обработки.

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

Пример файла с информацией о прерываниях

Рис. 1. Пример файла с информацией о прерываниях

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

Пример лог-файла

Рис. 2. Пример лог-файла

ПМ работает в фоновом режиме. С заданной периодичностью программа считывает входные данные из конфигурационных файлов, считывает данные о структуре процессора (количество ядер, распределение ядер по нума нодам), формирует маски ядер и массив нума нод, считывает информацию об интерфейсе, преобразует ее и выставляет прерывания (записывает полученную маску в файл /proc/irq/ /smp_affinity). Вся информация о работе программы записывается в лог файлы, также, если при старте программы был указан флаг –f программа будет работать в интерактивном режиме (в этом режиме программа выводит информацию не только в лог-файл, но и на консоль оператора ЭВМ). В модуле будет существовать, так называемый, «сухой» режим, вызываемый флагом –d, при котором изменение файлов не происходит (запись в файл /proc/irq/ /smp_affinity не производится), все действия, которые совершает программа, отображается в консоль оператора. Этот метод предназначен для отладки программы.

Схема данных для программного модуля представлена на рис. 3.

Схема данных программного модуля

Рис. 3. Схема данных программного модуля

Использованный в данной ситуации тип программы — демон, работающий циклически, позволил добиться того, что заданные в файле прерывания будут установлены в том виде, в котором они были прописаны оператором ЭВМ. В модуле выполняется запись в файлы /proc (например, /proc/irq/ /smp_affinity), которые ядро создаёт для взаимодействия с пользовательскими процессами ОС, но писать в эти файлы с уровня ядра является не совсем корректным. Поэтому, наиболее надёжным и правильным видится решение по созданию сервиса мониторинга состояния сетевых интерфейсов и их настройки через файлы /proc.

Литература:

  1. What is NUMA? URL. — Текст: электронный // The Linux Kernel: [сайт]. — URL: https://www.kernel.org/doc/html/v4.18/vm/numa.html
  2. CPU_DISTRIBUTION URL. — Текст: электронный // s-terra портал документации: [сайт]. — URL: http://doc.s-terra.ru/rh_output/4.3/Gate/output/index.htm
  3. Ubuntu manuals. — Текст: электронный // Writing and packaging system daemons URL: [сайт]. — URL: http://manpages.ubuntu.com/manpages/bionic/man7/daemon.7.html
  4. Лекция 3: Базовые понятия ОС Windows URL. — Текст: электронный // НОУ ИНТУИТ: [сайт]. — URL: https://intuit.ru/studies/courses/962/217/lecture/5589
Основные термины (генерируются автоматически): программный модуль, файл, интерфейс, обязательный параметр, прерывание, CPU, работа модуля, сетевой интерфейс, схема данных, фоновый режим.


Ключевые слова

программный модуль, прерывание, сетевой интерфейс, демон
Задать вопрос