vhost: improve dirty pages logging performance
authorMaxime Coquelin <maxime.coquelin@redhat.com>
Thu, 17 May 2018 11:44:47 +0000 (13:44 +0200)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 17 May 2018 12:19:05 +0000 (14:19 +0200)
commitc16915b8710911a75f0fbdb1aa5243f4cdfaf26a
tree57e5d5c8408f8d38ead584f5223a8cd89fa97dda
parent34511c25d5fdc03ca972bc7fed50e2dd43e8c956
vhost: improve dirty pages logging performance

This patch caches all dirty pages logging until the used ring index
is updated.

The goal of this optimization is to fix a performance regression
introduced when the vhost library started to use atomic operations
to set bits in the shared dirty log map. While the fix was valid
as previous implementation wasn't safe against concurrent accesses,
contention was induced.

With this patch, during migration, we have:
1. Less atomic operations as only a single atomic OR operation
per 32 or 64 (depending on CPU) pages.
2. Less atomic operations as during a burst, the same page will
be marked dirty only once.
3. Less write memory barriers.

Fixes: 897f13a1f726 ("vhost: make page logging atomic")
Cc: stable@dpdk.org
Suggested-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Reviewed-by: Tiwei Bie <tiwei.bie@intel.com>
lib/librte_vhost/vhost.h
lib/librte_vhost/virtio_net.c