Skip to content

lib: introduce traffic mirroring lib

Patrick Fu dpdk-dev 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest3 patches 4 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/3lib/mirror: introduce traffic mirror APIconfig/common_base lib/Makefile lib/librte_mirror/Makefile +5 more+449 -13 replies
2/3lib/mirror: add port based mirroringlib/librte_mirror/rte_mirror.c+57 -00 replies
3/3lib/mirror: add flow based mirroringlib/librte_mirror/rte_mirror.c+107 -00 replies

Reviews trailers per patch

1 of 3 patches has a Reviewed-by or Acked-by.

PatchMEHAN, MUNISH
1/3A-b
2/3
3/3

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v1 thread

Cover letter [dpdk-dev] [PATCH v1 0/3] lib: introduce traffic mirroring lib

Network Test Access Point (TAP) is the network monitoring service commonly adotpted in SDN-based network infrastructures. When VMs are inter-connected over virtual switches, TAP requires vSwitch to mirror out network traffics from specific workload VM ports to the TAP device/VM ports. Classical mirroring impmentations in vSwitch make an extra copy of the source packets, which results in significant degradation in the throughput levels vSwitch could normally archieve. Therefore, we propose a new set of APIs to support high-throughput packet mirroring through hardware offloading.

The proposal is consisted of three major parts:
- Mirror registration APIs
- Mirror offload/customization callbacks
- Shared mirror data path

In this patch set, mirroring happens between a pair of ethdev ports (one for the source port and the other for the mirror port), which is configurable on a per-port per-direction basis. i.e. applications invoke the mirroring API to register source ports and traffic directions (tx or rx). The registration API will then attach the mirror data path to the source port as a standard ethdev tx or rx callback. If any custom mirror offload functions are specified by applications, the offload function will be executed within the mirror data path.

The mirror data path intercepts the packets flowing over the registered source ports and, rather than doing extra packets copy operations, simply transmits packets to the destination (mirror) port with an incremented mbuf reference count. In this way, an identical copy of the packet data is transmitted to both the mirror port and the original traffic destination.

In addition, with the proposed APIs we can implement even more complicated mirrorings scenarios. Two examples include flow based mirroring and MAC address matching, both of which have common usage within the industry.

Our prior studies demonstrate that this methedology is capble of doubling the mirroring performance as compared to the default OVS port mirroring performance (refer to the paper in IEEE xplore for further details:
https://ieeexplore.ieee.org/document/9110293)
An OVS implementation was also suggested to the OVS community for review and comments (refer to the following OVS RFC patch:
https://patchwork.ozlabs.org/project/openvswitch/patch/
[email protected]/)

We are considering implementing the mirroring APIs as a standalone library in DPDK, but it's also reasonble to place it inside ethdev layer or within the vhost-pmd considering the potential usage scenarios.

Patrick Fu (3):
lib/mirror: introduce traffic mirror API
lib/mirror: add port based mirroring
lib/mirror: add flow based mirroring

 config/common_base                       |   5 +
 lib/Makefile                             |   2 +
 lib/librte_mirror/Makefile               |  20 +
 lib/librte_mirror/meson.build            |   6 +
 lib/librte_mirror/rte_mirror.c           | 461 +++++++++++++++++++++++
 lib/librte_mirror/rte_mirror.h           | 111 ++++++
 lib/librte_mirror/rte_mirror_version.map |   7 +
 lib/meson.build                          |   2 +-
 8 files changed, 613 insertions(+), 1 deletion(-)
 create mode 100644 lib/librte_mirror/Makefile
 create mode 100644 lib/librte_mirror/meson.build
 create mode 100644 lib/librte_mirror/rte_mirror.c
 create mode 100644 lib/librte_mirror/rte_mirror.h
 create mode 100644 lib/librte_mirror/rte_mirror_version.map
Signature · 1 line
2.18.4