With the team we have been working for some time on updating the vnet flows and dpdk driver backend to support fast flow rules insertion/deletion from the datapath. The end goal being two updates of SFDP:
- Upon reception of the first packet of a session, we create two flow rules (one for the forward flow, one for the reverse) that will be marking matching packet with the session id. - We then skip session lookup in software thanks to that - Upon policy defined rules we also want to insert flow rules to directly forward traffic to an egress port without the packets being received in software - That requires adding support for hardware aging flows A summary of some of the patches we have for now in gerrit: - [45246](https://gerrit.fd.io/r/c/vpp/+/45246): replace the hash table per vnet flow with a single hw interface index. A hash table lookup/set takes too many cycles. I tried also to replace it directly in the vnet flow by a vec of driver private data per hw_if_index but the cost of the allocation when an index does not exists it really high and kill performances. - [45247](https://gerrit.fd.io/r/c/vpp/+/45247): let the backend driver set/unset hw_if_index per flow: as it is use to determine if a flow is correctly installed the driver should be the owner of the field. - [45248](https://gerrit.fd.io/r/c/vpp/+/45248): optimize the vnet_flow_t structure to fit in less cacheline and have a pointer to generic pattern. Futher optimizations would be great. (with my benchmarking unittest I was able to increase by 33% the number of flows enabled) - [45000](https://gerrit.fd.io/r/c/vpp/+/45000): the flow templating and async API vnet flow infrastructure. - [45578](https://gerrit.fd.io/r/c/vpp/+/45578): buffer-like per-thread-cache to allow multiple workers to operate at the vnet flow level. - [45098](https://gerrit.fd.io/r/c/vpp/+/45098): implement the templating and async API for DPDK - [45539](https://gerrit.fd.io/r/c/vpp/+/45539): buffer-like per-thread-cache to allow multiple workers to operate at the dpdk flow level. flow_entries and flow_lookup_entries are be biggest blocker there. - [45152](https://gerrit.fd.io/r/c/vpp/+/45152): default jump rule to flow table 1 to avoid the cost of table 0 which has another layer of verification slowing done the insertion/deletion rate. - [44976](https://gerrit.fd.io/r/c/vpp/+/44976): the actual integration into SFDP, leverage vnet flows and async path in the dpdk plugin. - [45624](https://gerrit.fd.io/r/c/vpp/+/45634): fill the gap in the vnet flow layer to gather flow counters. - [45635](https://gerrit.fd.io/r/c/vpp/+/45635): integration of the counters in the dpdk plugin. - [45636](https://gerrit.fd.io/r/c/vpp/+/45636): support flow aging in the vnet layer. - [45637](https://gerrit.fd.io/r/c/vpp/+/45637): support flow aging in the dpdk layer.
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#27016): https://lists.fd.io/g/vpp-dev/message/27016 Mute This Topic: https://lists.fd.io/mt/119226657/21656 Group Owner: [email protected] Unsubscribe: https://lists.fd.io/g/vpp-dev/leave/14379924/21656/631435203/xyzzy [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
