1QEMU memory hotplug 2=================== 3 4This document explains how to use the memory hotplug feature in QEMU, 5which is present since v2.1.0. 6 7Please, note that memory hotunplug is not supported yet. This means 8that you're able to add memory, but you're not able to remove it. 9Also, proper guest support is required for memory hotplug to work. 10 11Basic RAM hotplug 12----------------- 13 14In order to be able to hotplug memory, QEMU has to be told how many 15hotpluggable memory slots to create and what is the maximum amount of 16memory the guest can grow. This is done at startup time by means of 17the -m command-line option, which has the following format: 18 19 -m [size=]megs[,slots=n,maxmem=size] 20 21Where, 22 23 - "megs" is the startup RAM. It is the RAM the guest will boot with 24 - "slots" is the number of hotpluggable memory slots 25 - "maxmem" is the maximum RAM size the guest can have 26 27For example, the following command-line: 28 29 qemu [...] 1G,slots=3,maxmem=4G 30 31Creates a guest with 1GB of memory and three hotpluggable memory slots. 32The hotpluggable memory slots are empty when the guest is booted, so all 33memory the guest will see after boot is 1GB. The maximum memory the 34guest can reach is 4GB. This means that three additional gigabytes can be 35hotplugged by using any combination of the available memory slots. 36 37Two monitor commands are used to hotplug memory: 38 39 - "object_add": creates a memory backend object 40 - "device_add": creates a front-end pc-dimm device and inserts it 41 into the first empty slot 42 43For example, the following commands add another 1GB to the guest 44discussed earlier: 45 46 (qemu) object_add memory-backend-ram,id=mem1,size=1G 47 (qemu) device_add pc-dimm,id=dimm1,memdev=mem1 48 49Using the file backend 50---------------------- 51 52Besides basic RAM hotplug, QEMU also supports using files as a memory 53backend. This is useful for using hugetlbfs in Linux, which provides 54access to bigger page sizes. 55 56For example, assuming that the host has 1GB hugepages available in 57the /mnt/hugepages-1GB directory, a 1GB hugepage could be hotplugged 58into the guest from the previous section with the following commands: 59 60 (qemu) object_add memory-backend-file,id=mem1,size=1G,mem-path=/mnt/hugepages-1GB 61 (qemu) device_add pc-dimm,id=dimm1,memdev=mem1 62 63It's also possible to start a guest with memory cold-plugged into the 64hotpluggable memory slots. This might seem counterintuitive at first, 65but this allows for a lot of flexibility when using the file backend. 66 67In the following command-line example, a 8GB guest is created where 6GB 68comes from regular RAM, 1GB is a 1GB hugepage page and 256MB is from 692MB pages. Also, the guest has additional memory slots to hotplug more 702GB if needed: 71 72 qemu [...] -m 6GB,slots=4,maxmem=10G \ 73 -object memory-backend-file,id=mem1,size=1G,mem-path=/mnt/hugepages-1G \ 74 -device pc-dimm,id=dimm1,memdev=mem1 \ 75 -object memory-backend-file,id=mem2,size=256M,mem-path=/mnt/hugepages-2MB \ 76 -device pc-dimm,id=dimm2,memdev=mem2 77