vhost-user: document migration log
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Tested-by: Thibaut Collet <thibaut.collet@6wind.com>
This commit is contained in:
		
							parent
							
								
									21e704256d
								
							
						
					
					
						commit
						c62b91e580
					
				| @ -115,11 +115,13 @@ the ones that do: | ||||
|  * VHOST_GET_FEATURES | ||||
|  * VHOST_GET_PROTOCOL_FEATURES | ||||
|  * VHOST_GET_VRING_BASE | ||||
|  * VHOST_SET_LOG_BASE (if VHOST_USER_PROTOCOL_F_LOG_SHMFD) | ||||
| 
 | ||||
| There are several messages that the master sends with file descriptors passed | ||||
| in the ancillary data: | ||||
| 
 | ||||
|  * VHOST_SET_MEM_TABLE | ||||
|  * VHOST_SET_LOG_BASE (if VHOST_USER_PROTOCOL_F_LOG_SHMFD) | ||||
|  * VHOST_SET_LOG_FD | ||||
|  * VHOST_SET_VRING_KICK | ||||
|  * VHOST_SET_VRING_CALL | ||||
| @ -140,8 +142,7 @@ Multiple queue support | ||||
| 
 | ||||
| Multiple queue is treated as a protocol extension, hence the slave has to | ||||
| implement protocol features first. The multiple queues feature is supported | ||||
| only when the protocol feature VHOST_USER_PROTOCOL_F_MQ (bit 0) is set: | ||||
| #define VHOST_USER_PROTOCOL_F_MQ    0 | ||||
| only when the protocol feature VHOST_USER_PROTOCOL_F_MQ (bit 0) is set. | ||||
| 
 | ||||
| The max number of queues the slave supports can be queried with message | ||||
| VHOST_USER_GET_PROTOCOL_FEATURES. Master should stop when the number of | ||||
| @ -152,6 +153,48 @@ queue in the sent message to identify a specified queue. One queue pair | ||||
| is enabled initially. More queues are enabled dynamically, by sending | ||||
| message VHOST_USER_SET_VRING_ENABLE. | ||||
| 
 | ||||
| Migration | ||||
| --------- | ||||
| 
 | ||||
| During live migration, the master may need to track the modifications | ||||
| the slave makes to the memory mapped regions. The client should mark | ||||
| the dirty pages in a log. Once it complies to this logging, it may | ||||
| declare the VHOST_F_LOG_ALL vhost feature. | ||||
| 
 | ||||
| All the modifications to memory pointed by vring "descriptor" should | ||||
| be marked. Modifications to "used" vring should be marked if | ||||
| VHOST_VRING_F_LOG is part of ring's features. | ||||
| 
 | ||||
| Dirty pages are of size: | ||||
| #define VHOST_LOG_PAGE 0x1000 | ||||
| 
 | ||||
| The log memory fd is provided in the ancillary data of | ||||
| VHOST_USER_SET_LOG_BASE message when the slave has | ||||
| VHOST_USER_PROTOCOL_F_LOG_SHMFD protocol feature. | ||||
| 
 | ||||
| The size of the log may be computed by using all the known guest | ||||
| addresses. The log covers from address 0 to the maximum of guest | ||||
| regions. In pseudo-code, to mark page at "addr" as dirty: | ||||
| 
 | ||||
| page = addr / VHOST_LOG_PAGE | ||||
| log[page / 8] |= 1 << page % 8 | ||||
| 
 | ||||
| Use atomic operations, as the log may be concurrently manipulated. | ||||
| 
 | ||||
| VHOST_USER_SET_LOG_FD is an optional message with an eventfd in | ||||
| ancillary data, it may be used to inform the master that the log has | ||||
| been modified. | ||||
| 
 | ||||
| Once the source has finished migration, VHOST_USER_RESET_OWNER message | ||||
| will be sent by the source. No further update must be done before the | ||||
| destination takes over with new regions & rings. | ||||
| 
 | ||||
| Protocol features | ||||
| ----------------- | ||||
| 
 | ||||
| #define VHOST_USER_PROTOCOL_F_MQ             0 | ||||
| #define VHOST_USER_PROTOCOL_F_LOG_SHMFD      1 | ||||
| 
 | ||||
| Message types | ||||
| ------------- | ||||
| 
 | ||||
| @ -236,6 +279,7 @@ Message types | ||||
|       Id: 6 | ||||
|       Equivalent ioctl: VHOST_SET_LOG_BASE | ||||
|       Master payload: u64 | ||||
|       Slave payload: N/A | ||||
| 
 | ||||
|       Sets the logging base address. | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Marc-André Lureau
						Marc-André Lureau