numam-dpdk/lib
Maxime Coquelin c16915b871 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: 897f13a1f7 ("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>
2018-05-17 14:19:05 +02:00
..
librte_acl
librte_bbdev bbdev: split queue groups 2018-05-10 17:46:20 +01:00
librte_bitratestats
librte_bpf bpf: add missed experimental tags 2018-05-14 17:42:43 +02:00
librte_cfgfile
librte_cmdline
librte_compat
librte_compressdev compressdev: get device id from name 2018-05-10 17:46:20 +01:00
librte_cryptodev lib: clear experimental version tag in linker scripts 2018-05-14 03:37:28 +02:00
librte_distributor
librte_eal version: 18.05-rc4 2018-05-15 22:38:39 +02:00
librte_efd
librte_ethdev ethdev: improve doc for name by port ID API 2018-05-14 22:32:22 +01:00
librte_eventdev lib: clear experimental version tag in linker scripts 2018-05-14 03:37:28 +02:00
librte_flow_classify
librte_gro
librte_gso
librte_hash hash: explicit casts for truncation in CRC32c 2018-05-13 22:45:37 +02:00
librte_ip_frag ip_frag: fix some debug logs 2018-05-14 21:14:49 +02:00
librte_jobstats
librte_kni
librte_kvargs
librte_latencystats ethdev: remove experimental flag of ports enumeration 2018-04-27 18:00:24 +01:00
librte_lpm
librte_mbuf lib: clear experimental version tag in linker scripts 2018-05-14 03:37:28 +02:00
librte_member
librte_mempool mempool: fix virtual address population 2018-05-15 16:30:14 +02:00
librte_meter lib: clear experimental version tag in linker scripts 2018-05-14 03:37:28 +02:00
librte_metrics
librte_net lib: clear experimental version tag in linker scripts 2018-05-14 03:37:28 +02:00
librte_pci
librte_pdump
librte_pipeline lib: clear experimental version tag in linker scripts 2018-05-14 03:37:28 +02:00
librte_port
librte_power
librte_rawdev rawdev: remove dead code 2018-05-14 01:01:11 +02:00
librte_reorder
librte_ring
librte_sched lib: clear experimental version tag in linker scripts 2018-05-14 03:37:28 +02:00
librte_security
librte_table table: add dedicated params struct for cuckoo hash 2018-05-08 16:19:58 +02:00
librte_timer eal: make semantics of lcore role function more intuitive 2018-04-26 16:58:18 +02:00
librte_vhost vhost: improve dirty pages logging performance 2018-05-17 14:19:05 +02:00
Makefile bpf: add BPF loading and execution framework 2018-05-12 00:35:15 +02:00
meson.build build: ensure compatibility with future meson versions 2018-05-08 22:22:02 +02:00