[dpdk-dev] [PATCH v5 17/19] vhost: restrict postcopy live-migration enablement
Tiwei Bie
tiwei.bie at intel.com
Wed Oct 10 12:17:25 CEST 2018
On Tue, Oct 09, 2018 at 10:54:24PM +0200, Maxime Coquelin wrote:
> Postcopy live-migration feature requires the application to
> not populate the guest memory. As the vhost library cannot
> prevent the application to that (e.g. preventing the
> application to call mlockall()), the feature is disabled by
> default.
>
> The application should only enable the feature if it does not
> force the guest memory to be populated.
>
> In case the user passes the RTE_VHOST_USER_POSTCOPY_SUPPORT
> flag at registration but the feature was not compiled,
> registration fails.
>
> For the same reason, postcopy and dequeue zero copy features
> are not compatible, so don't advertize postcopy support if
> dequeue zero copy is requested.
>
> Signed-off-by: Maxime Coquelin <maxime.coquelin at redhat.com>
> ---
> doc/guides/prog_guide/vhost_lib.rst | 8 ++++++++
> lib/librte_vhost/rte_vhost.h | 1 +
> lib/librte_vhost/socket.c | 30 ++++++++++++++++++++++++++---
> 3 files changed, 36 insertions(+), 3 deletions(-)
>
> diff --git a/doc/guides/prog_guide/vhost_lib.rst b/doc/guides/prog_guide/vhost_lib.rst
> index 77af4d775..c77df338f 100644
> --- a/doc/guides/prog_guide/vhost_lib.rst
> +++ b/doc/guides/prog_guide/vhost_lib.rst
> @@ -106,6 +106,14 @@ The following is an overview of some key Vhost API functions:
> Enabling this flag with these Qemu version results in Qemu being blocked
> when multiple queue pairs are declared.
>
> + - ``RTE_VHOST_USER_POSTCOPY_SUPPORT``
> +
> + Postcopy live-migration support will be enabled when this flag is set.
> + It is disabled by default.
> +
> + Enabling this flag should only be done when the calling application does
> + not pre-fault the guest shared memory, otherwise migration would fail.
> +
> * ``rte_vhost_driver_set_features(path, features)``
>
> This function sets the feature bits the vhost-user driver supports. The
> diff --git a/lib/librte_vhost/rte_vhost.h b/lib/librte_vhost/rte_vhost.h
> index 9292c89c5..d280ac420 100644
> --- a/lib/librte_vhost/rte_vhost.h
> +++ b/lib/librte_vhost/rte_vhost.h
> @@ -28,6 +28,7 @@ extern "C" {
> #define RTE_VHOST_USER_NO_RECONNECT (1ULL << 1)
> #define RTE_VHOST_USER_DEQUEUE_ZERO_COPY (1ULL << 2)
> #define RTE_VHOST_USER_IOMMU_SUPPORT (1ULL << 3)
> +#define RTE_VHOST_USER_POSTCOPY_SUPPORT (1ULL << 4)
>
> /** Protocol features. */
> #ifndef VHOST_USER_PROTOCOL_F_MQ
> diff --git a/lib/librte_vhost/socket.c b/lib/librte_vhost/socket.c
> index 7cad5593e..4b221a805 100644
> --- a/lib/librte_vhost/socket.c
> +++ b/lib/librte_vhost/socket.c
> @@ -51,6 +51,8 @@ struct vhost_user_socket {
> uint64_t supported_features;
> uint64_t features;
>
> + uint64_t protocol_features;
In vhost_user_set_protocol_features() in vhost_user.c,
we also need to find a way to check with this field
instead of VHOST_USER_PROTOCOL_FEATURES when receiving
the protocol features from QEMU.
> +
> /*
> * Device id to identify a specific backend device.
> * It's set to -1 for the default software implementation.
[...]
More information about the dev
mailing list