| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
| dpi:dpi_components:platform:dpi_config [2026/05/27 15:36] – [dpdk_engine=7: Явное указание диспетчеров] elena.krasnobryzh | dpi:dpi_components:platform:dpi_config [2026/06/03 11:10] (текущий) – [dpdk_engine=7: Явное указание диспетчеров] elena.krasnobryzh |
|---|
| <note important>Данный ''dpdk_engine'' доступен с версии 14.2!</note> | <note important>Данный ''dpdk_engine'' доступен с версии 14.2!</note> |
| |
| Данный движок поддерживает гетерогенные конфигурации, когда в одном кластере находятся порты разного типа — например, in-dev 100G порт, out-dev — несколько 10G портов. | Данный движок позволяет явно задавать, какие порты обслуживает каждый диспетчер. Он предназначен для сложных и гетерогенных конфигураций, когда стандартные схемы распределения диспетчеров не подходят. Например, когда в одном кластере используются порты различной производительности (100G, 40G, 10G) или требуется индивидуальная настройка параметров обработки для отдельных групп портов. |
| |
| Диспетчеры задаются в опциях ''dpdk_dispatch'': | Количество диспетчеров определяется числом параметров ''dpdk_dispatch''. Если для диспетчера задан параметр ''rss=N'', создается N диспетчеров — по одному на каждую RX-очередь. |
| <code>dpdk_dispatch=<список-портов>[;params]*</code> | |
| |
| Значения: | Для каждого диспетчера обязательно указывается используемый ''mempool''. Размер и количество ''mempool'' задаются независимо и могут различаться для разных диспетчеров. |
| * ''<Список-портов>'' задает, какие порты обслуживает данный диспетчер | |
| * ''params'' — дополнительные опции данного диспетчера. Доступные опции: | |
| * ''rss=N'' — включение RSS на всех портах данного диспетчера; будет создано N диспетчеров — по одному на каждую rx-очередь. | |
| * ''mempool_size=N'' — размер ''mbuf_pool'' для данного диспетчера. Каждый ''dpdk_dispatch'' имеет свой mempool, размер пулов может быть разным для разных ''dpdk_dispatch''. | |
| |
| | Движок является универсальным и позволяет реализовать все схемы распределения диспетчеров, поддерживаемые другими значениями ''dpdk_engine''. |
| |
| Опций ''dpdk_dispatch'' может быть много, каждая описывает отдельный диспетчер (или группу диспетчеров, если задано rss). Каждый порт кластера должен входить ровно в один параметр ''dpdk_dispatch''. Для on-stick в ''dpdk_dispatch'' описывается **базовый** физический порт, а не on-stick порты, основанные на нем. | Диспетчеры задаются параметрами ''dpdk_dispatch''. |
| |
| Фатальными ошибками конфигурации считаются следующие случаи: | Фатальными ошибками конфигурации считаются следующие случаи: |
| * порт кластера не входит ни в какой ''<список-портов>'' параметра ''dpdk_dispatch'' | * порт кластера не входит ни в какой ''<список-портов>'' параметра ''dpdk_dispatch'' |
| * порт кластера входит в ''<список-портов>'' нескольких различных параметров ''dpdk_dispatch'' | * порт кластера входит в ''<список-портов>'' нескольких различных параметров ''dpdk_dispatch'' |
| * в ''<списке-портов>'' параметра ''dpdk_dispatch'' перечислены порты из разных кластеров, — каждый диспетчер должен обслуживать порты только одного кластера | * в ''<списке-портов>'' параметра ''dpdk_dispatch'' перечислены порты из разных кластеров — каждый диспетчер должен обслуживать порты только одного кластера |
| |
| Данный движок является универсальным — через него могут быть выражены все остальные движки, например: | Данный движок является универсальным — через него могут быть выражены все остальные движки, например: |
| dpdk_dispatch=port1,port2 | dpdk_dispatch=port1,port2 |
| dpdk_dispatch=port3,port4 | dpdk_dispatch=port3,port4 |
| dpdk_dispatch=2: диспетчер на направление c поддержкой RSS | |
| | dpdk_engine=2: диспетчер на направление c поддержкой RSS |
| dpdk_rss=4 | dpdk_rss=4 |
| in_dev=port1:port2 | in_dev=port1:port2 |
| out_dev=port3:port4 | out_dev=port3:port4 |
| dpdk_dispatch=port1,port3;rss=4 | dpdk_dispatch=port1,port3;rss=4 |
| dpdk_dispatch=port2,port4;rss=4</code> | dpdk_dispatch=port2,port4;rss=4 |
| | </code> |
| Для диспетчера необходимо указывать используемый ''mempool''. | Для диспетчера необходимо указывать используемый ''mempool''. |
| |
| * **Описатель ''mempool''** — только для ''dpdk_engine=7''\\ Формат: <code>dpdk_mempool=name=<name>;size=N</code> | * **Описатель ''mempool''** — только для ''dpdk_engine=7''\\ Формат: <code>dpdk_mempool=name=<name>;size=N</code> |
| * ''name'' задает имя ''mempool'' (max 15 символов) | * ''name'' задает имя ''mempool'' (максимум 15 символов) |
| * ''size'' задает размер (число элементов) ''mempool''\\ Оба параметра являются обязательными\\ \\ Опций ''dpdk_mempool'' может быть много, каждая описывает отдельный ''mempool'' <code>dpdk_mempool=...</code> | * ''size'' задает размер (число элементов) ''mempool'' |
| * **Описатель диспетчера** — только для ''dpdk_engine=7''\\ Формат:<code>dpdk_dispatch=<список-портов>;mempool=<имя>[;params]*</code> | * оба параметра являются обязательными\\ \\ Опций ''dpdk_mempool'' может быть несколько, каждая описывает отдельный ''mempool'': <code>dpdk_mempool=...</code> |
| * ''<Список-портов>'' задает, какие порты обслуживает данный диспетчер | * **''dpdk_max_memzone''** [cold] — устанавливает максимальное количество ''memzone'' в DPDK. По умолчанию DPDK использует ограничение на количество ''memzone'' (обычно 5120, зависит от версии DPDK). Увеличение значения может потребоваться для крупных конфигураций с большим количеством сетевых карт и ''mempool''. |
| * ''params'' — дополнительные опции данного диспетчера. Доступные опции: | * ''0'' — использовать значение по умолчанию, заданное в DPDK\\ Если при запуске fastDPI возникает ошибка: ''Number of requested memzone segments exceeds maximum 5120'' следует увеличить значение параметра ''dpdk_max_memzone'' |
| * ''mempool=<имя>'' — задает имя ''mempool'' для данного диспетчера (обязательный параметр) | * **Описатель диспетчера** — только для ''dpdk_engine=7''\\ Формат: <code>dpdk_dispatch=<список-портов>;mempool=<имя>[;params]*</code> |
| * ''rss=N'' — включение RSS на всех портах данного диспетчера; будет создано N диспетчеров, по одному на каждую rx-очередь.\\ \\ Опций ''dpdk_dispatch'' может быть много, каждая описывает отдельный диспетчер (или группу диспетчеров, если задано ''rss'')<code>dpdk_dispatch=...</code> | * ''<список-портов>'' задает, какие порты обслуживает данный диспетчер |
| | * ''mempool=<имя>'' задает имя ''mempool'' для данного диспетчера (обязательный параметр) |
| | * ''rss=N'' включает RSS на всех портах данного диспетчера; будет создано N диспетчеров — по одному на каждую RX-очередь\\ \\ Опций ''dpdk_dispatch'' может быть несколько, каждая описывает отдельный диспетчер (или группу диспетчеров, если задан ''rss''): <code>dpdk_dispatch=...</code> |