[Qemu-devel] [RFC v3 0/2] kvm "fake DAX" device flushing

Pankaj Gupta posted 2 patches 5 years, 9 months ago
Failed in applying to current master (apply log)
drivers/nvdimm/nd.h              |    1
drivers/nvdimm/pmem.c            |    4
drivers/nvdimm/region_devs.c     |   24 +++-
drivers/virtio/Kconfig           |    9 +
drivers/virtio/Makefile          |    1
drivers/virtio/virtio_pmem.c     |  190 +++++++++++++++++++++++++++++++++++++++
include/linux/libnvdimm.h        |    5 -
include/linux/virtio_pmem.h      |   44 +++++++++
include/uapi/linux/virtio_ids.h  |    1
include/uapi/linux/virtio_pmem.h |   40 ++++++++
10 files changed, 310 insertions(+), 9 deletions(-)
[Qemu-devel] [RFC v3 0/2] kvm "fake DAX" device flushing
Posted by Pankaj Gupta 5 years, 9 months ago
This is RFC V3 for 'fake DAX' flushing interface sharing
for review. This patchset has two parts:

- Guest virtio-pmem driver
  Guest driver reads persistent memory range from paravirt device 
  and registers with 'nvdimm_bus'. 'nvdimm/pmem' driver uses this 
  information to allocate persistent memory range. Also, we have 
  implemented guest side of VIRTIO flushing interface.

- 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 virtio device handling of flushing 
  interface. KVM guest performs Qemu side asynchronous sync using 
  this interface.

Changes from RFC v2:
- Add flush function in the nd_region in place of switching
  on a flag - Dan & Stefan
- Add flush completion function with proper locking and wait
  for host side flush completion - Stefan & Dan
- Keep userspace API in uapi header file - Stefan, MST
- Use LE fields & New device id - MST
- Indentation & spacing suggestions - MST & Eric
- Remove extra header files & add licensing - Stefan

Changes from RFC v1:
- Reuse existing 'pmem' code for registering persistent 
  memory and other operations instead of creating an entirely 
  new block driver.
- Use VIRTIO driver to register memory information with 
  nvdimm_bus and create region_type accordingly. 
- Call VIRTIO flush from existing pmem driver.

Details of project idea for 'fake DAX' flushing interface is 
shared [2] & [3].

Pankaj Gupta (2):
   Add virtio-pmem guest driver
   pmem: device flush over VIRTIO

[1] https://marc.info/?l=linux-mm&m=150782346802290&w=2
[2] https://www.spinics.net/lists/kvm/msg149761.html
[3] https://www.spinics.net/lists/kvm/msg153095.html  

 drivers/nvdimm/nd.h              |    1 
 drivers/nvdimm/pmem.c            |    4 
 drivers/nvdimm/region_devs.c     |   24 +++-
 drivers/virtio/Kconfig           |    9 +
 drivers/virtio/Makefile          |    1 
 drivers/virtio/virtio_pmem.c     |  190 +++++++++++++++++++++++++++++++++++++++
 include/linux/libnvdimm.h        |    5 -
 include/linux/virtio_pmem.h      |   44 +++++++++
 include/uapi/linux/virtio_ids.h  |    1 
 include/uapi/linux/virtio_pmem.h |   40 ++++++++
 10 files changed, 310 insertions(+), 9 deletions(-)


Re: [Qemu-devel] [RFC v3 0/2] kvm "fake DAX" device flushing
Posted by David Hildenbrand 5 years, 8 months ago
On 13.07.2018 09:52, Pankaj Gupta wrote:
> This is RFC V3 for 'fake DAX' flushing interface sharing
> for review. This patchset has two parts:
> 
> - Guest virtio-pmem driver
>   Guest driver reads persistent memory range from paravirt device 
>   and registers with 'nvdimm_bus'. 'nvdimm/pmem' driver uses this 
>   information to allocate persistent memory range. Also, we have 
>   implemented guest side of VIRTIO flushing interface.
> 
> - 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 virtio device handling of flushing 
>   interface. KVM guest performs Qemu side asynchronous sync using 
>   this interface.
> 
> Changes from RFC v2:
> - Add flush function in the nd_region in place of switching
>   on a flag - Dan & Stefan
> - Add flush completion function with proper locking and wait
>   for host side flush completion - Stefan & Dan
> - Keep userspace API in uapi header file - Stefan, MST
> - Use LE fields & New device id - MST
> - Indentation & spacing suggestions - MST & Eric
> - Remove extra header files & add licensing - Stefan
> 
> Changes from RFC v1:
> - Reuse existing 'pmem' code for registering persistent 
>   memory and other operations instead of creating an entirely 
>   new block driver.
> - Use VIRTIO driver to register memory information with 
>   nvdimm_bus and create region_type accordingly. 
> - Call VIRTIO flush from existing pmem driver.
> 
> Details of project idea for 'fake DAX' flushing interface is 
> shared [2] & [3].
> 
> Pankaj Gupta (2):
>    Add virtio-pmem guest driver
>    pmem: device flush over VIRTIO
> 
> [1] https://marc.info/?l=linux-mm&m=150782346802290&w=2
> [2] https://www.spinics.net/lists/kvm/msg149761.html
> [3] https://www.spinics.net/lists/kvm/msg153095.html  
> 
>  drivers/nvdimm/nd.h              |    1 
>  drivers/nvdimm/pmem.c            |    4 
>  drivers/nvdimm/region_devs.c     |   24 +++-
>  drivers/virtio/Kconfig           |    9 +
>  drivers/virtio/Makefile          |    1 
>  drivers/virtio/virtio_pmem.c     |  190 +++++++++++++++++++++++++++++++++++++++
>  include/linux/libnvdimm.h        |    5 -
>  include/linux/virtio_pmem.h      |   44 +++++++++
>  include/uapi/linux/virtio_ids.h  |    1 
>  include/uapi/linux/virtio_pmem.h |   40 ++++++++
>  10 files changed, 310 insertions(+), 9 deletions(-)
> 

Hi Pankaj,

do you have a branch for the QEMU part somewhere available? I want to
see how this works with MemoryDevice changes.

-- 

Thanks,

David / dhildenb

Re: [Qemu-devel] [RFC v3 0/2] kvm "fake DAX" device flushing
Posted by Pankaj Gupta 5 years, 8 months ago
Hi David,

> > for review. This patchset has two parts:
> > 
> > - Guest virtio-pmem driver
> >   Guest driver reads persistent memory range from paravirt device
> >   and registers with 'nvdimm_bus'. 'nvdimm/pmem' driver uses this
> >   information to allocate persistent memory range. Also, we have
> >   implemented guest side of VIRTIO flushing interface.
> > 
> > - 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 virtio device handling of flushing
> >   interface. KVM guest performs Qemu side asynchronous sync using
> >   this interface.
> > 
> > Changes from RFC v2:
> > - Add flush function in the nd_region in place of switching
> >   on a flag - Dan & Stefan
> > - Add flush completion function with proper locking and wait
> >   for host side flush completion - Stefan & Dan
> > - Keep userspace API in uapi header file - Stefan, MST
> > - Use LE fields & New device id - MST
> > - Indentation & spacing suggestions - MST & Eric
> > - Remove extra header files & add licensing - Stefan
> > 
> > Changes from RFC v1:
> > - Reuse existing 'pmem' code for registering persistent
> >   memory and other operations instead of creating an entirely
> >   new block driver.
> > - Use VIRTIO driver to register memory information with
> >   nvdimm_bus and create region_type accordingly.
> > - Call VIRTIO flush from existing pmem driver.
> > 
> > Details of project idea for 'fake DAX' flushing interface is
> > shared [2] & [3].
> > 
> > Pankaj Gupta (2):
> >    Add virtio-pmem guest driver
> >    pmem: device flush over VIRTIO
> > 
> > [1] https://marc.info/?l=linux-mm&m=150782346802290&w=2
> > [2] https://www.spinics.net/lists/kvm/msg149761.html
> > [3] https://www.spinics.net/lists/kvm/msg153095.html
> > 
> >  drivers/nvdimm/nd.h              |    1
> >  drivers/nvdimm/pmem.c            |    4
> >  drivers/nvdimm/region_devs.c     |   24 +++-
> >  drivers/virtio/Kconfig           |    9 +
> >  drivers/virtio/Makefile          |    1
> >  drivers/virtio/virtio_pmem.c     |  190
> >  +++++++++++++++++++++++++++++++++++++++
> >  include/linux/libnvdimm.h        |    5 -
> >  include/linux/virtio_pmem.h      |   44 +++++++++
> >  include/uapi/linux/virtio_ids.h  |    1
> >  include/uapi/linux/virtio_pmem.h |   40 ++++++++
> >  10 files changed, 310 insertions(+), 9 deletions(-)
> > 
> 
> Hi Pankaj,
> 
> do you have a branch for the QEMU part somewhere available? I want to
> see how this works with MemoryDevice changes.

o.k I will update the guest virtio-pmem and Qemu current changes
and share with you. BTW previous version is here:

https://marc.info/?l=kvm&m=153146839627143&w=2

Thanks,
Pankaj
 
> 
> --
> 
> Thanks,
> 
> David / dhildenb
> 
>