We are sharing RFC version of 'fake DAX' flushing
interface for feedback. This is still work in progress
and not yet ready for merging.
Prototype implements two major parts:
- Qemu virtio-pmem device
It exposes a persistent memory range to KVM guest which at host side is file
backed memory and works as persistent memory device. In addition to this it
provides a virtio flushing interface for KVM guest to do a Qemu side sync for
guest DAX persistent memory range.
- Guest virtio-pmem driver
Reads persistent memory range from paravirt device and registers with
'nvdimm/pmem' driver uses this information to allocate persistent memory range.
Also, we have implemented guest side of VIRTIO flushing interface.
Changes from previous RFC:
- Reuse existing 'pmem' code instead of creating an entirely new block driver.
- Use VIRTIO driver to register memory information with nvdimm_bus and create
- Use VIRTIO flushing interface from existing pmem driver code based on
registered flushign mechanism.
We have done the implementation based on suggestions here . Previous RFC is
shared here . Details of project idea for 'fake DAX' flushing is shared
here  & .
Work yet to be done:
- Qemu RAM address handling independent of PC-DIMM so that memory
operations(get_free_address) can be used for VIRTIO device type as well.
(David Hildenbrand CCed has a prototype for this).
- Qemu device flush functionality trigger with guest fsync on file.
- Qemu live migration work when host page cache is used.
- Multiple virtio-pmem disks support.
- Prepare virtio spec after we get feedback on current approach.
drivers/nvdimm/region_devs.c | 7 ++
drivers/virtio/Kconfig | 12 +++
drivers/virtio/Makefile | 1
drivers/virtio/virtio_pmem.c | 122 +++++++++++++++++++++++++++++++++++++++
include/linux/libnvdimm.h | 2
include/uapi/linux/virtio_ids.h | 1
include/uapi/linux/virtio_pmem.h | 61 +++++++++++++++++++
7 files changed, 206 insertions(+)