[ovs-dev] [PATCH] [patch v3] datapath: Treat GSO skbs as if they were fragments

Jesse Gross jesse at nicira.com
Thu Jan 6 03:15:29 UTC 2011


On Wed, Jan 5, 2011 at 8:26 PM, Simon Horman <horms at verge.net.au> wrote:
> In dp_output_control() UDP GSO skbs are split into fragments which are
> passed to userspace.  So the resulting flow set-up by the controller
> (I am using ovs-vswitchd) is created based on a fragment.  This means
> that the UDP source and destination port of the flow is zero.
>
> In order for the datapath to match the resulting flow flow_extract() needs
> to treat UDP GSO skbs as if they are fragments.  That is, set the UDP
> source and destination port to 0.
>
> A flow established for a UDP GSO skb with this change won't match any
> subsequent non-GSO skbs, they will need to be passed to the controller and
> a new flow established. But without this change no UDP GSO skbs will ever
> match any flow.
>
> I noticed this while using KVM using virtio with VhostNet and netperf's
> UDP_STREAM test. The result was that the test sent ~5Gbit/s but only a
> small fraction of that was received by the other side. Much less than the
> 1Gbit/s available on the physical link between the host (and guest) and the
> machine running netserver. 100% of one of the host's CPUs was consumed, 50%
> for the host and 50% for the guest.  The host consumption was contributed
> to largely by ovs-vswitchd.
>
> With this change I get a much nicer result of a fraction under 1Gbit/s sent
> and almost all packets ending up at the other end.
>
> Signed-off-by: Simon Horman <horms at verge.net.au>

Applied, thanks Simon.




More information about the dev mailing list