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>

I'll try to benchmark it with testpmd only to see if we measure the
same gain without OVS.

Thanks,
Maxime

Reply via email to