Настройка DPDK интерфейсов [Документация VAS Experts]

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
dpi:dpi_components:platform:dpi_config [2025/12/08 12:09] – [dpdk_engine=6: RSS диспетчеров на мост] elena.krasnobryzhdpi:dpi_components:platform:dpi_config [2026/06/03 11:10] (текущий) – [dpdk_engine=7: Явное указание диспетчеров] elena.krasnobryzh
Строка 12: Строка 12:
  
 ===== Конфигурирование портов ===== ===== Конфигурирование портов =====
 +
 +<note important>Обратите внимание, что сетевые карты Mellanox нельзя переводить под DPDK с помощью утилиты driverctl — на них драйвер устанавливается иным способом. Также они остаются под управлением системы, в связи с чем интерфейсы будут отображаться в выводе утилит ip/ipconfig.
 +При необходимости установить драйвер для поддержки DPDK на сетевые карты Mellanox, необходимо [[dpi:techsupport_info|обратиться в техническую поддержку]].</note>
  
 Сетевые карты, с которыми будет работать СКАТ, выведены из-под управления операционной системы и поэтому как Ethernet устройства для нее не видны.  Сетевые карты, с которыми будет работать СКАТ, выведены из-под управления операционной системы и поэтому как Ethernet устройства для нее не видны. 
Строка 384: Строка 387:
   * TX queue count = число потоков обработки. Потоки обработки пишут напрямую каждый в свою TX-очередь карты.   * TX queue count = число потоков обработки. Потоки обработки пишут напрямую каждый в свою TX-очередь карты.
  
 +==== dpdk_engine=7: Явное указание диспетчеров ====
 +<note important>Данный ''dpdk_engine'' доступен с версии 14.2!</note>
 +
 +Данный движок позволяет явно задавать, какие порты обслуживает каждый диспетчер. Он предназначен для сложных и гетерогенных конфигураций, когда стандартные схемы распределения диспетчеров не подходят. Например, когда в одном кластере используются порты различной производительности (100G, 40G, 10G) или требуется индивидуальная настройка параметров обработки для отдельных групп портов.
 +
 +Количество диспетчеров определяется числом параметров ''dpdk_dispatch''. Если для диспетчера задан параметр ''rss=N'', создается N диспетчеров — по одному на каждую RX-очередь.
 +
 +Для каждого диспетчера обязательно указывается используемый ''mempool''. Размер и количество ''mempool'' задаются независимо и могут различаться для разных диспетчеров.
 +
 +Движок является универсальным и позволяет реализовать все схемы распределения диспетчеров, поддерживаемые другими значениями ''dpdk_engine''.
 +
 +Диспетчеры задаются параметрами ''dpdk_dispatch''.
 +
 +Фатальными ошибками конфигурации считаются следующие случаи:
 +  * порт кластера не входит ни в какой ''<список-портов>'' параметра ''dpdk_dispatch''
 +  * порт кластера входит в ''<список-портов>'' нескольких различных параметров ''dpdk_dispatch''
 +  * в ''<списке-портов>'' параметра ''dpdk_dispatch'' перечислены порты из разных кластеров — каждый диспетчер должен обслуживать порты только одного кластера
 +
 +Данный движок является универсальным — через него могут быть выражены все остальные движки, например:
 +<code>
 +      dpdk_engine=0: один диспетчер на все порты
 +               in_dev=port1:port2
 +              out_dev=port3:port4
 +              dpdk_dispatch=port1,port2,port3,port4
 +
 +      dpdk_engine=1: диспетчер на направление
 +               in_dev=port1:port2
 +              out_dev=port3:port4
 +              dpdk_dispatch=port1,port2
 +              dpdk_dispatch=port3,port4
 +
 +      dpdk_engine=2: диспетчер на направление c поддержкой RSS
 +              dpdk_rss=4
 +               in_dev=port1:port2
 +              out_dev=port3:port4
 +              dpdk_dispatch=port1,port2;rss=4
 +              dpdk_dispatch=port3,port4;rss=4
 +
 +      dpdk_engine=3: диспетчер на мост
 +               in_dev=port1:port2
 +              out_dev=port3:port4
 +              dpdk_dispatch=port1,port3
 +              dpdk_dispatch=port2,port4
 +
 +      dpdk_engine=4: диспетчер на порт
 +               in_dev=port1:port2
 +              out_dev=port3:port4
 +              dpdk_dispatch=port1
 +              dpdk_dispatch=port2
 +              dpdk_dispatch=port3
 +              dpdk_dispatch=port4
 +
 +      dpdk_engine=6: диспетчер на мост с поддержкой RSS
 +              dpdk_rss=4
 +               in_dev=port1:port2
 +              out_dev=port3:port4
 +              dpdk_dispatch=port1,port3;rss=4
 +              dpdk_dispatch=port2,port4;rss=4
 +</code>
 +
 +Для диспетчера необходимо указывать используемый ''mempool''.
 +
 +  * **Описатель ''mempool''** — только для ''dpdk_engine=7''\\ Формат: <code>dpdk_mempool=name=<name>;size=N</code>
 +    * ''name'' задает имя ''mempool'' (максимум 15 символов)
 +    * ''size'' задает размер (число элементов) ''mempool''
 +    * оба параметра являются обязательными\\ \\ Опций ''dpdk_mempool'' может быть несколько, каждая описывает отдельный ''mempool'': <code>dpdk_mempool=...</code>
 +  * **''dpdk_max_memzone''** [cold] — устанавливает максимальное количество ''memzone'' в DPDK. По умолчанию DPDK использует ограничение на количество ''memzone'' (обычно 5120, зависит от версии DPDK). Увеличение значения может потребоваться для крупных конфигураций с большим количеством сетевых карт и ''mempool''.
 +    * ''0'' — использовать значение по умолчанию, заданное в DPDK\\ Если при запуске fastDPI возникает ошибка: ''Number of requested memzone segments exceeds maximum 5120'' следует увеличить значение параметра ''dpdk_max_memzone''
 +  * **Описатель диспетчера** — только для ''dpdk_engine=7''\\ Формат: <code>dpdk_dispatch=<список-портов>;mempool=<имя>[;params]*</code>
 +    * ''<список-портов>'' задает, какие порты обслуживает данный диспетчер
 +    * ''mempool=<имя>'' задает имя ''mempool'' для данного диспетчера (обязательный параметр)
 +    * ''rss=N'' включает RSS на всех портах данного диспетчера; будет создано N диспетчеров — по одному на каждую RX-очередь\\ \\ Опций ''dpdk_dispatch'' может быть несколько, каждая описывает отдельный диспетчер (или группу диспетчеров, если задан ''rss''): <code>dpdk_dispatch=...</code>