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