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]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to