On Mon, Mar 27, 2017 at 09:34:19AM +0200, Maxime Coquelin wrote: > > > On 03/23/2017 04:44 PM, Kevin Traynor wrote: > >The broadcast_rarp field in the virtio_net struct is checked in the > >dequeue datapath regardless of whether descriptors are available or not. > > > >As it is checked with cmpset leading to a write, false sharing on the > >virtio_net struct can happen between enqueue and dequeue datapaths > >regardless of whether a RARP is requested. In OVS, the issue can cause > >a uni-directional performance drop of up to 15%. > > > >Fix that by only performing the cmpset if a read of broadcast_rarp > >indicates that the cmpset is likely to succeed. > > > >Fixes: a66bcad32240 ("vhost: arrange struct fields for better cache sharing") > >Cc: sta...@dpdk.org > > > >Signed-off-by: Kevin Traynor <ktray...@redhat.com> > >--- > > > >V2: > >Change from fixing by moving broadcast_rarp location in virtio_net struct > >to performing a read before cmpset. > > > > lib/librte_vhost/virtio_net.c | 16 ++++++++++++++-- > > 1 file changed, 14 insertions(+), 2 deletions(-) > > Nice! > Reviewed-by: Maxime Coquelin <maxime.coque...@redhat.com>
Applied to dpdk-next-virtio. Thanks. --yliu > > I'll try to benchmark it with testpmd only to see if we measure the > same gain without OVS. > > Thanks, > Maxime