Рекомендация по настройке параметров оптимизации производительности устройств «С-Терра Шлюз 7000» и «С-Терра Шлюз 8000»

Скачать в формате PDF

Введение

Данная рекомендация актуальна для двухпроцессорных аппаратных платформ (АП). Документ содержит настройки параметров оптимизации производительности для устройств «С-Терра Шлюз» 7000HE (на базе платформы Lanner FW-8894B с двумя процессорами «Intel Xeon 2643v4 3.40GHz») и двух версий устройств «С-Терра Шлюз» 8000HE (на базе платформы Lanner FW-8894B с двумя процессорами «Intel Xeon 2699v4 2.20GHz» и на базе платформы Aquarius T50 с двумя процессорами «Intel Xeon Gold 6226R 2.90GHz»). Если на вашей АП установлен иной процессор, то обратитесь в службу технической поддержки.

Настройки, описанные в рекомендации, актуальны для «С-Терра Шлюз», программное обеспечение которого не ниже BIM43_2020_11_17  и AGENT43_19_12_27__20279_B (версии ПО можно посмотреть при помощи команды cat /etc/image_version). В документе также описаны особенности настройки параметров оптимизации производительности для версии AGENT43_23_06_09__23955_B (4.3 FW). Рекомендованные параметры для АП «С-Терра Шлюз» 8000HE на базе платформы Aquarius T50 применимы только для ПО версии AGENT43_23_06_09__23955_B (4.3 FW). Если у Вас более старая версия, обратитесь в техническую поддержку за обновлением.

Настройка параметров оптимизации производительности

Настройки параметров оптимизации производительности применимы для аппаратных платформ «С-Терра Шлюз» 7000HE и «С-Терра Шлюз» 8000HE, которые, как правило, размещаются в центральных офисах и предоставляют защищенный доступ большому количеству филиальных шлюзов (или VPN клиентов) к ресурсам центрального офиса.

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

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

Общие настройки

Необходимо убедиться в том, что Hyper-Threading и NUMA включены (на всех ПАК, поддерживающих данные технологии, они должны быть включены по умолчанию). Ниже представлено описание проверки общих настроек АП.

Hyper-Threading

Hyper-Threading – это аппаратная технология, позволяющая обрабатывать на каждом ядре процессора несколько программных потоков (в случае отсутствия Hyper-Threading одно ядро процессора обрабатывает один программный поток). Чем больше программных потоков обрабатывается на одном ядре, тем больше задач может выполняться на нём параллельно. После включения технологии Hyper-Threading в рамках каждого физического ядра, будут созданы два логических ядра, которые могут обрабатывать разные программные потоки одновременно. Для того, чтобы посмотреть, включена ли технология Hyper-Threading на устройстве, необходимо воспользоваться командой lscpu и обратить внимание на поле «Thread(s) per core»:

root@Gate7000HE:~# lscpu

CPU(s):                24

On-line CPU(s) list:   0-23

Thread(s) per core:    2

Core(s) per socket:    6

Вывод утилиты приведён на АП «С-Терра Шлюз» 7000HE (полный вывод команды lscpu для каждой из АП можно найти в главе «Приложение»). Поле «Thread(s) per core» показывает, какое количество потоков может обрабатывать одно ядро. Если включена технология Hyper-Threading, то каждое ядро будет обрабатывать два потока параллельно. Поле «CPU(s)» показывает, сколько ядер доступно в операционной системе.

Если технология Hyper-Threading отключена, необходимо обратиться в техническую поддержку для получения инструкции по её включению.

NUMA

NUMA (Non-Uniform Memory Access)это аппаратная технология взаимодействия одного процессора с блоками памяти другого процессора. Технология NUMA способствует распределению процессов в системе таким образом, чтобы они получали области оперативной памяти, расположенные максимально близко к процессорам, на которых работают. Для АП «С-Терра Шлюз» 7000HE и «С-Терра Шлюз» 8000HE доступно разделение процессоров и памяти на два NUMA узла. Для того, чтобы посмотреть, включена ли технология NUMA на устройстве, необходимо воспользоваться командой lscpu (полный вывод команды lscpu для каждой из аппаратных платформ можно найти в главе «Приложение»):

root@Gate7000HE:~# lscpu

NUMA node(s):          2

Vendor ID:             GenuineIntel

CPU family:            6

Model:                 79

L2 cache:              256K

L3 cache:              20480K

NUMA node0 CPU(s):     0-5,12-17

NUMA node1 CPU(s):     6-11,18-23

Строка «NUMA node(s)» содержит количество NUMA узлов, доступных операционной системе. Вывод утилиты свидетельствует о том, что в системе доступны 2 NUMA узла (данная технология на устройстве включена). В первом NUMA узле находятся ядра с номерами: 0-5,12-17 (ядра процессора cpu0), во втором NUMA узле находятся ядра с номерами: 6-11,18-23 (ядра процессора cpu1).

Если технология NUMA отключена, необходимо обратиться в техническую поддержку для получения инструкции по её включению.

min_perf_pct

В процессорах Intel присутствует система управления производительностью P-State, которая предназначена для повышения энергоэффективности процессоров без заметного ухудшения производительности. Параметр min_perf_pct позволяет избегать переходных процессов и при поступлении больших объёмов трафика сразу задействует процессоры на максимальных частотах. По умолчанию, значение min_perf_pct для АП «С-Терра Шлюз» 7000HE и «С-Терра Шлюз» 8000HE должно быть равно 100. Для того, чтобы посмотреть, какое значение записано в файл min_perf_pct, необходимо воспользоваться командой:

root@Gate7000HE:~# cat /sys/devices/system/cpu/intel_pstate/min_perf_pct

100

Если в файл /sys/devices/system/cpu/intel_pstate/min_perf_pct записано другое значение, необходимо обратиться в техническую поддержку.

DefaultCryptoContextsPerIPSecSA

При использовании АП в режиме «шифрование» необходимо проверить параметр DefaultCryptoContextsPerIPSecSA в файле /opt/VPNagent/etc/agent.ini. Данный параметр определяет количество криптографических контекстов, создаваемых для одного IPsec SA в соответствии с данным правилом IPsecAction. Наличие нескольких контекстов позволяет параллельно обрабатывать пакеты с использованием одного IPsec SA. Однако создание дополнительных криптографических контекстов требует ресурсов и может привести к превышению ограничений в криптографических библиотеках.

Значение DefaultCryptoContextsPerIPSecSA должно превышать общее количество процессорных ядер на 1. Например, для АП «С-Терра Шлюз» 7000HE с количеством ядер (поле «CPU(s)») равным 24, вывод команды будет следующим:

root@Gate7000HE:~# cat /opt/VPNagent/etc/agent.ini | grep DefaultCryptoContextsPerIPSecSA

! of the DefaultCryptoContextsPerIPSecSA field. Value must be from 1

DefaultCryptoContextsPerIPSecSA = 25

Если в файл /opt/VPNagent/etc/agent.ini записано другое значение, необходимо изменить его вручную.

Для того, чтобы выставить корректное значение DefaultCryptoContextsPerIPSecSA, необходимо:

1.     С помощью команды lscpu | grep CPU (поле «CPU(s)») узнать, сколько ядер доступно в операционной системе.

  1. В файл /opt/VPNagent/etc/agent.ini записать в переменную DefaultCryptoContextsPerIPSecSA полученное количество ядер + 1 (в данном случае 25):

root@Gate7000HE:~# vim.tiny /opt/VPNagent/etc/agent.ini

[Local Policy]

! Local Security Policy IPsecRule structure has optional field named

! CryptoContextsPerIPSecSA defining number of cryptographic contexts

! opened for each IPSec SA built with the IPsecRule. If the field is

! not defined there, number of cryptographic contexts equals the value

! of the DefaultCryptoContextsPerIPSecSA field. Value must be from 1

! to 128.

DefaultCryptoContextsPerIPSecSA = 25

3.     Пересчитать контрольную сумму файла с помощью утилиты integr_mgr calc:

root@Gate7000HE:~# integr_mgr calc -f /opt/VPNagent/etc/agent.ini

SUCCESS:  Operation was successful.

4.     Перезагрузить АП с помощью команды reboot.

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

Параметр cpu_distribution в файле /etc/modprobe.d/vpndrvr.conf отвечает за распределение ядер драйвера (vpndrv) Продукта, то есть за то, какое количество ядер драйвера будет отведено на обработку прерываний, а какое – на основную обработку пакетов (межсетевое экранирование, шифрование, маркирование и т.д.).

Стандартная настройка (4.3, сборка 20279)

Для того, чтобы посмотреть распределение ядер драйвера Продукта в файле /etc/modprobe.d/vpndrvr.conf, необходимо воспользоваться командой:

root@Gate7000HE:~# cat /etc/modprobe.d/vpndrvr.conf | grep cpu

options vpndrvr cpu_distribution=*:2/*

Параметр cpu_distribution драйвера vpndrv (является модулем ядра Linux) имеет следующий формат:

*:<irq cores>/<working cores>

·         <irq cores> позволяет указать количество (или же конкретные номера) процессорных ядер, выделенных на обработку прерываний от пакетов с сетевых интерфейсов;

·         <working cores> позволяет указать количество (или же конкретные номера) процессорных ядер, выделенных на основную обработку пакетов (фильтрация, шифрование, маркирование и др.), и взаимосвязь между working cores и irq cores.

Вывод утилиты свидетельствует о том, что на обработку прерываний выделено два ядра, а на обработку пакетов драйвером Продукта выделены все остальные ядра, причём, применено такое распределение ко всем сетевым интерфейсам платформы. Параметр cpu_distribution всегда выставляется при прохождении инициализации Продукта, но может быть изменен вручную в конфигурационном файле /etc/modprobe.d/vpndrvr.conf.

Изменять параметр cpu_distribution без согласования с вендором – запрещено! Если параметр cpu_distribution в файле /etc/modprobe.d/vpndrvr.conf был изменён, то для применения настроек необходимо перезагрузить АП (перезагрузки драйвера vpndrv недостаточно).

Расширенная настройка (4.3 FW, сборка 23955)

В версии AGENT43_23_06_09__23955_B (4.3 FW) параметр cpu_distribution имеет возможность гибкой настройки, при которой вручную указываются номера конкретных ядер, выделенных на обработку прерываний и на основную обработку пакетов, а также взаимосвязь этих ядер друг с другом. Предположим, на ПАК «С-Терра Шлюз» 7000HE с двумя процессорами «Intel Xeon 2643v4 3.40GHz» выставлено следующее распределение:

root@Gate7000HE:~# vim.tiny /etc/modprobe.d/vpndrvr.conf

options vpndrvr cpu_distribution=*:#0,1,2,3/#8~0,9~1,10~2,11~3,12~0,13~1,14~2,15~3

Данное распределение означает, что на обработку прерываний будет выделено 4 ядра (0, 1, 2, 3), а на основную обработку пакетов будет выделено 8 ядер (8, 9, 10, 11, 12, 13, 14, 15). Причём, прерывания, обработанные на ядре под номером 0, будут отправляться на «рабочие» ядра 8 и 12, c 1 на 9 и 13, со 2 на 10 и 14, с 3 на 11 и 15 соответственно.

Необходимо следить за тем, чтобы ядра, на которых обрабатываются прерывания, и привязанные к ним ядра, на которых производится основная обработка, находились на одной NUMA-ноде (определить, на какой NUMA-ноде находятся ядра, можно при помощи команды lscpu | grep NUMA).

Для просмотра текущего значения cpu_distribution  можно также воспользоваться командой:

root@ Gate7000HE:~# cat /sys/module/vpndrvr/parameters/cpu_distribution

*:#0,1,2,3/#8~0,9~1,10~2,11~3,12~0,13~1,14~2,15~3

Конкретные ядра, на которых выполняется основная обработка трафика (vpndrvr процесс), можно посмотреть при помощи команды ps -Af. Например, вывод утилиты для cpu_distribution на «С-Терра Шлюз» 7000HE с двумя процессорами «Intel Xeon 2643v4 3.40GHz», указанного выше, будет следующим:

root@Gate7000HE:~# ps -Af | grep vpndrv

root         483       2  0 Sep26 ?        01:07:32 [vpndrvr/8]

root         484       2  0 Sep26 ?        00:14:58 [vpndrvr/9]

root         485       2  0 Sep26 ?        01:07:20 [vpndrvr/10]

root         486       2  0 Sep26 ?        00:15:01 [vpndrvr/11]

root         487       2  0 Sep26 ?        00:16:36 [vpndrvr/12]

root         488       2  0 Sep26 ?        00:17:14 [vpndrvr/13]

root         489       2  0 Sep26 ?        00:19:05 [vpndrvr/14]

root         490       2  0 Sep26 ?        00:18:51 [vpndrvr/15]

Число N в [vpndrvr/N] показывает на каком ядре выполняется нитка драйвера (vpndrv). Видно, что драйвер занимает с 8 по 11 ядра на первом процессоре и с 12 по 15 ядра на втором процессоре (см. вывод lscpu выше). Также видно, что на первых четырех ядрах первого процессора отсутствуют нитки драйвера, то есть отсутствуют [vpndrvr/0] - [vpndrvr/3]. Так и должно быть, потому что код vpndrvr, который отвечает за обработку прерываний работает в контексте ядра linux в нитках ksoftirqd/0 - ksoftirqd/3.

Рекомендуемые настройки параметра cpu_distribution для каждой из АП (в зависимости от режима работы) можно найти в главе «Приложение».

Конфигурирование количества очередей на сетевой карте

Данная настройка должна выполняться независимо от модели АП и типа передаваемого трафика на всех физических сетевых интерфейсах ПАК, которые поддерживают возможность выставления очередей (узнать, поддерживает ли сетевая карта выставление очередей, можно в инструкции к сетевой карте, либо же фактически попытаться выставить произвольное количество очередей, - если заданное значение применится, значит сетевая карта поддерживает возможность выставления очередей). Конфигурирование количества очередей на сетевой карте является необходимым условием для правильной работы механизма распределения прерываний от очередей сетевой карты к ядрам процессора(ов) и оптимальной производительности аппаратных платформ. Остальные параметры, касающиеся режима «шифрование» (cpu_distribution, NUMA, Hyper-Threading), корректно настроены на стадии производства.

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

root@Gate7000HE:~# ethtool –l eth13

Channel parameters for eth13:

Pre-set maximums:

RX:             0

TX:             0

Other:          1

Combined:       24

Current hardware settings:

RX:             0

TX:             0

Other:          1

Combined:       24

Вывод команды приведён на АП «С-Терра Шлюз» 7000HE c двумя процессорами «Intel Xeon e5-2643v». Параметр «Combined» в поле «Current hardware settings» свидетельствует о том, что на сетевом интерфейсе eth13 выставлено 24 очереди (количество очередей по умолчанию зависит от количества ядер процессоров и от модели сетевой карты).

Количество очередей, на которые сетевая карта будет раскладывать пакеты, должно быть равно количеству ядер, отведённых на обработку прерываний (irq cores) кодом драйвера Продукта. Код драйвера, отвечающий за обработку прерываний, работает в контексте ниток ksoftirqd/N ядра Linux.

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

1.    Создать файл (если отсутствует) /etc/rc.local.inc:

root@Gate7000HE:~# vim.tiny /etc/rc.local.inc

2.    Поместить в файл /etc/rc.local.inc строки ниже, записав в переменную QNUM количество ядер <irq cores>, которое указано в параметре cpu_distribution (в данном случае, оно равно 2):

QNUM=2

for phys_iface in $(ls /sys/class/net | grep -P "^eth\d+$")

do

    echo Setting combined queue to $QNUM on $phys_iface ...

    ethtool -L $phys_iface combined $QNUM

done

3.    Перезапустить сервис rc.local.service:

root@Gate7000HE:~# systemctl restart rc.local.service

Данный файл будет выполняться автоматически после загрузки ОС или же после перезагрузки сервиса rc.local.service.

4.    Проверить количество очередей на всех физических интерфейсах:

root@Gate7000HE:~# ethtool –l eth13

Channel parameters for eth13:

Pre-set maximums:

RX:             0

TX:             0

Other:          1

Combined:       24

Current hardware settings:

RX:             0

TX:             0

Other:          1

Combined:       2

Вывод утилиты свидетельствует о том, что теперь количество очередей на сетевом интерфейсе равно 2.

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

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

При большом количестве IPsec туннелей пакеты должны распределиться по очередям и, соответственно, по ядрам-обработчикам равномерно. Для определения загруженности ядер процессора необходимо воспользоваться командой cpupower monitor. Раздел «Mperf» содержит столбец «С0», который показывает степень загруженности ядра в данный момент времени. При равномерной балансировке трафика вывод команды watch cpupower monitor должен выглядеть подобным образом (вывод команды приведён на АП «С-Терра Шлюз» 7000HE на базе двух процессоров «Intel Xeon e5-2643v»):

root@Gate7000HE:~# watch cpupower monitor

Рисунок 1. Загрузка ядер процессоров при равномерной балансировке трафика на АП «С-Терра Шлюз» 7000HE (2 x Intel Xeon e5-2643v 3.40GHz)

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

Идентификаторы PCI-слотов, к которым подключены сетевые адаптеры можно посмотреть с помощью команды lspci -v | grep Ethernet.

Для просмотра информации о сетевом адаптере для платформы Lanner FW-8894B с двумя процессорами «Intel Xeon 2643v4 3.40GHz» и сетевыми адаптерами Intel 82599ES можно воспользоваться командой lspci -nnks 83:00.0. Вывод команды будет следующим:

root@Gate7000HE:~# lspci -nnks 83:00.0

83:00.0 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01)

        Kernel driver in use: ixgbe

        Kernel modules: ixgbe

Для платформы Aquarius T50 с двумя процессорами «Intel Xeon Gold 6226R 2.90GHz» и сетевыми адаптерами Intel X710 необходимо воспользоваться командой lspci -nnks 5e:00.0. Вывод команды будет следующим:

root@Gate8000HE:~# lspci -nnks 5e:00.0

5e:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [8086:1572] (rev 02)

        Subsystem: Silicom Ltd. Ethernet Controller X710 for 10GbE SFP+ [1374:0258]

        Kernel driver in use: i40e

        Kernel modules: i40e

Распределение пакетов по очередям можно посмотреть при помощи команды ethtool -S (регулярное выражение после grep может зависеть от версии драйвера сетевой карты). Например, на АП «С-Терра Шлюз» 7000HE для сетевого адаптера на базе Intel 82599ES (ixgbe) вывод будет следующим:

root@Gate7000HE:~# ethtool -S eth1 | grep "[rt]x_queue_[0-1]_packets"

     tx_queue_0_packets: 7534

     tx_queue_1_packets: 6978

     rx_queue_0_packets: 8826

     rx_queue_1_packets: 8333

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

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

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

Рисунок 2. Вывод информации о прерываниях сетевого интерфейса eth13 после выставления двух очередей на АП «С-Терра Шлюз» 7000HE (2 x Intel Xeon e5-2643v 3.40GHz)

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

В случае использования АП «С-Терра Шлюз» 8000HE с двумя процессорами «Intel Xeon Gold 6226R 2.90GHz», вывод информации о прерываниях должен быть следующим:

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

Рисунок 3. Вывод привязок прерываний сетевого интерфейса eth13 на АП «С-Терра Шлюз» 8000HE (2 x Intel Xeon 2699v4 2.20GHz)

Сетевая карта раскладывает пакеты, попавшие на интерфейс eth13, в две очереди. Номера прерываний данных очередей: 56 и 57 (номера прерываний после перезагрузки устройства могут меняться). Вывод консоли свидетельствует о том, что прерывание 56 привязано к четырнадцатому ядру, данное ядро является нулевым ядром NUMA node1. Прерывание 57 привязано к нулевому ядру, данное ядро является нулевым ядром NUMA node0. Таким образом, на АП «С-Терра Шлюз» 8000HE на базе платформы Lanner FW-8894B с двумя процессорами «Intel Xeon 2699v4 2.20GHz прерывания должны обрабатываться на ядрах 0 и 14.

За настройку привязок прерываний сетевых интерфейсов к ядрам на АП «С-Терра Шлюз» версии 4.3 отвечает сервис vpnirq. Данный сервис автоматически привязывает обработку прерываний сетевых интерфейсов к нулевому ядру NUMA node0 и к нулевому ядру NUMA node1. Если на сетевой карте выставлено две очереди стандартной настройкой, пакеты из первой очереди будут обрабатываться нулевым ядром NUMA node0, а пакеты из второй очереди нулевым ядром NUMA node1. Данные настройки значительно увеличивают эффективность обработки прерываний сетевых интерфейсов.

Если по каким-то причинам прерывания сетевого интерфейса привязаны к другим ядрам, перезапустите сервис vpnirq:

root@Gate7000HE:~# systemctl restart vpnirq

Приведенное выше описание сервиса vpnirq актуально только для «С-Терра Шлюз» версии 4.3. В версии AGENT43_23_06_09__23955_B (4.3 FW) за привязки прерываний сетевых интерфейсов теперь отвечает сервис vpndrv.

В случае расширенной настройки параметра распределения ядер драйвера Продукта (версия AGENT43_23_06_09__23955_B) необходимо убедиться, что пакеты обрабатываются именно на тех ядрах, которые были выставлены в файле /etc/modprobe.d/vpndrvr.conf, а количество очередей соответствует указанному количеству ядер, отвечающих за прерывания (irq) и значению QNUM, выставленному в файле /etc/rc.local.inc.

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

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

Частные настройки

Режим «шифрование на уровне L3»

Для повышения производительности необходимо, чтобы количество ядер, отвечающих за прерывания (irq), было равно количеству очередей (QNUM), выставленных на сетевой карте.

Предположим, АП «С-Терра Шлюз» 7000HE версии AGENT43_23_06_09__23955_B (4.3 FW) работает в режиме «шифрование». Наиболее высокопроизводительным вариантом будет следующее распределение ядер: 4 ядра драйвера Продукта выделено на обработку прерываний (irq) и 20 ядер на обработку пакетов (work), в данном случае, – шифрование:

root@Gate7000HE:~# cat /etc/modprobe.d/vpndrvr.conf | grep cpu_distribution

options vpndrvr cpu_distribution=*:#0,1,6,7/#2~0,3~1,4~0,5~1,12~0,13~1,14~0,15~1,16~0,17~1,8~6,9~7,10~6,11~7,18~6,19~7,20~6,21~7,22~6,23~7

 Рекомендуемые настройки параметра cpu_distribution для каждой из АП можно найти в главе «Приложение».

Если параметр cpu_distribution в файле /etc/modprobe.d/vpndrvr.conf был изменён, то для применения настроек необходимо перезагрузить АП.

Isolcpus

Параметр isolcpus актуален для версии 4.3 на «С-Терра Шлюз» 7000HE на базе платформы Lanner FW-8894B с двумя процессорами «Intel Xeon 2643v4 3.40GHz» и «С-Терра Шлюз» 8000HE на базе платформы Lanner FW-8894B с двумя процессорами «Intel Xeon 2699v4 2.20GHz».

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

root@Gate7000HE:~# cat /boot/grub/grub.cfg | grep isolcpus

    linux /boot/vmlinuz-4.9.0-11-amd64 root=UUID=f902c305-b652-4be3-9ad3-f0d159135905 ro console=ttyS0,115200 console=tty crashkernel=1G-:256M ipv6.disable=1 net.ifnames=0 isolcpus=0-15,18-21 pti=off l1tf=off spectre_v2=off    spec_store_bypass_disable=off nospectre_v1 nospec_store_bypass_disable    nospectre_v2 nopti spectre_v2_user=off noibrs noibpb no_stf_barrier mds=off mitigations=off panic=300 quiet

На АП «С-Терра Шлюз» 7000HE (с двумя процессорами «Intel Xeon 2643v4 3.40GHz») параметр isolcpus должен содержать значения: 0-15,18-21:

root@Gate7000HE:~# cat /proc/cmdline | grep isolcpus

... isolcpus=0-15,18-21 ...

Также изолированные ядра можно посмотреть с помощью команды:

cat /sys/devices/system/cpu/isolated

На АП «С-Терра Шлюз» 8000HE (с двумя процессорами «Intel Xeon 2699v4 2.20GHz») параметр isolcpus должен содержать значения: 0-28:

root@Gate8000HE:~# cat /proc/cmdline | grep isolcpus

... isolcpus=0-28 ...

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

Режим «шифрование на уровне L2»

Для работы с трафиком уровня L2 на аппаратных платформах предусмотрен сервис l2svc. Логика работы следующая: на сетевой интерфейс платформы поступают L2-фреймы, далее, они инкапсулируются в UDP и IP при помощи сервиса l2svc, а, затем, шифруются средствами драйвера Продукта (vpndrv).

В режиме «шифрование на уровне L2» также необходимо, чтобы количество ядер, отвечающих за прерывания (irq), было равно количеству очередей (QNUM), выставленных на сетевой карте. Рекомендуемые параметры cpu_distribution для АП «С-Терра Шлюз» 7000HE и АП «С-Терра Шлюз» 8000HE, а также содержимое файлов конфигурации для каждой платформы представлены в разделе «Приложение».

Файл global.cfg

Файл global.cfg позволяет выставить количество ядер, которое будет отведено под l2svc сервис. Для этого необходимо привести его к следующему виду:

root@Gate7000HE:~# vim.tiny /opt/l2svc/etc/global.cfg

...

L2VPN_CORE_COUNT="4"

BOND_MODE="balance-xor"

...

·         «L2_VPN_CORE_COUNT» – задает количество ядер для работы l2svc процессов;

·         «BOND_MODE» – задает режим балансировки трафика между tap-интерфейсами, объединенными в bond

Параметр L2_VPN_CORE_COUNT задает число последних ядер в системе, на которых будут выполняться процессы l2svc. По умолчанию (L2VPN_CORE_COUNT=1) все процессы l2svc выполняются на ядре с максимальным номером в системе (см. вывод команды lscpu). Например, если в системе 64 ядра, то при L2VPN_CORE_COUNT=4, процессам l2svc будут доступны ядра с номерами 60, 61, 62, 63. Выбор ядра для выполнения процесса l2svc происходит по алгоритму кругового цикла (round-robin), соответственно, количество конфигурационных файлов может превышать количество отведенных ядер для выполнения l2svc.

Настройка туннельных интерфейсов

Сервис l2svc позволяет привязать работу определенного туннельного интерфейса (tap-интерфейса) к определенному ядру при помощи параметра bind_to_core_id <CORE> в конфигурационном файле туннельного интерфейса:

root@Gate7000HE:~# cat /opt/l2svc/etc/tap1.conf

vif tap1

local 1.1.1.1

remote 1.1.1.2

port 50000

bridge br0

capture eth2

mssfix 1400

passtos

bind_to_core_id 0

bonding bond0

·         bind_to_core_id 0 – туннельный интерфейс tap1 будет работать на ядре под номером 0;

 

Данный параметр переопределяет глобальный параметр L2VPN_CORE_COUNT в файле /opt/l2svc/etc/global.cfg. В качестве ядра <CORE> может быть задано любое доступное в системе ядро. Параметр используется в случае, если определенным l2 туннелям нужно гарантировать пропускную способность за счет назначения выделенного ядра для исполнения l2svc.

Если настройка распределения ядер для работы туннельных интерфейсов производится через конфигурационные файлы /opt/l2svc/etc/tap*.conf и через глобальный файл конфигурации /opt/l2svc/etc/global.cfg, то наибольший приоритет будут иметь настройки, произведенные в файлах /opt/l2svc/etc/tap.conf. То есть, если в файле /opt/l2svc/etc/global.cfg параметр L2_VPN_CORE_COUNT будет равен 4, а в настройках четырёх туннельных интерфейсов будут привязки, например, к 0, 1, 2 и 3 ядрам, то сервис l2svc будет использовать для работы туннельных интерфейсов именно ядра 0, 1, 2 и 3 (по умолчанию сервис l2svc считывает значение параметра L2_VPN_CORE_COUNT и занимает заданное в нём количество ядер, начиная с последнего ядра второй NUMA-ноды в обратом порядке – последнее, предпоследнее и т.д.).

Содержимое файлов global.cfg для каждого из устройств приведено в главе «Приложение».

Настройка размера буферов приёма и отправки пакетов

Помимо выставления количества ядер для работы с l2svc сервисом, необходимо задать нужный размер буферов для приёма и отправки пакетов. Для того, чтобы настроить размеры буферов, необходимо в файле /etc/sysctl.conf после строки «# buffer sizes» изменить текущие значения на следующие:

root@Gate7000HE:~# vim.tiny /etc/sysctl.conf

# buffer sizes

net.core.rmem_max=4194304

net.core.wmem_max=4194304

net.core.rmem_default=229376

net.core.wmem_default=229376

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

root@Gate7000HE:~# sysctl -p

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

root@Gate7000HE:~# vim.tiny /opt/l2svc/etc/tap0.conf

...

rcvbuf 1048576

sndbuf 1048576

...

·         «rcvbuf» – размер буфера отправки пакетов на данном tap-интерфейсе;

·         «sndbuf» – размер буфера приёма пакетов на данном tap-интерфейсе;

Рекомендуемые настройки сервиса l2svc при использовании аппаратных платформ в топологии «точка-точка»

При использовании аппаратных платформ в топологии «точка-точка» в режиме «шифрование на уровне L2» рекомендуется объединять туннельные интерфейсы в bonding-интерфейс. Bonding-интерфейс является балансировщиком, который позволяет равномерно распределять сетевые пакеты по туннельным интерфейсам. Рекомендуется использовать bonding-интерфейс в режиме balance-xor.

Будьте внимательны, в режиме balance-xor при вычислении хеша от MAC-адреса учитывается только последний (младший) байт MAC-адреса. Если он в двух пакетах от разных устройств будет одинаковым, то пакеты не будут разбалансированы по туннельным интерфейсам, что приведёт к некорректной балансировке трафика по процессорам АП.

Также рекомендуется использовать такое количество туннельных интерфейсов, которое будет кратно значению параметра L2_VPN_CORE_COUNT (например, для АП «С-Терра Шлюз» 7000HE это значение рекомендуется выставить равным 4). При этом, рекомендуется использовать такое количество оконечных устройств, которое будет в 2 раза больше количества туннельных интерфейсов. Чем больше количество оконечных устройств относительно количества туннельных интерфейсов, тем более равномерно сетевые пакеты будут распределяться по ним.

В режиме «шифрование на уровне L2» распределение ядер зависит от модели платформы.

Предположим, АП «С-Терра Шлюз» 7000HE работает в режиме «шифрование на уровне L2». Наиболее высокопроизводительным вариантом будет следующее распределение ядер: 4 на обработку прерываний (irq), 16 ядер на основную обработку пакетов (work), 4 ядра на работу сервиса l2svc.

Таким образом, распределение ядер будет следующим:

root@Gate7000HE:~# cat /etc/modprobe.d/vpndrvr.conf | grep cpu_distribution

options vpndrvr cpu_distribution=*:#0,1,6,7/#2~0,3~1,4~0,5~1,12~0,13~1,14~0,15~1,8~6,9~7,10~6,11~7,18~6,19~7,20~6,21~7

Привязки туннельных интерфейсов сервиса l2svc к ядрам будут следующими:

root@Gate7000HE:~# cat /opt/l2svc/etc/tap* | grep bind

bind_to_core_id 16

bind_to_core_id 17

bind_to_core_id 22

bind_to_core_id 23

Проверка результатов оптимизации производительности АП в режиме «шифрование на уровне L2»

Если на АП «С-Терра Шлюз» 8000HE на базе платформы Lanner FW-8894B с двумя процессорами «Intel Xeon 2699v4 2.20GHz» запущено два l2svc процесса и, при этом, работает сервис vpndrv, то вывод команды watch cpupower monitor будет следующим:

Рисунок 5. Загрузка ядер процессоров при работе в режиме «шифрование на уровне L2» трафиком на АП «С-Терра Шлюз» 8000HE (2 x Intel Xeon Gold 6226R 2.90GHz)

По умолчанию, ядра, на которых запущен l2svc процесс, занимаются с конца (если не задана ручная привязка в файлах конфигурации с помощью bind_to_core_id), а ядра, на которых запущен vpndrvr процесс, занимаются с начала списка ядер в выводе команды watch cpupower monitor.

Для АП «С-Терра Шлюз» 8000HE один l2svc процесс займет ядро под номером 55, два l2svc процесса займут ядра под номерами 55 и 54 и так далее.

Предположим, что на АП «С-Терра Шлюз» 7000HE версии 4.3 FW настроена привязка туннельных интерфейсов сервиса l2svc к последним ядрам NUMA node0 и NUMA node1 соответственно. Вывод команды watch cpupower monitor будет следующим:

Рисунок 6. Загрузка ядер процессоров при работе в режиме «шифрование на уровне L2» на АП «С-Терра Шлюз» 7000HE с привязкой туннельных интерфейсов на последние ядра NUMA node

Ядра, на которых работают туннельные интерфейсы (16,17,22,23), загружены практически по максимуму. Ядра, которые отвечают за обработку прерываний от сетевых интерфейсов, загружены на 40-50%, а ядра, отвечающие за обработку пакетов, загружены примерно на 75%. Загрузка распределена равномерно.

Режим «межсетевое экранирование» (4.3 FW, сборка 23955)

В текущем режиме работы используется исключительно версия AGENT43_23_06_09__23955_B (4.3 FW). В режиме «межсетевое экранирование» также необходимо, чтобы количество ядер, отвечающих за прерывания (irq), было равно количеству очередей (QNUM), выставленных на сетевой карте.

Соответствующие настройки для ПАК «С-Терра Шлюз» 7000HE и «С-Терра Шлюз» 8000HE можно найти в главе «Приложение».

Наиболее высокопроизводительным вариантом для АП «С-Терра Шлюз» 7000HE будет следующее распределение ядер: 12 ядер на обработку прерываний (irq) и 12 ядер на основную обработку пакетов.

root@Gate7000HE:~# cat /etc/modprobe.d/vpndrvr.conf | grep cpu_distribution

options vpndrvr cpu_distribution=*:#0,1,2,3,4,5,6,7,8,9,10,11/#12~0,13~1,14~2,15~3,16~4,17~5,18~6,19~7,20~8,21~9,22~10,23~11

При работе АП «С-Терра Шлюз» 7000HE в режиме «межсетевое экранирование» существуют ограничения по количеству записей в расширенном списке доступа. Для версии AGENT43_23_06_09__23955_B (4.3 FW) 50 000 является максимальным количеством правил, при котором не наблюдается ухудшение производительности, при условии, что общее количество сессий не превышает 55 000. Стоит обратить внимание, что пакеты должны быть равномерно распределены по спискам доступа. 

Предположим, что на АП «С-Терра Шлюз» 7000HE настроена stateless-фильтрация. Ниже представлен пример настройки расширенных списков доступа для трафика для LAN и WAN интерфейсов. Для каждого списка доступа описаны 50 000 комбинаций ip адресов, с портами источника и приемника. 

ip access-list extended FW1

 permit udp host 1.1.0.0 eq 1024 host 2.2.0.0 eq 1024

 permit udp host 1.1.0.1 eq 1024 host 2.2.0.1 eq 1024

 permit udp host 1.1.0.2 eq 1024 host 2.2.0.2 eq 1024

 ...

 permit udp host 1.1.3.254 eq 1073 host 2.2.3.254 eq 1024

 permit udp host 1.1.3.255 eq 1073 host 2.2.3.255 eq 1024

 

ip access-list extended FW2

 permit udp host 2.2.0.0 eq 1024 host 1.1.0.0 eq 1024

 permit udp host 2.2.0.1 eq 1024 host 1.1.0.1 eq 1024

 permit udp host 2.2.0.2 eq 1024 host 1.1.0.2 eq 1024

 ...

 permit udp host 2.2.3.254 eq 1024 host 1.1.3.254 eq 1073

 permit udp host 2.2.3.255 eq 1024 host 1.1.3.255 eq 1073

Ручная балансировка трафика по нескольким IPsec туннелям

В некоторых случаях сетевая карта может неравномерно распределить поступающие пакеты по очередям (подробную информацию о распределении пакетов по очередям сетевой карты можно найти в главе «Проверка результатов оптимизации производительности АП»). Для равномерного распределения пакетов по очередям можно применить ручную балансировку трафика.

Для балансировки поступающего трафика необходимо воспользоваться командой ethtool.

В файл /etc/rc.local.inc (с его содержимым можно ознакомиться в главе «Конфигурирование количества очередей на сетевой карте»), помимо выставления двух очередей на интерфейсах, необходимо добавить строки с командами ethtool --config-ntuple <...>. Так, например, если LAN-интерфейс – это eth13 и поступающие на него пакеты имеют destination-адреса 10.1.1.1 и 10.2.2.1, а WAN-интерфейс – это eth1 и поступающие на него пакеты имеют destination-адреса 192.168.2.127 и 192.168.2.128, то файл /etc/rc.local.inc должен иметь вид:

wan_if=eth1

lan_if=eth13

QNUM=2

 

for phys_iface in $(ls /sys/class/net | grep -P "^eth\d+$")

do

    echo Setting combined queue to $QNUM on $phys_iface ...

    ethtool -L $phys_iface combined $QNUM

done

 

ethtool -K $wan_if ntuple on

ethtool -K $lan_if ntuple on

 

ethtool --config-ntuple $wan_if flow-type ip4 dst-ip 192.168.2.127 action 0 loc 100

ethtool --config-ntuple $wan_if flow-type ip4 dst-ip 192.168.2.128 action 1 loc 101

 

ethtool --config-ntuple $lan_if flow-type ip4 dst-ip 10.1.1.1 action 0 loc 102

ethtool --config-ntuple $lan_if flow-type ip4 dst-ip 10.2.2.1 action 1 loc 103

·         «action 0» – очередь под номером 0;

·         «ip4» – название протокола;

·         «loc 100» – номер правила на интерфейсе.

Пакеты, поступающие на интерфейс eth13 (LAN-интерфейс) и имеющие destination-адрес 10.1.1.1, будут отправлены в нулевую очередь, а пакеты, имеющие destination-адрес 10.2.2.1, будут отправлены в первую очередь. Аналогичная настройка происходит на интерфейсе eth13. Пакеты также можно балансировать при помощи source адресов (src-ip).

Подробнее ознакомиться с правилами распределения пакетов при помощи команды ethtool можно, используя мануал: man ethtool

Для просмотра настроенных правил для очередей на интерфейсе можно воспользоваться командой:

root@Gate7000HE:~# ethtool -n eth13

2 RX rings available

Total 2 rules

 

Filter: 100

        Rule Type: Raw IPv4

        Src IP addr: 0.0.0.0 mask: 255.255.255.255

        Dest IP addr: 10.1.1.1 mask: 0.0.0.0

        TOS: 0x0 mask: 0xff

        Protocol: 0 mask: 0xff

        L4 bytes: 0x0 mask: 0xffffffff

        Action: Direct to queue 0

 

Filter: 101

        Rule Type: Raw IPv4

        Src IP addr: 0.0.0.0 mask: 255.255.255.255

        Dest IP addr: 10.2.2.1 mask: 0.0.0.0

        TOS: 0x0 mask: 0xff

        Protocol: 0 mask: 0xff

        L4 bytes: 0x0 mask: 0xffffffff

        Action: Direct to queue 1

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

root@Gate7000HE:~# ethtool -N eth13 delete 100

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

Параметр драйвера Продукта pq_wait_cycles

Параметр pq_wait_cycles задает количество холостых попыток рабочих потоков драйвера Продукта для ожидания получения сетевого пакета перед тем, как этот поток «уснёт». Так как холостые попытки потребляют процессорное время, то в том случае, если через драйвер Продукта проходит небольшой объем сетевого трафика, - полезная производительность ядра, на котором выполняется рабочий поток, будет расходоваться на холостые попытки. Именно этим и обусловлены неточные показания загрузки ядер процессора при малых и средних объемах трафика.

Если значение pq_wait_cycles выставить в 1, то количество холостых попыток будет равно 1 и, следовательно, загруженность ядер процессора будет отображаться верно. Но, если трафик, проходящий через драйвер Продукта, имеет неравномерный характер, то производительность драйвера может снизиться. Это происходит в силу того, что в один момент времени может прийти большое количество сетевых пакетов, а часть рабочих потоков «спят» и требуется некоторое время на их «пробуждение». Из-за эффекта «пробуждения» рабочих потоков увеличится время обработки пакетов и, возможно, будут потери пакетов.

Значение pq_wait_cycles может быть подобрано опытным путем при одинаковых условиях эксперимента (тип трафика). Нужно отдавать предпочтение такому значению параметра pq_wait_cycles, при котором у вас наименьшее количество следующих ошибок в kstat_show:

·         tx errors

·         send queue overflows:

·         high priority packets dropped

·         low priority packets dropped

Суммарное значение данных ошибок не должно превышать 0.1% от общего трафика.

Если необходимо получать более точную информацию по загрузке ядер, то временно воспользуйтесь командой:

root@Gate7000HE:~# drv_mgr set pq_wait_cycles 1

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

root@Gate7000HE:~# drv_mgr show | grep pq_wait_cycles 

pq_wait_cycles           1

Без согласования с вендором менять значение параметра pq_wait_cycles не рекомендуется.     

Приложение

Конфигурации аппаратной платформы «С-Терра Шлюз» 7000HE на базе платформы Lanner FW-8894B с двумя процессорами «Intel Xeon 2643v4 3.40GHz»

lscpu

Architecture:          x86_64

CPU op-mode(s):        32-bit, 64-bit

Byte Order:            Little Endian

CPU(s):                24

On-line CPU(s) list:   0-23

Thread(s) per core:    2

Core(s) per socket:    6

Socket(s):             2

NUMA node(s):          2

Vendor ID:             GenuineIntel

CPU family:            6

Model:                 79

Model name:            Intel(R) Xeon(R) CPU E5-2643 v4 @ 3.40GHz

Stepping:              1

CPU MHz:               1861.450

CPU max MHz:           3700.0000

CPU min MHz:           1200.0000

BogoMIPS:              6784.43

Virtualization:        VT-x

L1d cache:             32K

L1i cache:             32K

L2 cache:              256K

L3 cache:              20480K

NUMA node0 CPU(s):     0-5,12-17

NUMA node1 CPU(s):     6-11,18-23

Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb invpcid_single ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdseed adx smap intel_pt xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts

Режим «шифрование на уровне L3»

Настройка распределения ядер

cat /etc/modprobe.d/vpndrvr.conf | grep cpu_distribution

options vpndrvr cpu_distribution=*:2/18

Настройка количества очередей на сетевой карте

cat /etc/rc.local.inc

QNUM=2

for phys_iface in $(ls /sys/class/net | grep -P "^eth\d+$")

do

    echo Setting combined queue to $QNUM on $phys_iface ...

    ethtool -L $phys_iface combined $QNUM

done

Настройка распределения ядер (расширенная настройка 4.3 FW, сборка 23955)

cat /etc/modprobe.d/vpndrvr.conf | grep cpu_distribution

options vpndrvr cpu_distribution=*:#0,1,6,7/#2~0,3~1,4~0,5~1,12~0,13~1,14~0,15~1,16~0,17~1,8~6,9~7,10~6,11~7,18~6,19~7,20~6,21~7,22~6,23~7

Настройка количества очередей на сетевой карте (расширенная настройка 4.3 FW, сборка 23955)

cat /etc/rc.local.inc

QNUM=4

for phys_iface in $(ls /sys/class/net | grep -P "^eth\d+$")

do

    echo Setting combined queue to $QNUM on $phys_iface ...

    ethtool -L $phys_iface combined $QNUM

done

Режим «шифрование на уровне L2»

Настройка распределения ядер

cat /etc/modprobe.d/vpndrvr.conf | grep cpu_distribution

options vpndrvr cpu_distribution=*:2/18

Настройка количества очередей на сетевой карте

cat /etc/rc.local.inc

QNUM=2

for phys_iface in $(ls /sys/class/net | grep -P "^eth\d+$")

do

    echo Setting combined queue to $QNUM on $phys_iface ...

    ethtool -L $phys_iface combined $QNUM

done

Настройка распределения ядер (расширенная настройка 4.3 FW, сборка 23955)

options vpndrvr cpu_distribution=*:#0,1,6,7/#2~0,3~1,4~0,5~1,12~0,13~1,14~0,15~1,8~6,9~7,10~6,11~7,18~6,19~7,20~6,21~7

Настройка количества очередей на сетевой карте (расширенная настройка 4.3 FW, сборка 23955)

cat /etc/rc.local.inc

QNUM=4

for phys_iface in $(ls /sys/class/net | grep -P "^eth\d+$")

do

    echo Setting combined queue to $QNUM on $phys_iface ...

    ethtool -L $phys_iface combined $QNUM

done

Настройка туннельных интерфейсов (расширенная настройка 4.3 FW, сборка 23955)

cat /opt/l2svc/etc/tap* | grep bind

bind_to_core_id 16

bind_to_core_id 17

bind_to_core_id 22

bind_to_core_id 23

Глобальные настройки сервиса l2svc

cat /opt/l2svc/etc/global.cfg

...

L2VPN_CORE_COUNT="4"

BOND_MODE="balance-xor"

BOND_MIIMON="100"

BOND_XMIT_HASH_POLICY="layer2+3"

Режим «Межсетевое экранирование»

Настройка распределения ядер (расширенная настройка 4.3 FW, сборка 23955)

cat /etc/modprobe.d/vpndrvr.conf | grep cpu_distribution

options vpndrvr cpu_distribution=*:#0,1,2,3,4,5,6,7,8,9,10,11/#12~0,13~1,14~2,15~3,16~4,17~5,18~6,19~7,20~8,21~9,22~10,23~11

Настройка количества очередей на сетевой карте (расширенная настройка 4.3 FW, сборка 23955)

cat /etc/rc.local.inc

QNUM=12

for phys_iface in $(ls /sys/class/net | grep -P "^eth\d+$")

do

    echo Setting combined queue to $QNUM on $phys_iface ...

    ethtool -L $phys_iface combined $QNUM

done

Конфигурации аппаратной платформы «С-Терра Шлюз» 8000HE (на базе платформы Lanner FW-8894B с двумя процессорами «Intel Xeon 2699v4 2.20GHz»)

lscpu 

Architecture:          x86_64

CPU op-mode(s):        32-bit, 64-bit

Byte Order:            Little Endian

CPU(s):                56

On-line CPU(s) list:   0-55

Thread(s) per core:    2

Core(s) per socket:    14

Socket(s):             2

NUMA node(s):          2

Vendor ID:             GenuineIntel

CPU family:            6

Model:                 79

Model name:            Intel(R) Xeon(R) CPU E5-2690 v4 @ 2.60GHz

Stepping:              1

CPU MHz:               1545.971

CPU max MHz:           3500.0000

CPU min MHz:           1200.0000

BogoMIPS:              5187.95

Virtualization:        VT-x

L1d cache:             32K

L1i cache:             32K

L2 cache:              256K

L3 cache:              35840K

NUMA node0 CPU(s):     0-13,28-41

NUMA node1 CPU(s):     14-27,42-55

Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb invpcid_single ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdseed adx smap intel_pt xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts

Режим «шифрование на уровне L3»

Настройка распределения ядер

cat /etc/modprobe.d/vpndrvr.conf | grep cpu_distribution

options vpndrvr cpu_distribution=*:2/26

Настройка количества очередей на сетевой карте

cat /etc/rc.local.inc

QNUM=2

for phys_iface in $(ls /sys/class/net | grep -P "^eth\d+$")

do

    echo Setting combined queue to $QNUM on $phys_iface ...

    ethtool -L $phys_iface combined $QNUM

done

Режим «шифрование на уровне L2»

Настройка распределения ядер

cat /etc/modprobe.d/vpndrvr.conf | grep cpu_distribution

options vpndrvr cpu_distribution=*:2/26

Настройка количества очередей на сетевой карте

cat /etc/rc.local.inc

QNUM=2

for phys_iface in $(ls /sys/class/net | grep -P "^eth\d+$")

do

    echo Setting combined queue to $QNUM on $phys_iface ...

    ethtool -L $phys_iface combined $QNUM

done

Глобальные настройки сервиса l2svc

cat /opt/l2svc/etc/global.cfg

...

L2VPN_CORE_COUNT="28"

BOND_MODE="balance-xor"

BOND_MIIMON="100"

BOND_XMIT_HASH_POLICY="layer2+3"

...

Конфигурации аппаратной платформы «С-Терра Шлюз» 8000HE (на базе платформы Aquarius T50 с двумя процессорами «Intel Xeon Gold 6226R 2.90GHz»)

lscpu

Architecture:            x86_64

  CPU op-mode(s):        32-bit, 64-bit

  Address sizes:         46 bits physical, 48 bits virtual

  Byte Order:            Little Endian

CPU(s):                  64

  On-line CPU(s) list:   0-63

Vendor ID:               GenuineIntel

  BIOS Vendor ID:        Intel(R) Corporation

  Model name:            Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz

    BIOS Model name:     Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz  CPU @ 2.9GHz

    BIOS CPU family:     179

    CPU family:          6

    Model:               85

    Thread(s) per core:  2

    Core(s) per socket:  16

    Socket(s):           2

    Stepping:            7

    CPU(s) scaling MHz:  32%

    CPU max MHz:         3900.0000

    CPU min MHz:         1200.0000

    BogoMIPS:            5800.00

    Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon

                         pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe

                          popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single intel_ppin ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_s

                         hadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm mpx rdt_a avx512f avx512dq rdseed adx smap clflushopt clwb intel_pt avx512cd avx51

                         2bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req pku ospke avx512_vnni

                         md_clear flush_l1d arch_capabilities

Режим «шифрование на уровне L3»

Настройка распределения ядер (расширенная настройка 4.3 FW, сборка 23955)

cat /etc/modprobe.d/vpndrvr.conf | grep cpu_distribution

options vpndrvr cpu_distribution=*:#0,1,2,3,4,5,6,7,16,17,18,19,20,21,22,23/#8~0,9~1,10~2,11~3,12~4,13~5,14~6,15~7,32~0,33~1,34~2,35~3,36~4,37~5,38~6,39~7,40~0,41~1,42~2,43~3,44~4,45~5,46~6,47~7,24~16,25~17,26~18,27~19,28~20,29~21,30~22,31~23,48~16,49~17,50~18,51~19,52~20,53~21,54~22,55~23,56~16,57~17,58~18,59~19,60~20,61~21,62~22,63~23

Настройка количества очередей на сетевой карте (расширенная настройка 4.3 FW, сборка 23955)

cat /etc/rc.local.inc

QNUM=16

for phys_iface in $(ls /sys/class/net | grep -P "^eth\d+$")

do

    echo Setting combined queue to $QNUM on $phys_iface ...

    ethtool -L $phys_iface combined $QNUM

done

Режим «шифрование на уровне L2»

Настройка распределения ядер (расширенная настройка 4.3 FW, сборка 23955)

cat /etc/modprobe.d/vpndrvr.conf | grep cpu_distribution

options vpndrvr cpu_distribution=*:#0,1,2,3,4,5,6,7,16,17,18,19,20,21,22,23/#8~0,9~1,10~2,11~3,12~4,13~5,14~6,15~7,32~0,33~1,34~2,35~3,36~4,37~5,38~6,39~7,40~0,41~1,42~2,43~3,44~4,45~5,46~6,47~7,24~16,25~17,26~18,27~19,28~20,29~21,30~22,31~23,48~16,49~17,50~18,51~19,52~20,53~21,54~22,55~23,56~16,57~17,58~18,59~19,60~20,61~21,62~22,63~23

Настройка количества очередей на сетевой карте (расширенная настройка 4.3 FW, сборка 23955)

cat /etc/rc.local.inc

QNUM=16

for phys_iface in $(ls /sys/class/net | grep -P "^eth\d+$")

do

    echo Setting combined queue to $QNUM on $phys_iface ...

    ethtool -L $phys_iface combined $QNUM

done

Глобальные настройки сервиса l2svc

cat /opt/l2svc/etc/global.cfg

...

L2VPN_CORE_COUNT="16"

BOND_MODE="balance-xor"

BOND_MIIMON="100"

BOND_XMIT_HASH_POLICY="layer2+3"

...

Режим «Межсетевое экранирование»

Настройка распределения ядер (расширенная настройка 4.3 FW, сборка 23955)

cat /etc/modprobe.d/vpndrvr.conf | grep cpu_distribution

options vpndrvr cpu_distribution= *:#0,1,2,3,4,5,6,7,16,17,18,19,20,21,22,23/#8~0,9~1,10~2,11~3,12~4,13~5,14~6,15~7,32~0,33~1,34~2,35~3,36~4,37~5,38~6,39~7,40~0,41~1,42~2,43~3,44~4,45~5,46~6,47~7,24~16,25~17,26~18,27~19,28~20,29~21,30~22,31~23,48~16,49~17,50~18,51~19,52~20,53~21,54~22,55~23,56~16,57~17,58~18,59~19,60~20,61~21,62~22,63~23

Настройка количества очередей на сетевой карте (расширенная настройка 4.3 FW, сборка 23955)

cat /etc/rc.local.inc

QNUM=16

for phys_iface in $(ls /sys/class/net | grep -P "^eth\d+$")

do

    echo Setting combined queue to $QNUM on $phys_iface ...

    ethtool -L $phys_iface combined $QNUM

done