[ovs-dev] question about dp_packet lifetime

Alessandro Rosetti alessandro.rosetti at gmail.com
Wed Feb 7 14:28:26 UTC 2018


Hi,

  My name is Alessandro Rosetti, and I'm currently adding netmap support to
ovs, following an approach similar to DPDK.

I've created a new netdev: netdev_netmap that uses the pmd infrastructure.
The prototype I have seems to work fine (I still need to tune performance,
test optional features, and test more complex topologies.)

I have a question about the lifetime of dp_packets.
Is there any guarantee that the dp_packets allocated in a receive callback
(e.g. netdev_netmap_rxq_recv) are consumed by OVS (e.g. dropped, cloned, or
sent to other ports) **before** a subsequent call to the receive callback
(on the same port)?
Or is it possible for dp_packets to be stored somewhere (e.g. in an OVS
internal queue) and live across subsequent invocations of the receive
callback that allocated them?

I need to know if this is the case to check that my current prototype is
safe.
I use per-port pre-allocation of dp_packets, for maximum performance. I've
seen that DPDK uses its internal allocator to allocate and deallocate
dp_packets, but netmap does not expose one.
Each packet received with netmap is created as a new type dp_packet:
DPBUF_NETMAP. The data points to a netmap buffer (preallocated by the
kernel).
When I receive data (netdev_netmap_rxq_recv) I reuse the dp_packets,
updating the internal pointer and a couple of additional informations
stored inside the dp_packet.
When I have to send data I use zero copy if dp_packet is DPBUF_NETMAP and
copy if it's not.

Thanks for the help!
Alessandro.


More information about the dev mailing list