qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [RFC PATCH 0/8] virtio/vhost DMAR support


From: Jason Wang
Subject: [Qemu-devel] [RFC PATCH 0/8] virtio/vhost DMAR support
Date: Fri, 25 Mar 2016 10:13:21 +0800

Hi all:

As the userspace vitio driver became popular, this calls for the
request of secure DMA environemt (DMAR). So this series tries to make
DMAR works for virtio/vhost. The idea is let virtio/vhost co-work with
userspace iommu implememtation. This is done through:

- for virtio, do not assume address_space_memory and convert to use
  dma helpers.
- for vhost kernel, implement a device IOTLB by using device IOTLB API
  supported by kernel. With this API, vhost kernel can query IOTLB
  entry for a specified iova from qemu, qemu can invalidate an
  arbitrary range of iova in vhost kernel.

The device IOTLB API is totaly architecture independent, an example
implementation was done with intel iommu by:

- implement basic ATS (Address Translation Service) for virtio-pci,
  this will make device IOTLB visible for iommu driver in guest.
- implement device IOTLB descriptor processing in intel iommu, and
  trigger the device IOTLB invalidation in vhost through iommu
  notifier.

It could be easily ported to other IOMMU or architecture even if it
doesn't support device IOTLB. (e.g just invalidate the vhost IOTLB
during IOMMU IOTLB invalidation).

Test was done by:

- intel_iommu=on/strict in guest.
- vfio (unsafe interrupt mode) l2fwd in guest.

This main use case is the programs that use fixed mapping in guest
(e.g dpdk). If 1G hugepage were used in guest, thanks to the SLLPS
support, we can get 100% TLB hit rate for l2fwd in guest.

For the normal kernel driver which uses lots of dynamic mapping and
unmapping, we may see performance penalty, this could be optimized in
the future.

Please reivew.

Jason Wang (8):
  virtio: convert to use DMA api
  intel_iommu: name vtd address space with devfn
  intel_iommu: allocate new key when creating new address space
  exec: introduce address_space_get_iotlb_entry()
  virtio-pci: address space translation service (ATS) support
  intel_iommu: support device iotlb descriptor
  memory: handle alias for iommu notifier
  vhost_net: device IOTLB support

 exec.c                                    |  30 +++++
 hw/block/virtio-blk.c                     |   2 +-
 hw/char/virtio-serial-bus.c               |   3 +-
 hw/i386/intel_iommu.c                     |  92 ++++++++++++--
 hw/i386/intel_iommu_internal.h            |  13 +-
 hw/scsi/virtio-scsi.c                     |   4 +-
 hw/virtio/vhost-backend.c                 |  33 +++++
 hw/virtio/vhost.c                         | 203 ++++++++++++++++++++++++++----
 hw/virtio/virtio-pci.c                    |  23 +++-
 hw/virtio/virtio-pci.h                    |   4 +
 hw/virtio/virtio.c                        |  58 +++++----
 include/exec/memory.h                     |   7 ++
 include/hw/virtio/vhost-backend.h         |  14 +++
 include/hw/virtio/vhost.h                 |   6 +
 include/hw/virtio/virtio-access.h         |  64 ++++++++--
 include/hw/virtio/virtio-bus.h            |   1 +
 include/hw/virtio/virtio.h                |   4 +-
 include/standard-headers/linux/pci_regs.h |   1 +
 linux-headers/linux/vhost.h               |  35 ++++++
 memory.c                                  |   3 +
 20 files changed, 525 insertions(+), 75 deletions(-)

-- 
2.5.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]