So that we could skip the heavy emc processing. A simple PHY-PHY forwarding testing shows almost 80% performance improvement.
Signed-off-by: Yuanhan Liu <y...@fridaylinux.org> Signed-off-by: Finn Christensen <f...@napatech.com> --- lib/dp-packet.h | 13 +++++++++++++ lib/dpif-netdev.c | 17 +++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/lib/dp-packet.h b/lib/dp-packet.h index bb3f9db..7ecabcc 100644 --- a/lib/dp-packet.h +++ b/lib/dp-packet.h @@ -687,6 +687,19 @@ reset_dp_packet_checksum_ol_flags(struct dp_packet *p) #define reset_dp_packet_checksum_ol_flags(arg) #endif +static inline bool +dp_packet_has_flow_mark(struct dp_packet *p OVS_UNUSED, + uint32_t *mark OVS_UNUSED) +{ +#ifdef DPDK_NETDEV + if (p->mbuf.ol_flags & PKT_RX_FDIR_ID) { + *mark = p->mbuf.hash.fdir.hi; + return true; + } +#endif + return false; +} + enum { NETDEV_MAX_BURST = 32 }; /* Maximum number packets in a batch. */ struct dp_packet_batch { diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index aaeb7c2..b5f157e 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -4765,6 +4765,7 @@ emc_processing(struct dp_netdev_pmd_thread *pmd, DP_PACKET_BATCH_REFILL_FOR_EACH (i, size, packet, packets_) { struct dp_netdev_flow *flow; + uint32_t flow_mark; if (OVS_UNLIKELY(dp_packet_size(packet) < ETH_HEADER_LEN)) { dp_packet_delete(packet); @@ -4772,6 +4773,22 @@ emc_processing(struct dp_netdev_pmd_thread *pmd, continue; } + if (dp_packet_has_flow_mark(packet, &flow_mark)) { + flow = dp_netdev_pmd_find_flow_by_mark(pmd, flow_mark); + if (flow) { + /* FIXME: this fake mf won't update tcp_flags */ + struct miniflow fake_mf = { + FLOWMAP_EMPTY_INITIALIZER, + miniflow_values(&fake_mf), + miniflow_values(&fake_mf) + FLOW_U64S + }; + + dp_netdev_queue_batches(packet, flow, &fake_mf, batches, + n_batches); + continue; + } + } + if (i != size - 1) { struct dp_packet **packets = packets_->packets; /* Prefetch next packet data and metadata. */ -- 2.7.4 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev