postcopy shared docs
Add some notes to the migration documentation for shared memory postcopy. Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-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>
This commit is contained in:
		
							parent
							
								
									4275cd99c6
								
							
						
					
					
						commit
						1dc61e7b37
					
				| @ -577,3 +577,44 @@ Postcopy now works with hugetlbfs backed memory: | ||||
|      hugepages works well, however 1GB hugepages are likely to be problematic | ||||
|      since it takes ~1 second to transfer a 1GB hugepage across a 10Gbps link, | ||||
|      and until the full page is transferred the destination thread is blocked. | ||||
| 
 | ||||
| Postcopy with shared memory | ||||
| --------------------------- | ||||
| 
 | ||||
| Postcopy migration with shared memory needs explicit support from the other | ||||
| processes that share memory and from QEMU. There are restrictions on the type of | ||||
| memory that userfault can support shared. | ||||
| 
 | ||||
| The Linux kernel userfault support works on `/dev/shm` memory and on `hugetlbfs` | ||||
| (although the kernel doesn't provide an equivalent to `madvise(MADV_DONTNEED)` | ||||
| for hugetlbfs which may be a problem in some configurations). | ||||
| 
 | ||||
| The vhost-user code in QEMU supports clients that have Postcopy support, | ||||
| and the `vhost-user-bridge` (in `tests/`) and the DPDK package have changes | ||||
| to support postcopy. | ||||
| 
 | ||||
| The client needs to open a userfaultfd and register the areas | ||||
| of memory that it maps with userfault.  The client must then pass the | ||||
| userfaultfd back to QEMU together with a mapping table that allows | ||||
| fault addresses in the clients address space to be converted back to | ||||
| RAMBlock/offsets.  The client's userfaultfd is added to the postcopy | ||||
| fault-thread and page requests are made on behalf of the client by QEMU. | ||||
| QEMU performs 'wake' operations on the client's userfaultfd to allow it | ||||
| to continue after a page has arrived. | ||||
| 
 | ||||
| .. note:: | ||||
|   There are two future improvements that would be nice: | ||||
|     a) Some way to make QEMU ignorant of the addresses in the clients | ||||
|        address space | ||||
|     b) Avoiding the need for QEMU to perform ufd-wake calls after the | ||||
|        pages have arrived | ||||
| 
 | ||||
| Retro-fitting postcopy to existing clients is possible: | ||||
|   a) A mechanism is needed for the registration with userfault as above, | ||||
|      and the registration needs to be coordinated with the phases of | ||||
|      postcopy.  In vhost-user extra messages are added to the existing | ||||
|      control channel. | ||||
|   b) Any thread that can block due to guest memory accesses must be | ||||
|      identified and the implication understood; for example if the | ||||
|      guest memory access is made while holding a lock then all other | ||||
|      threads waiting for that lock will also be blocked. | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dr. David Alan Gilbert
						Dr. David Alan Gilbert