docs: add memory-hotplug.txt
This document describes how to use memory hotplug in QEMU. Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Paulo Vital <paulo.vital@profitbricks.com>
This commit is contained in:
		
							parent
							
								
									9fcc079486
								
							
						
					
					
						commit
						a3b0421798
					
				
							
								
								
									
										76
									
								
								docs/memory-hotplug.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								docs/memory-hotplug.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,76 @@
 | 
				
			|||||||
 | 
					QEMU memory hotplug
 | 
				
			||||||
 | 
					===================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This document explains how to use the memory hotplug feature in QEMU,
 | 
				
			||||||
 | 
					which is present since v2.1.0.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Please, note that memory hotunplug is not supported yet. This means
 | 
				
			||||||
 | 
					that you're able to add memory, but you're not able to remove it.
 | 
				
			||||||
 | 
					Also, proper guest support is required for memory hotplug to work.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Basic RAM hotplug
 | 
				
			||||||
 | 
					-----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In order to be able to hotplug memory, QEMU has to be told how many
 | 
				
			||||||
 | 
					hotpluggable memory slots to create and what is the maximum amount of
 | 
				
			||||||
 | 
					memory the guest can grow. This is done at startup time by means of
 | 
				
			||||||
 | 
					the -m command-line option, which has the following format:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -m [size=]megs[,slots=n,maxmem=size]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Where,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 - "megs" is the startup RAM. It is the RAM the guest will boot with
 | 
				
			||||||
 | 
					 - "slots" is the number of hotpluggable memory slots
 | 
				
			||||||
 | 
					 - "maxmem" is the maximum RAM size the guest can have
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For example, the following command-line:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 qemu [...] 1G,slots=3,maxmem=4G
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Creates a guest with 1GB of memory and three hotpluggable memory slots.
 | 
				
			||||||
 | 
					The hotpluggable memory slots are empty when the guest is booted, so all
 | 
				
			||||||
 | 
					memory the guest will see after boot is 1GB. The maximum memory the
 | 
				
			||||||
 | 
					guest can reach is 4GB. This means that three additional gigabytes can be
 | 
				
			||||||
 | 
					hotplugged by using any combination of the available memory slots.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Two monitor commands are used to hotplug memory:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 - "object_add": creates a memory backend object
 | 
				
			||||||
 | 
					 - "device_add": creates a front-end pc-dimm device and inserts it
 | 
				
			||||||
 | 
					                 into the first empty slot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For example, the following commands add another 1GB to the guest
 | 
				
			||||||
 | 
					discussed earlier:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  (qemu) object_add memory-backend-ram,id=mem1,size=1G
 | 
				
			||||||
 | 
					  (qemu) device_add pc-dimm,id=dimm1,memdev=mem1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Using the file backend
 | 
				
			||||||
 | 
					----------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Besides basic RAM hotplug, QEMU also supports using files as a memory
 | 
				
			||||||
 | 
					backend. This is useful for using hugetlbfs in Linux, which provides
 | 
				
			||||||
 | 
					access to bigger page sizes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For example, assuming that the host has 1GB hugepages available in
 | 
				
			||||||
 | 
					the /mnt/hugepages-1GB directory, a 1GB hugepage could be hotplugged
 | 
				
			||||||
 | 
					into the guest from the previous section with the following commands:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  (qemu) object_add memory-backend-file,id=mem1,size=1G,mem-path=/mnt/hugepages-1GB
 | 
				
			||||||
 | 
					  (qemu) device_add pc-dimm,id=dimm1,memdev=mem1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					It's also possible to start a guest with memory cold-plugged into the
 | 
				
			||||||
 | 
					hotpluggable memory slots. This might seem counterintuitive at first,
 | 
				
			||||||
 | 
					but this allows for a lot of flexibility when using the file backend.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In the following command-line example, a 8GB guest is created where 6GB
 | 
				
			||||||
 | 
					comes from regular RAM, 1GB is a 1GB hugepage page and 256MB is from
 | 
				
			||||||
 | 
					2MB pages. Also, the guest has additional memory slots to hotplug more
 | 
				
			||||||
 | 
					2GB if needed:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 qemu [...] -m 6GB,slots=4,maxmem=10G \
 | 
				
			||||||
 | 
					   -object memory-backend-file,id=mem1,size=1G,mem-path=/mnt/hugepages-1G \
 | 
				
			||||||
 | 
					   -device pc-dimm,id=dimm1,memdev=mem1 \
 | 
				
			||||||
 | 
					   -object memory-backend-file,id=mem2,size=256M,mem-path=/mnt/hugepages-2MB \
 | 
				
			||||||
 | 
					   -device pc-dimm,id=dimm2,memdev=mem2
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user