qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/4] vhost-user: Interface for migration state transfer


From: Hanna Czenczek
Subject: Re: [PATCH 2/4] vhost-user: Interface for migration state transfer
Date: Wed, 19 Apr 2023 12:47:32 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1

On 17.04.23 17:12, Stefan Hajnoczi wrote:

[...]

This brings to mind how iterative migration will work. The interface for
iterative migration is basically the same as non-iterative migration
plus a method to query the number of bytes remaining. When the number of
bytes falls below a threshold, the vCPUs are stopped and the remainder
of the data is read.

Some details from VFIO migration:
- The VMM must explicitly change the state when transitioning from
   iterative and non-iterative migration, but the data transfer fd
   remains the same.
- The state of the device (running, stopped, resuming, etc) doesn't
   change asynchronously, it's always driven by the VMM. However, setting
   the state can fail and then the new state may be an error state.

Mapping this to SET_DEVICE_STATE_FD:
- VhostDeviceStatePhase is extended with
   VHOST_TRANSFER_STATE_PHASE_RUNNING = 1 for iterative migration. The
   frontend sends SET_DEVICE_STATE_FD again with
   VHOST_TRANSFER_STATE_PHASE_STOPPED when entering non-iterative
   migration and the frontend sends the iterative fd from the previous
   SET_DEVICE_STATE_FD call to the backend. The backend may reply with
   another fd, if necessary. If the backend changes the fd, then the
   contents of the previous fd must be fully read and transferred before
   the contents of the new fd are migrated. (Maybe this is too complex
   and we should forbid changing the fd when going from RUNNING ->
   STOPPED.)
- CHECK_DEVICE_STATE can be extended to report the number of bytes
   remaining. The semantics change so that CHECK_DEVICE_STATE can be
   called while the VMM is still reading from the fd. It becomes:

     enum CheckDeviceStateResult {
         Saving(bytes_remaining : usize),
        Failed(error_code : u64),
     }

Sounds good.  Personally, I’d forbid changing the FD when just changing state, which raises the question of whether there should then be a separate command for just changing the state (like VFIO_DEVICE_FEATURE ..._MIG_DEVICE_STATE?), but that would be a question for then.

Changing the CHECK_DEVICE_STATE interface sounds good to me.

Hanna




reply via email to

[Prev in Thread] Current Thread [Next in Thread]