Проверка результатов оптимизации производительности АП

Помимо выставления количества очередей на сетевой карте, пропускная способность также зависит от того, каким образом сетевая карта разбалансировала пакеты по очередям. При большом количестве IPsec туннелей пакеты должны распределиться по очередям и, соответственно, по ядрам-обработчикам , равномерно. Для определения загруженности ядер процессора необходимо воспользоваться командой watch cpupower monitor. Раздел «Mperf» содержит столбец «С0», который показывает степень загруженности ядра в данный момент времени. При равномерной балансировке трафика вывод команды watch cpupower monitor должен выглядеть подобным образом:

root@Gate7000:~# watch cpupower monitor

Рисунок 2. Загрузка ядер процессоров при равномерной балансировке трафика на АП «С-Терра Шлюз 7000»

Вывод консоли приведён на АП «С-Терра Шлюз 7000». Столбец «CPU» содержит порядковые номера ядер в контексте операционной системы. Два логических ядра, входящих в одно физическое ядро, располагаются друг под другом (нулевому ядру соответствуют логические ядра 0 и 12, первому ядру соответствуют логические ядра 1 и 13 и так далее). Столбец «С0» свидетельствует о том, что ядра, которые отвечают за прерывания сетевых интерфейсов и IPsec шифрование, загружены почти на 100%. Загрузка распределена равномерно. Ядра под номерами 16, 17, 22 и 23 имеют практически нулевую загрузку из-за того, что не отвечают ни за прерывания, ни за шифрование. Аналогичный вывод будет на АП «С-Терра Шлюз 8000», но загружены будут следующие ядра: 0-28.

Распределение пакетов по очередям можно посмотреть при помощи команд:

root@Gate7000:~# ethtool -S eth1 | grep "tx_queue_0_p\|tx_queue_1_p\|rx_queue_0_p\|rx_queue_1_p"

     tx_queue_0_packets: 7534

     tx_queue_1_packets: 6978

     rx_queue_0_packets: 8826

     rx_queue_1_packets: 8333

root@Gate7000:~# ethtool -S eth13 | grep "tx_queue_0_p\|tx_queue_1_p\|rx_queue_0_p\|rx_queue_1_p"

     tx_queue_0_packets: 6289

     tx_queue_1_packets: 7123

     rx_queue_0_packets: 9354

     rx_queue_1_packets: 8576

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

Помимо распределения пакетов по очередям, необходимо проверить, на каком ядре процессора обрабатываются пакеты из очереди. Например, на интерфейсе eth13 распределение будет следующим:

root@Gate7000:~# cat /proc/interrupts | grep eth13

Рисунок 3. Вывод информации о прерываниях сетевого интерфейса eth13 после выставления двух очередей на АП «С-Терра Шлюз 7000»

Количество чисел в первом столбце (без учёта последней строки) равно количеству очередей, в которые сетевая карта будет раскладывать пакеты, попавшие на интерфейс eth13. В первом столбце располагаются номера прерываний (56, 57, 58). В строке, расположенной справа от номера прерывания, находятся числа, обозначающие количество пакетов, обработанных на конкретном ядре (нумерация ядер начинается с нуля). Рассмотрим прерывание 56. На шестом ядре обработано 6289 прерываний. Это значит, что прерывание 56 привязано к шестому ядру и обрабатываться будет на нём. Прерывание 57 привязано к нулевому ядру и на нём обработано 7123 пакета.

Процесс работы с пакетами должен выглядеть следующим образом: пакеты, попавшие на интерфейс сетевой карты АП, раскладываются в 2 очереди, затем, берутся ядрами-обработчиками прерываний, а, после этого, отправляются этими ядрами на шифрующие ядра.

Если у пользователя небольшое количество IPsec туннелей, то сетевая карта не сможет автоматически разбалансировать трафик. Одним из решений является ручная балансировка трафика. С правилами настройки балансировки можно ознакомиться в главе «Балансировка трафика».

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