| 
									
										
										
										
											2023-01-24 18:01:14 +00:00
										 |  |  | .. _Multi-process QEMU:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-29 11:46:03 -05:00
										 |  |  | Multi-process QEMU
 | 
					
						
							|  |  |  | ==================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This document describes how to configure and use multi-process qemu.
 | 
					
						
							| 
									
										
										
										
											2023-05-17 11:39:48 -04:00
										 |  |  | For the design document refer to docs/devel/multi-process.rst.
 | 
					
						
							| 
									
										
										
										
											2021-01-29 11:46:03 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 1) Configuration
 | 
					
						
							|  |  |  | ----------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | multi-process is enabled by default for targets that enable KVM
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 2) Usage
 | 
					
						
							|  |  |  | --------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Multi-process QEMU requires an orchestrator to launch.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Following is a description of command-line used to launch mpqemu.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * Orchestrator:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   - The Orchestrator creates a unix socketpair
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   - It launches the remote process and passes one of the
 | 
					
						
							|  |  |  |     sockets to it via command-line.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   - It then launches QEMU and specifies the other socket as an option
 | 
					
						
							|  |  |  |     to the Proxy device object
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * Remote Process:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   - QEMU can enter remote process mode by using the "remote" machine
 | 
					
						
							|  |  |  |     option.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   - The orchestrator creates a "remote-object" with details about
 | 
					
						
							|  |  |  |     the device and the file descriptor for the device
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   - The remaining options are no different from how one launches QEMU with
 | 
					
						
							|  |  |  |     devices.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   - Example command-line for the remote process is as follows:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       /usr/bin/qemu-system-x86_64                                        \
 | 
					
						
							|  |  |  |       -machine x-remote                                                  \
 | 
					
						
							|  |  |  |       -device lsi53c895a,id=lsi0                                         \
 | 
					
						
							|  |  |  |       -drive id=drive_image2,file=/build/ol7-nvme-test-1.qcow2           \
 | 
					
						
							|  |  |  |       -device scsi-hd,id=drive2,drive=drive_image2,bus=lsi0.0,scsi-id=0  \
 | 
					
						
							| 
									
										
										
										
											2021-07-12 17:47:18 -07:00
										 |  |  |       -object x-remote-object,id=robj1,devid=lsi0,fd=4,
 | 
					
						
							| 
									
										
										
										
											2021-01-29 11:46:03 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | * QEMU:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   - Since parts of the RAM are shared between QEMU & remote process, a
 | 
					
						
							|  |  |  |     memory-backend-memfd is required to facilitate this, as follows:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     -object memory-backend-memfd,id=mem,size=2G
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   - A "x-pci-proxy-dev" device is created for each of the PCI devices emulated
 | 
					
						
							|  |  |  |     in the remote process. A "socket" sub-option specifies the other end of
 | 
					
						
							|  |  |  |     unix channel created by orchestrator. The "id" sub-option must be specified
 | 
					
						
							|  |  |  |     and should be the same as the "id" specified for the remote PCI device
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   - Example commandline for QEMU is as follows:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       -device x-pci-proxy-dev,id=lsi0,socket=3
 |