trace: expand mem_info:size_shift to 4 bits
[qemu/ar7.git] / docs / virtio-pmem.rst
blobe77881b26f1c668cd9f808a45b6bd7979c55be63
2 ========================
3 QEMU virtio pmem
4 ========================
6  This document explains the setup and usage of the virtio pmem device
7  which is available since QEMU v4.1.0.
9  The virtio pmem device is a paravirtualized persistent memory device
10  on regular (i.e non-NVDIMM) storage.
12 Usecase
13 --------
15   Virtio pmem allows to bypass the guest page cache and directly use
16   host page cache. This reduces guest memory footprint as the host can
17   make efficient memory reclaim decisions under memory pressure.
19 o How does virtio-pmem compare to the nvdimm emulation supported by QEMU?
21   NVDIMM emulation on regular (i.e. non-NVDIMM) host storage does not
22   persist the guest writes as there are no defined semantics in the device
23   specification. The virtio pmem device provides guest write persistence
24   on non-NVDIMM host storage.
26 virtio pmem usage
27 -----------------
29   A virtio pmem device backed by a memory-backend-file can be created on
30   the QEMU command line as in the following example:
32   -object memory-backend-file,id=mem1,share,mem-path=./virtio_pmem.img,size=4G
33   -device virtio-pmem-pci,memdev=mem1,id=nv1
35    where:
36    - "object memory-backend-file,id=mem1,share,mem-path=<image>, size=<image size>"
37      creates a backend file with the specified size.
39    - "device virtio-pmem-pci,id=nvdimm1,memdev=mem1" creates a virtio pmem
40      pci device whose storage is provided by above memory backend device.
42   Multiple virtio pmem devices can be created if multiple pairs of "-object"
43   and "-device" are provided.
45 Hotplug
46 -------
48 Virtio pmem devices can be hotplugged via the QEMU monitor. First, the
49 memory backing has to be added via 'object_add'; afterwards, the virtio
50 pmem device can be added via 'device_add'.
52 For example, the following commands add another 4GB virtio pmem device to
53 the guest:
55  (qemu) object_add memory-backend-file,id=mem2,share=on,mem-path=virtio_pmem2.img,size=4G
56  (qemu) device_add virtio-pmem-pci,id=virtio_pmem2,memdev=mem2
58 Guest Data Persistence
59 ----------------------
61  Guest data persistence on non-NVDIMM requires guest userspace applications
62  to perform fsync/msync. This is different from a real nvdimm backend where
63  no additional fsync/msync is required. This is to persist guest writes in
64  host backing file which otherwise remains in host page cache and there is
65  risk of losing the data in case of power failure.
67  With virtio pmem device, MAP_SYNC mmap flag is not supported. This provides
68  a hint to application to perform fsync for write persistence.
70 Limitations
71 ------------
72 - Real nvdimm device backend is not supported.
73 - virtio pmem hotunplug is not supported.
74 - ACPI NVDIMM features like regions/namespaces are not supported.
75 - ndctl command is not supported.