DPDK Interfaces Configuration [Документация VAS Experts]

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
en:dpi:dpi_components:platform:dpi_config [2025/07/22 15:11] elena.krasnobryzhen:dpi:dpi_components:platform:dpi_config [2026/06/03 11:33] (current) – [dpdk_engine=7: Explicit Dispatcher Configuration] elena.krasnobryzh
Line 11: Line 11:
  
 ===== Ports configuration ===== ===== Ports configuration =====
 +
 +<note important>
 +Please note that Mellanox network interface cards cannot be switched to DPDK using the driverctl utility — their driver is installed in a different way. They also remain under operating system control, therefore the interfaces will still appear in the output of ip/ipconfig utilities.  
 +If it is necessary to install a driver to support DPDK on Mellanox network cards, please [[en:dpi:techsupport_info|contact technical support]].
 +</note>
  
 The network cards that Stingray will work with are removed from the control of the operating system and therefore are not visible as Ethernet devices to the operating system.  The network cards that Stingray will work with are removed from the control of the operating system and therefore are not visible as Ethernet devices to the operating system. 
Line 359: Line 364:
  
 ==== dpdk_engine=6: RSS dispatchers per bridge ==== ==== dpdk_engine=6: RSS dispatchers per bridge ====
-<note important>This ''dpdk_engine'' is available since version 14.0!</note> +<note important>This ''dpdk_engine'' is available starting from version 14.0!</note> 
-A separate dispatcher thread is created for each port (device). +This engine is intended for configurations with multiple bridges (dev1:dev2:dev3:...) for 100G+ cards. 
-Designed for configurations with multiple input and output devices:+
 <code> <code>
 in_dev=41-00.0:02-00.0:c3-00.0:c1-00.0:04-00.0:04-00.1 in_dev=41-00.0:02-00.0:c3-00.0:c1-00.0:04-00.0:04-00.1
Line 377: Line 382:
 mem_http_parsers=512000 mem_http_parsers=512000
 </code> </code>
-In this example, six dispatcher threads are created — one per device. Obviously, if there is only one bridge, this engine is equivalent to ''dpdk_engine=1'' — one dispatcher per direction.+This example creates 24 dispatcher threads — 4 dispatchers per bridge.
  
-<note tip>Total number of required CPU cores equals the number of processing threads plus the number of ports</note>+<note tip> 
 +Total number of dispatchers = ''dpdk_rss'' * number of bridges.\\ 
 +For 100G+ NICs, with a ratio of 1 dispatcher per 10G, the minimum number of dispatchers is 10.\\ 
 +Starting from version 14.0, the maximum number of dispatchers is 32. 
 +</note> 
 + 
 + 
 +On-stick devices are supported.\\ 
 +SSG configures the cards as follows: 
 +  * RX queue count = ''dpdk_rss'' 
 +  * TX queue count = number of processing threads. Processing threads write directly to their own TX queue on the card. 
 + 
 +==== dpdk_engine=7: Explicit Dispatcher Configuration ==== 
 +<note important>This ''dpdk_engine'' is available starting from version 14.2!</note> 
 + 
 +This engine allows you to explicitly define which ports are served by each dispatcher. It is intended for complex and heterogeneous configurations where standard dispatcher distribution schemes are not suitable. For example, when a cluster contains ports with different performance characteristics (100G, 40G, 10G) or when individual processing parameters are required for specific groups of ports. 
 + 
 +The number of dispatchers is determined by the number of ''dpdk_dispatch'' parameters. If the ''rss=N'' parameter is specified for a dispatcher, N dispatchers will be created — one for each RX queue. 
 + 
 +A ''mempool'' must be specified for each dispatcher. The size and number of ''mempools'' are configured independently and may differ between dispatchers. 
 + 
 +This engine is universal and can be used to implement all dispatcher distribution schemes supported by other ''dpdk_engine'' values. 
 + 
 +Dispatchers are configured using ''dpdk_dispatch'' parameters. 
 + 
 +The following configuration errors are considered fatal: 
 +  * a cluster port is not included in any ''<port-list>'' of a ''dpdk_dispatch'' parameter 
 +  * a cluster port is included in the ''<port-list>'' of multiple ''dpdk_dispatch'' parameters 
 +  * the ''<port-list>'' of a ''dpdk_dispatch'' parameter contains ports from different clusters — each dispatcher must serve ports belonging to a single cluster only 
 + 
 +This engine is universal and can be used to express all other engines, for example: 
 +<code> 
 +      dpdk_engine=0: one dispatcher for all ports 
 +               in_dev=port1:port2 
 +              out_dev=port3:port4 
 +              dpdk_dispatch=port1,port2,port3,port4 
 + 
 +      dpdk_engine=1: dispatcher per direction 
 +               in_dev=port1:port2 
 +              out_dev=port3:port4 
 +              dpdk_dispatch=port1,port2 
 +              dpdk_dispatch=port3,port4 
 + 
 +      dpdk_engine=2: dispatcher per direction with RSS support 
 +              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: dispatcher per bridge 
 +               in_dev=port1:port2 
 +              out_dev=port3:port4 
 +              dpdk_dispatch=port1,port3 
 +              dpdk_dispatch=port2,port4 
 + 
 +      dpdk_engine=4: dispatcher per port 
 +               in_dev=port1:port2 
 +              out_dev=port3:port4 
 +              dpdk_dispatch=port1 
 +              dpdk_dispatch=port2 
 +              dpdk_dispatch=port3 
 +              dpdk_dispatch=port4 
 + 
 +      dpdk_engine=6: dispatcher per bridge with RSS support 
 +              dpdk_rss=4 
 +               in_dev=port1:port2 
 +              out_dev=port3:port4 
 +              dpdk_dispatch=port1,port3;rss=4 
 +              dpdk_dispatch=port2,port4;rss=4 
 +</code>
  
-This engine is designed for configurations with many bridges (dev1:dev2:dev3:...) for 100G+ NICs, replacing the cluster approach. +A ''mempool'' must be specified for each dispatcher.
-On-stick devices are supported. +
-SKAT configures NICs as follows: +
-  * RX queue count = dpdk_rss +
-  * TX queue count = number of processing threads. Processing threads write directly to their own TX queue of the NIC.+
  
 +  * **''mempool'' descriptor** — available only for ''dpdk_engine=7''\\ Format: <code>dpdk_mempool=name=<name>;size=N</code>
 +    * ''name'' specifies the ''mempool'' name (maximum 15 characters)
 +    * ''size'' specifies the size (number of elements) of the ''mempool''
 +    * both parameters are mandatory\\ Multiple ''dpdk_mempool'' options can be specified, each describing a separate ''mempool'': <code>dpdk_mempool=...</code>
 +  * **''dpdk_max_memzone''** [cold] — sets the maximum number of ''memzone'' entries in DPDK. By default, DPDK uses a limit on the number of ''memzone'' entries (typically 5120, depending on the DPDK version). Increasing this value may be required for large configurations with many network interfaces and ''mempool'' instances.
 +    * ''0'' — use the default value defined in DPDK\\ If the following error occurs when starting fastDPI: ''Number of requested memzone segments exceeds maximum 5120'', increase the value of the ''dpdk_max_memzone'' parameter.
 +  * **Dispatcher descriptor** — available only for ''dpdk_engine=7''\\ Format: <code>dpdk_dispatch=<port-list>;mempool=<name>[;params]*</code>
 +    * ''<port-list>'' specifies which ports are served by this dispatcher
 +    * ''mempool=<name>'' specifies the ''mempool'' used by this dispatcher (mandatory parameter)
 +    * ''rss=N'' enables RSS on all ports of this dispatcher; N dispatchers will be created — one for each RX queue\\ Multiple ''dpdk_dispatch'' options can be specified, each describing a separate dispatcher (or a dispatcher group if ''rss'' is specified): <code>dpdk_dispatch=...</code>