mirror of https://github.com/OISF/suricata
parent
c4b0c2888d
commit
11c3aa868d
@ -0,0 +1,97 @@
|
||||
.. _dpdk:
|
||||
|
||||
DPDK
|
||||
====
|
||||
|
||||
Introduction
|
||||
-------------
|
||||
|
||||
The Data Plane Development Kit (DPDK) is a set of libraries and drivers that
|
||||
enhance and speed up packet processing in the data plane. Its primary use is to
|
||||
provide faster packet processing by bypassing the kernel network stack, which
|
||||
can provide significant performance improvements. For detailed instructions on
|
||||
how to setup DPDK, please refer to :doc:`../configuration/suricata-yaml` to
|
||||
learn more about the basic setup for DPDK.
|
||||
The following sections contain examples of how to set up DPDK and Suricata for
|
||||
more obscure use-cases.
|
||||
|
||||
Bond interface
|
||||
--------------
|
||||
|
||||
Link Bonding Poll Mode Driver (Bond PMD), is a software
|
||||
mechanism provided by the Data Plane Development Kit (DPDK) for aggregating
|
||||
multiple physical network interfaces into a single logical interface.
|
||||
Bonding can be e.g. used to:
|
||||
|
||||
* deliver bidirectional flows of tapped interfaces to the same worker,
|
||||
* establish redundancy by monitoring multiple links,
|
||||
* improve network performance by load-balancing traffic across multiple links.
|
||||
|
||||
Bond PMD is essentially a virtual driver that manipulates with multiple
|
||||
physical network interfaces. It can operate in multiple modes as described
|
||||
in the `DPDK docs
|
||||
<https://doc.dpdk.org/guides/prog_guide/link_bonding_poll_mode_drv_lib.html>`_
|
||||
The individual bonding modes can accustom user needs.
|
||||
DPDK Bond PMD has a requirement that the aggregated interfaces must be
|
||||
the same device types - e.g. both physical ports run on mlx5 PMD.
|
||||
Bond PMD supports multiple queues and therefore can work in workers runmode.
|
||||
It should have no effect on traffic distribution of the individual ports and
|
||||
flows should be distributed by physical ports according to the RSS
|
||||
configuration the same way as if they would be configured independently.
|
||||
|
||||
As an example of Bond PMD, we can setup Suricata to monitor 2 interfaces
|
||||
that receive TAP traffic from optical interfaces. This means that Suricata
|
||||
receive one direction of the communication on one interface and the other
|
||||
direction is received on the other interface.
|
||||
|
||||
::
|
||||
|
||||
...
|
||||
dpdk:
|
||||
eal-params:
|
||||
proc-type: primary
|
||||
vdev: 'net_bonding0,mode=0,slave=0000:04:00.0,slave=0000:04:00.1'
|
||||
|
||||
# DPDK capture support
|
||||
# RX queues (and TX queues in IPS mode) are assigned to cores in 1:1 ratio
|
||||
interfaces:
|
||||
- interface: net_bonding0 # PCIe address of the NIC port
|
||||
# Threading: possible values are either "auto" or number of threads
|
||||
# - auto takes all cores
|
||||
# in IPS mode it is required to specify the number of cores and the
|
||||
# numbers on both interfaces must match
|
||||
threads: 4
|
||||
...
|
||||
|
||||
In the DPDK part of suricata.yaml we have added a new parameter to the
|
||||
eal-params section for virtual devices - `vdev`.
|
||||
DPDK Environment Abstraction Layer (EAL) can initialize some virtual devices
|
||||
during the initialization of EAL.
|
||||
In this case, EAL creates a new device of type `net_bonding`. Suffix of
|
||||
`net_bonding` signifies the name of the interface (in this case the zero).
|
||||
Extra arguments are passed after the device name, such as the bonding mode
|
||||
(`mode=0`). This is the round-robin mode as is described in the DPDK
|
||||
documentation of Bond PMD.
|
||||
Members (slaves) of the `net_bonding0` interface are appended after
|
||||
the bonding mode parameter.
|
||||
|
||||
When the device is specified within EAL parameters, it can be used within
|
||||
Suricata `interfaces` list. Note that the list doesn't contain PCIe addresses
|
||||
of the physical ports but instead the `net_bonding0` interface.
|
||||
Threading section is also adjusted according to the items in the interfaces
|
||||
list by enablign set-cpu-affinity and listing CPUs that should be used in
|
||||
management and worker CPU set.
|
||||
|
||||
::
|
||||
|
||||
...
|
||||
threading:
|
||||
set-cpu-affinity: yes
|
||||
cpu-affinity:
|
||||
- management-cpu-set:
|
||||
cpu: [ 0 ] # include only these CPUs in affinity settings
|
||||
- receive-cpu-set:
|
||||
cpu: [ 0 ] # include only these CPUs in affinity settings
|
||||
- worker-cpu-set:
|
||||
cpu: [ 2,4,6,8 ]
|
||||
...
|
Loading…
Reference in New Issue