Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
dpi:dpi_components:platform:dpi_config [2020/09/21 07:11] – ↷ Страница перемещена из dpi:dpi_options:dpi_divert_spec:star:dpi:dpi_components:platform:dpi_config в dpi:dpi_components:platform:dpi_config lexx26 | dpi:dpi_components:platform:dpi_config [2024/09/26 15:29] (текущий) – внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Настройка ====== | + | ====== Настройка |
- | {{indexmenu_n> | + | {{indexmenu_n> |
- | Настройки DPI платформы находятся в файле / | + | |
- | ==Конфигурирование используемых | + | [[https:// |
- | интерфейсы конфигурируются парами "вход" | + | |
- | должен быть обращен во внутреннюю сеть оператора, а " | + | |
- | прозрачный на уровне L2. Доступные для | + | |
- | ==Пример 1== | + | ===== Подготовка системы ===== |
- | Создает следующие пары | + | |
- | dna0 <--> dna1\\ | + | Начальная установка DPI делается техподдержкой VAS Experts, просьба не пытаться делать начальную установку самостоятельно, так как |
- | dna2 <--> dna3\\ | + | потом может потребоваться проверить все сделанные вами шаги, что увеличивает трудоемкость работ ТП. |
- | dna4 <--> dna5\\ | + | |
+ | Далее вы сможете самостоятельно добавить или удалить сетевые порты и изменить конфигурацию. | ||
+ | |||
+ | ===== Конфигурирование портов ===== | ||
+ | |||
+ | Сетевые карты, с которыми будет работать СКАТ, выведены из-под управления операционной системы и поэтому как Ethernet устройства для нее не видны. | ||
+ | DPDK адресует Ethernet устройства по их PCI идентификаторам, | ||
< | < | ||
- | in_dev=dna0:dna2:dna4 | + | lspci -D|grep Eth |
- | out_dev=dna1:dna3:dna5 | + | |
+ | 0000:04:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) | ||
+ | 0000:04:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) | ||
</ | </ | ||
+ | Эта команда выведет список всех PCI-устройств типа ethernet. Каждая строка начинается с системного идентификатора PCI-устройства, | ||
- | ==Пример 2== | + | Список карт в режиме |
- | Полноценный файл конфигурации DPI для фильтрации по реестру Роскомнадзора и Минюста: | + | |
< | < | ||
- | in_dev=dna0 | + | 0000: |
- | out_dev=dna1 | + | 0000: |
- | federal_black_list=true | + | |
</ | </ | ||
- | В процессе установки системы могли быть сделаны другие | + | При необходимости карты можно вывести из режима DPDK [[dpi: |
- | и можно | + | |
+ | Предварительно остановить процесс Fastdpi | ||
< | < | ||
- | #Scale factor is about 1 for every 1 Gigabit of bandwidth | + | service fastdpi stop |
- | scale_factor=10 | + | </ |
- | timeout_check_dev=0 | + | |
- | #FDPI Control | + | < |
- | ctrl_port=29000 | + | driverctl unset-override 0000: |
- | ctrl_dev=lo | + | driverctl unset-override 0000: |
+ | </ | ||
- | #Turn on UDP detection | + | После работ со штатных драйвером не забудьте вернуть их обратно под управление DPDK [[dpi: |
- | only_tcp=0 | + | < |
+ | driverctl -v set-override 0000: | ||
+ | driverctl -v set-override 0000: | ||
+ | </ | ||
+ | <note important> | ||
+ | <note important> | ||
+ | driverctl list-overrides | ||
+ | 0000: | ||
+ | В этом случае рекомендуется перейти на использование драйвера vfio-pci | ||
+ | для чего выполнить команды | ||
+ | < | ||
+ | driverctl -v set-override 0000:04:00.0 vfio-pci</ | ||
+ | для всех устройств из списка возращаемого list-overrides. | ||
+ | Установка '' | ||
+ | </ | ||
- | #Turn on UDR | + | ===== Конфигурирование СКАТ ===== |
- | udr=1 | + | После того, как система настроена для работы с DPDK, можно приступать к конфигурированию СКАТ. Интерфейсы конфигурируются парами «вход»-«выход» (для последующего удобства конфигурирования опций интерфейс «вход» должен быть обращен во внутреннюю сеть оператора, |
+ | < | ||
+ | # Вход - порт 41:00.0 | ||
+ | in_dev=41-00.0 | ||
+ | # Выход - порт 41:00.1 | ||
+ | out_dev=41-00.1 | ||
</ | </ | ||
+ | Такая конфигурация задает единственный мост 41-00.0 ←→ 41-00.1 \\ | ||
+ | Можно указывать группу интерфейсов через ':' | ||
+ | < | ||
+ | in_dev=41-00.0: | ||
+ | out_dev=41-00.1: | ||
+ | </ | ||
+ | Эта группа образует следующие пары (мосты): | ||
+ | 41-00.0 ←→ 41-00.1 \\ | ||
+ | 01-00.0 ←→ 01-00.1 \\ | ||
+ | 05-00.0 ←→ 05-00.1 \\ | ||
+ | В парах должны быть устройства одинаковой скорости; | ||
+ | |||
+ | Maксимальный размер ethernet-пакета на девайсах задается опцией '' | ||
+ | |||
+ | ===== Задание псевдонимов девайсов ===== | ||
+ | В СКАТ 9.5.3 появилась возможность задавать псевдонимы (alias) девайсов. Вызвано это тем, что DPDK поддерживает большое количество девайсов, | ||
+ | |||
+ | Суть псевдонима очень проста: | ||
+ | |||
+ | Каждый псевдоним задается отдельным параметром '' | ||
+ | < | ||
+ | dpdk_device=alias: | ||
+ | </ | ||
+ | здесь: | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | Например: | ||
+ | < | ||
+ | # eth1 - псевдоним PCI-девайса 41:00.0 | ||
+ | dpdk_device=eth1: | ||
+ | # eth2 - псевдоним PCI-девайса 41:00.1 | ||
+ | dpdk_device=eth2: | ||
+ | |||
+ | in_dev=eth1 | ||
+ | out_dev=eth2 | ||
+ | </ | ||
+ | Это описание эквивалентно следующему: | ||
+ | < | ||
+ | in_dev=41-00.0 | ||
+ | out_dev=41-00.1 | ||
+ | </ | ||
+ | Отметим, | ||
+ | |||
+ | <note tip> | ||
+ | |||
+ | Если требуется подключить Hyper-V девайсы (а это не PCI, а VMbus-девайсы), | ||
+ | < | ||
+ | dpdk_device=subs1: | ||
+ | dpdk_device=subs2: | ||
+ | dpdk_device=inet1: | ||
+ | dpdk_device=inet2: | ||
+ | in_dev=subs1: | ||
+ | out_dev=inet1: | ||
+ | </ | ||
+ | Здесь мы не только задаем псевдоним, | ||
+ | |||
+ | ===== Конфигурирование в Hyper-V ===== | ||
+ | Начиная с версии 9.5.3, СКАТ поддерживает работу в виртуальной машине Hyper-V. | ||
+ | На гостевой [[veos: | ||
+ | < | ||
+ | # Поддержка multi-queue - необходима для СКАТ | ||
+ | dnf install kernel-modules-extra | ||
+ | </ | ||
+ | <note important> | ||
+ | |||
+ | Девайсы в Hyper-V являются VMBus-, а не PCI-девайсами, | ||
+ | Каждый девайс (интерфейс) идентифицируется своим уникальным идентификатором UUID, поэтому сначала нужно узнать UUID всех интерфейсов, | ||
+ | < | ||
+ | # переводим интерфейсы eth0 и eth2 в DPDK-режим | ||
+ | for DEV in eth0 eth2 | ||
+ | do | ||
+ | # получаем UUID девайса | ||
+ | DEV_UUID=$(basename $(readlink / | ||
+ | # переводим в DPDK compatible mode | ||
+ | driverctl -b vmbus set-override $DEV_UUID uio_hv_generic | ||
+ | |||
+ | # Device appears in | ||
+ | # / | ||
+ | |||
+ | echo "$DEV uuid=$DEV_UUID" | ||
+ | done | ||
+ | </ | ||
+ | При необходимости интерфейс может быть переведен обратно в kernel-режим так: | ||
+ | < | ||
+ | ETH0_UUID=< | ||
+ | driverctl -b vmbus unset-override $ETH0_UUID | ||
+ | </ | ||
+ | |||
+ | Далее конфигурируем СКАТ — задаем девайсы в '' | ||
+ | < | ||
+ | # eth0 UUID=392b7b0f-dbd7-4225-a43f-4c926fc87e39 | ||
+ | dpdk_device=eth0: | ||
+ | # eth2 UUID=34f1cc16-4b3f-4d8a-b567-a0eb61dc2b78 | ||
+ | dpdk_device=eth2: | ||
+ | |||
+ | # далее везде используем псевдонимы eth0 и eth2 при указании девайсов | ||
+ | in_dev=eth0 | ||
+ | out_dev=eth2 | ||
+ | </ | ||
+ | |||
+ | ===== Кластеры ===== | ||
+ | DPDK-версия СКАТ поддерживает кластеризацию: | ||
+ | < | ||
+ | in_dev=41-00.0|01-00.0: | ||
+ | out_dev=41-00.1|01-00.1: | ||
+ | </ | ||
+ | Этот пример создает два кластера: | ||
+ | * кластер с мостом 41-00.0 ←→ 41-00.1 | ||
+ | * кластер с мостами 01-00.0 ←→ 01-00.1 и 05-00.0 ←→ 05-00.1 | ||
+ | Кластеры являются в большей мере наследием pf_ring-версии СКАТ: в pf_ring кластер является базовым понятием, | ||
+ | |||
+ | В DPDK кластеры также изолированы друг от друга, но в отличие от pf_ring здесь кластер - понятие во многом логическое, | ||
+ | <note tip> | ||
+ | Далее при описании конфигураций предполагается, | ||
+ | |||
+ | ===== Число ядер (потоков) ===== | ||
+ | Ядра CPU являются, | ||
+ | <note important> | ||
+ | Для работы СКАТу нужны следующие потоки: | ||
+ | * потоки обработки - обрабатывают входящие пакеты, | ||
+ | * потоки диспетчера - читают RX-очереди карты и раскидывают входящие пакеты по потокам обработки; | ||
+ | * служебные потоки - выполняют отложенные (продолжительные) действия, | ||
+ | * системное ядро - выделено для работы операционной системы. | ||
+ | Потоки обработки и диспетчера не могут располагаться на одном ядре. При старте СКАТ привязывает потоки к ядрам. | ||
+ | СКАТ по умолчанию выбирает число потоков-обработчиков в зависимости от скорости интерфейса: | ||
+ | 10G - 4 потока\\ | ||
+ | 25G - 8 потоков\\ | ||
+ | 40G, 50G, 56G - 16 потоков\\ | ||
+ | 100G - 32 потока\\ | ||
+ | Для группы число потоков равно сумме числа потоков для каждой пары; например, | ||
+ | < | ||
+ | # 41-00.x - 25G NIC | ||
+ | # 01-00.x - 10G NIC | ||
+ | in_dev=41-00.0: | ||
+ | out_dev=41-00.1: | ||
+ | </ | ||
+ | будет создано 12 потоков обработки (8 для 25G карты и 4 для 10G) | ||
+ | |||
+ | В fastdpi.conf можно явно указать число потоков на кластер с помощью параметра '' | ||
+ | < | ||
+ | # 41-00.x - 25G NIC | ||
+ | # 01-00.x - 10G NIC | ||
+ | in_dev=41-00.0: | ||
+ | out_dev=41-00.1: | ||
+ | |||
+ | num_threads=8 | ||
+ | </ | ||
+ | Такая конфигурация создаст 8 потоков обработки. | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | Кроме потоков-обработчиков, | ||
+ | Внутренняя архитектура работы с одним или множеством диспетчеров разительно отличается, | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | Далее подробно описываются все эти движки, | ||
+ | ==== Явная привязка к ядрам ==== | ||
+ | Можно задать в fastdpi.conf явную привязку потоков к ядрам. За это отвечают параметры: | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | Формат задания этих списков одинаков: | ||
+ | < | ||
+ | # 10G карты - 4 потока обработчика, | ||
+ | in_dev=01-00.0|02-00.0 | ||
+ | out_dev=01-00.1|02-00.1 | ||
+ | |||
+ | # Привязываем потоки обработки для кластера #1 к ядрам 2-5, диспетчер - к ядру 1 | ||
+ | # для кластера #2 к ядрам 7-10, диспетчер - к ядру 6 | ||
+ | engine_bind_cores=2: | ||
+ | rx_bind_core=1|6 | ||
+ | </ | ||
+ | Для бескластерного задания: | ||
+ | < | ||
+ | # 10G карты - 4 потока обработчика на карту | ||
+ | in_dev=01-00.0: | ||
+ | out_dev=01-00.1: | ||
+ | # 2 диспетчера (по направлениям) | ||
+ | dpdk_engine=1 | ||
+ | |||
+ | # Привязка потоков обработчиков и диспетчеров | ||
+ | engine_bind_cores=3: | ||
+ | rx_bind_core=1: | ||
+ | </ | ||
+ | |||
+ | Как уже отмечалось, | ||
+ | <note tip> | ||
+ | <note important> | ||
+ | ===== Загрузка потока диспетчера ===== | ||
+ | Значение загрузки потока диспетчера, | ||
+ | <note tip> | ||
+ | < | ||
+ | top -H -p `pidof fastdpi` | ||
+ | </ | ||
+ | </ | ||
+ | Истинное состояние каждого диспетчера можно увидеть в fastdpi_stat.log, | ||
+ | < | ||
+ | [STAT ][2020/ | ||
+ | drop (worker queue full) | ||
+ | Cluster #0: | ||
+ | </ | ||
+ | здесь '' | ||
+ | |||
+ | Также хорошим индикатором, | ||
+ | * либо слишком мало потоков-обработчиков, | ||
+ | * либо трафик сильно перекошен и большинство пакетов попадает в один-два обработчика, | ||
+ | |||
+ | |||
+ | ==== dpdk_engine=0: | ||
+ | В этом режиме работы СКАТ создает один поток диспетчера на кластер. | ||
+ | Диспетчер читает входящие пакеты со всех '' | ||
+ | Подходит для 10G карт, выдерживает нагрузку до 20G и более (зависит от модели CPU и режима разбора туннелей [[dpi: | ||
+ | |||
+ | <note tip> | ||
+ | |||
+ | СКАТ конфигурирует карты следующим образом: | ||
+ | * RX queue count = 1 | ||
+ | * TX queue count = число потоков обработки. Потоки обработки пишут напрямую каждый в свою TX-очередь карты. | ||
+ | |||
+ | <note tip> | ||
+ | </ | ||
+ | ==== dpdk_engine=1: | ||
+ | В этом режиме создается два потока диспетчера: | ||
+ | Подходит для нагрузок свыше 20G (карты 25G, 40G). | ||
+ | <note tip> | ||
+ | |||
+ | СКАТ конфигурирует карты следующим образом: | ||
+ | * RX queue count = 1 | ||
+ | * TX queue count = число потоков обработки. Потоки обработки пишут напрямую каждый в свою TX-очередь карты. | ||
+ | ==== dpdk_engine=2: | ||
+ | В данном режиме задействуется RSS (receive side scaling) карты. | ||
+ | Значение RSS задается в fastdpi.conf параметром | ||
+ | < | ||
+ | dpdk_rss=2 | ||
+ | </ | ||
+ | Значение '' | ||
+ | Для каждого направления создается '' | ||
+ | <note tip> | ||
+ | Подходит для мощных карт 50G+ (то есть для СКАТ-100+). Если у вас 50G набрано из нескольких карт группировкой, | ||
+ | |||
+ | СКАТ конфигурирует карты следующим образом: | ||
+ | * RX queue count = '' | ||
+ | * TX queue count = число потоков обработки. Потоки обработки пишут напрямую каждый в свою TX-очередь карты. | ||
+ | ==== dpdk_engine=3: | ||
+ | Для каждого моста создается отдельный поток диспетчера. | ||
+ | Предназначен для конфигураций со множеством девайсов на входе и выходе: | ||
+ | < | ||
+ | in_dev=01-00.0: | ||
+ | out_dev=01-00.1: | ||
+ | dpdk_engine=3 | ||
+ | </ | ||
+ | Для данного примера создается три потока диспетчеров: | ||
+ | * для моста 01-00.0 <--> 01-00.1 | ||
+ | * для моста 02-00.0 <--> 02-00.1 | ||
+ | * для моста 03-00.0 <--> 03-00.1 | ||
+ | |||
+ | <note tip> | ||
+ | |||
+ | Данный движок предназначен для нескольких карт 25G/40G/50G в группе (то есть для СКАТ-100+) | ||
+ | |||
+ | СКАТ конфигурирует карты следующим образом: | ||
+ | * RX queue count = 1 | ||
+ | * TX queue count = число потоков обработки. Потоки обработки пишут напрямую каждый в свою TX-очередь карты. | ||
+ | ==== dpdk_engine=4: | ||
+ | Для каждого порта (девайса) создается отдельный поток диспетчера. | ||
+ | Предназначен для конфигураций со множеством девайсов на входе и выходе: | ||
+ | < | ||
+ | in_dev=01-00.0: | ||
+ | out_dev=01-00.1: | ||
+ | dpdk_engine=4 | ||
+ | </ | ||
+ | Для данного примера создается шесть потоков диспетчеров - для каждого девайса по диспетчеру. Очевидно, | ||
+ | |||
+ | <note tip> | ||
- | Другие | + | Данный движок предназначен |
- | Примечание:\\ | + | СКАТ конфигурирует карты следующим образом: |
- | in_dev | + | * RX queue count = 1 |
- | federal_black_list - горячий параметр\\ | + | * TX queue count = число |
- | Подробнее смотрите раздел [[: | + |