4 This document explains how to use the memory hotplug feature in QEMU,
5 which is present since v2.1.0.
7 Please, note that memory hotunplug is not supported yet. This means
8 that you're able to add memory, but you're not able to remove it.
9 Also, proper guest support is required for memory hotplug to work.
14 In order to be able to hotplug memory, QEMU has to be told how many
15 hotpluggable memory slots to create and what is the maximum amount of
16 memory the guest can grow. This is done at startup time by means of
17 the -m command-line option, which has the following format:
19 -m [size=]megs[,slots=n,maxmem=size]
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
27 For example, the following command-line:
29 qemu [...] 1G,slots=3,maxmem=4G
31 Creates a guest with 1GB of memory and three hotpluggable memory slots.
32 The hotpluggable memory slots are empty when the guest is booted, so all
33 memory the guest will see after boot is 1GB. The maximum memory the
34 guest can reach is 4GB. This means that three additional gigabytes can be
35 hotplugged by using any combination of the available memory slots.
37 Two monitor commands are used to hotplug memory:
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
43 For example, the following commands add another 1GB to the guest
46 (qemu) object_add memory-backend-ram,id=mem1,size=1G
47 (qemu) device_add pc-dimm,id=dimm1,memdev=mem1
49 Using the file backend
50 ----------------------
52 Besides basic RAM hotplug, QEMU also supports using files as a memory
53 backend. This is useful for using hugetlbfs in Linux, which provides
54 access to bigger page sizes.
56 For example, assuming that the host has 1GB hugepages available in
57 the /mnt/hugepages-1GB directory, a 1GB hugepage could be hotplugged
58 into the guest from the previous section with the following commands:
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
63 It's also possible to start a guest with memory cold-plugged into the
64 hotpluggable memory slots. This might seem counterintuitive at first,
65 but this allows for a lot of flexibility when using the file backend.
67 In the following command-line example, a 8GB guest is created where 6GB
68 comes from regular RAM, 1GB is a 1GB hugepage page and 256MB is from
69 2MB pages. Also, the guest has additional memory slots to hotplug more
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