All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Tian, Kevin" <kevin.tian@intel.com>
To: Alex Williamson <alex.williamson@redhat.com>,
	Yang Zhang <yang.zhang.wz@gmail.com>,
	"Song, Jike" <jike.song@intel.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	"Lv, Zhiyuan" <zhiyuan.lv@intel.com>,
	"Ruan, Shuai" <shuai.ruan@intel.com>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	qemu-devel <qemu-devel@nongnu.org>,
	"igvt-g@lists.01.org" <igvt-g@ml01.01.org>,
	Neo Jia <cjia@nvidia.com>
Subject: RE: VFIO based vGPU(was Re: [Announcement] 2015-Q3 release of XenGT - a Mediated ...)
Date: Tue, 26 Jan 2016 21:21:42 +0000	[thread overview]
Message-ID: <AADFC41AFE54684AB9EE6CBC0274A5D15F78EAEA@SHSMSX101.ccr.corp.intel.com> (raw)
In-Reply-To: <1453826249.26652.54.camel@redhat.com>

> From: Alex Williamson [mailto:alex.williamson@redhat.com]
> Sent: Wednesday, January 27, 2016 12:37 AM
> 
> On Tue, 2016-01-26 at 22:05 +0800, Yang Zhang wrote:
> > On 2016/1/26 15:41, Jike Song wrote:
> > > On 01/26/2016 05:30 AM, Alex Williamson wrote:
> > > > [cc +Neo @Nvidia]
> > > >
> > > > Hi Jike,
> > > >
> > > > On Mon, 2016-01-25 at 19:34 +0800, Jike Song wrote:
> > > > > On 01/20/2016 05:05 PM, Tian, Kevin wrote:
> > > > > > I would expect we can spell out next level tasks toward above
> > > > > > direction, upon which Alex can easily judge whether there are
> > > > > > some common VFIO framework changes that he can help :-)
> > > > >
> > > > > Hi Alex,
> > > > >
> > > > > Here is a draft task list after a short discussion w/ Kevin,
> > > > > would you please have a look?
> > > > >
> > > > > 	Bus Driver
> > > > >
> > > > > 		{ in i915/vgt/xxx.c }
> > > > >
> > > > > 		- define a subset of vfio_pci interfaces
> > > > > 		- selective pass-through (say aperture)
> > > > > 		- trap MMIO: interface w/ QEMU
> > > >
> > > > What's included in the subset?  Certainly the bus reset ioctls really
> > > > don't apply, but you'll need to support the full device interface,
> > > > right?  That includes the region info ioctl and access through the vfio
> > > > device file descriptor as well as the interrupt info and setup ioctls.
> > > >
> > >
> > > [All interfaces I thought are via ioctl:)  For other stuff like file
> > > descriptor we'll definitely keep it.]
> > >
> > > The list of ioctl commands provided by vfio_pci:
> > >
> > > 	- VFIO_DEVICE_GET_PCI_HOT_RESET_INFO
> > > 	- VFIO_DEVICE_PCI_HOT_RESET
> > >
> > > As you said, above 2 don't apply. But for this:
> > >
> > > 	- VFIO_DEVICE_RESET
> > >
> > > In my opinion it should be kept, no matter what will be provided in
> > > the bus driver.
> > >
> > > 	- VFIO_PCI_ROM_REGION_INDEX
> > > 	- VFIO_PCI_VGA_REGION_INDEX
> > >
> > > I suppose above 2 don't apply neither? For a vgpu we don't provide a
> > > ROM BAR or VGA region.
> > >
> > > 	- VFIO_DEVICE_GET_INFO
> > > 	- VFIO_DEVICE_GET_REGION_INFO
> > > 	- VFIO_DEVICE_GET_IRQ_INFO
> > > 	- VFIO_DEVICE_SET_IRQS
> > >
> > > Above 4 are needed of course.
> > >
> > > We will need to extend:
> > >
> > > 	- VFIO_DEVICE_GET_REGION_INFO
> > >
> > >
> > > a) adding a flag: DONT_MAP. For example, the MMIO of vgpu
> > > should be trapped instead of being mmap-ed.
> >
> > I may not in the context, but i am curious how to handle the DONT_MAP in
> > vfio driver? Since there are no real MMIO maps into the region and i
> > suppose the access to the region should be handled by vgpu in i915
> > driver, but currently most of the mmio accesses are handled by Qemu.
> 
> VFIO supports the following region attributes:
> 
> #define VFIO_REGION_INFO_FLAG_READ      (1 << 0) /* Region supports read */
> #define VFIO_REGION_INFO_FLAG_WRITE     (1 << 1) /* Region supports write */
> #define VFIO_REGION_INFO_FLAG_MMAP      (1 << 2) /* Region supports mmap */
> 
> If MMAP is not set, then the QEMU driver will do pread and/or pwrite to
> the specified offsets of the device file descriptor, depending on what
> accesses are supported.  This is all reported through the REGION_INFO
> ioctl for a given index.  If mmap is supported, the VM will have direct
> access to the area, without faulting to KVM other than to populate the
> mapping.  Without mmap support, a VM MMIO access traps into KVM, which
> returns out to QEMU to service the request, which then finds the
> MemoryRegion serviced through vfio, which will then perform a
> pread/pwrite through to the kernel vfio bus driver to handle the
> access.  Thanks,
> 

Today KVMGT (not using VFIO yet) registers I/O emulation callbacks to 
KVM, so VM MMIO access will be forwarded to KVMGT directly for 
emulation in kernel. If we reuse above R/W flags, the whole emulation 
path would be unnecessarily long with obvious performance impact. We
either need a new flag here to indicate in-kernel emulation (bias from
passthrough support), or just hide the region alternatively (let KVMGT
to handle I/O emulation itself like today).

Thanks
Kevin

WARNING: multiple messages have this Message-ID (diff)
From: "Tian, Kevin" <kevin.tian@intel.com>
To: Alex Williamson <alex.williamson@redhat.com>,
	Yang Zhang <yang.zhang.wz@gmail.com>,
	"Song, Jike" <jike.song@intel.com>
Cc: "Ruan, Shuai" <shuai.ruan@intel.com>, Neo Jia <cjia@nvidia.com>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	"igvt-g@lists.01.org" <igvt-g@ml01.01.org>,
	qemu-devel <qemu-devel@nongnu.org>,
	Gerd Hoffmann <kraxel@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	"Lv, Zhiyuan" <zhiyuan.lv@intel.com>
Subject: Re: [Qemu-devel] VFIO based vGPU(was Re: [Announcement] 2015-Q3 release of XenGT - a Mediated ...)
Date: Tue, 26 Jan 2016 21:21:42 +0000	[thread overview]
Message-ID: <AADFC41AFE54684AB9EE6CBC0274A5D15F78EAEA@SHSMSX101.ccr.corp.intel.com> (raw)
In-Reply-To: <1453826249.26652.54.camel@redhat.com>

> From: Alex Williamson [mailto:alex.williamson@redhat.com]
> Sent: Wednesday, January 27, 2016 12:37 AM
> 
> On Tue, 2016-01-26 at 22:05 +0800, Yang Zhang wrote:
> > On 2016/1/26 15:41, Jike Song wrote:
> > > On 01/26/2016 05:30 AM, Alex Williamson wrote:
> > > > [cc +Neo @Nvidia]
> > > >
> > > > Hi Jike,
> > > >
> > > > On Mon, 2016-01-25 at 19:34 +0800, Jike Song wrote:
> > > > > On 01/20/2016 05:05 PM, Tian, Kevin wrote:
> > > > > > I would expect we can spell out next level tasks toward above
> > > > > > direction, upon which Alex can easily judge whether there are
> > > > > > some common VFIO framework changes that he can help :-)
> > > > >
> > > > > Hi Alex,
> > > > >
> > > > > Here is a draft task list after a short discussion w/ Kevin,
> > > > > would you please have a look?
> > > > >
> > > > > 	Bus Driver
> > > > >
> > > > > 		{ in i915/vgt/xxx.c }
> > > > >
> > > > > 		- define a subset of vfio_pci interfaces
> > > > > 		- selective pass-through (say aperture)
> > > > > 		- trap MMIO: interface w/ QEMU
> > > >
> > > > What's included in the subset?  Certainly the bus reset ioctls really
> > > > don't apply, but you'll need to support the full device interface,
> > > > right?  That includes the region info ioctl and access through the vfio
> > > > device file descriptor as well as the interrupt info and setup ioctls.
> > > >
> > >
> > > [All interfaces I thought are via ioctl:)  For other stuff like file
> > > descriptor we'll definitely keep it.]
> > >
> > > The list of ioctl commands provided by vfio_pci:
> > >
> > > 	- VFIO_DEVICE_GET_PCI_HOT_RESET_INFO
> > > 	- VFIO_DEVICE_PCI_HOT_RESET
> > >
> > > As you said, above 2 don't apply. But for this:
> > >
> > > 	- VFIO_DEVICE_RESET
> > >
> > > In my opinion it should be kept, no matter what will be provided in
> > > the bus driver.
> > >
> > > 	- VFIO_PCI_ROM_REGION_INDEX
> > > 	- VFIO_PCI_VGA_REGION_INDEX
> > >
> > > I suppose above 2 don't apply neither? For a vgpu we don't provide a
> > > ROM BAR or VGA region.
> > >
> > > 	- VFIO_DEVICE_GET_INFO
> > > 	- VFIO_DEVICE_GET_REGION_INFO
> > > 	- VFIO_DEVICE_GET_IRQ_INFO
> > > 	- VFIO_DEVICE_SET_IRQS
> > >
> > > Above 4 are needed of course.
> > >
> > > We will need to extend:
> > >
> > > 	- VFIO_DEVICE_GET_REGION_INFO
> > >
> > >
> > > a) adding a flag: DONT_MAP. For example, the MMIO of vgpu
> > > should be trapped instead of being mmap-ed.
> >
> > I may not in the context, but i am curious how to handle the DONT_MAP in
> > vfio driver? Since there are no real MMIO maps into the region and i
> > suppose the access to the region should be handled by vgpu in i915
> > driver, but currently most of the mmio accesses are handled by Qemu.
> 
> VFIO supports the following region attributes:
> 
> #define VFIO_REGION_INFO_FLAG_READ      (1 << 0) /* Region supports read */
> #define VFIO_REGION_INFO_FLAG_WRITE     (1 << 1) /* Region supports write */
> #define VFIO_REGION_INFO_FLAG_MMAP      (1 << 2) /* Region supports mmap */
> 
> If MMAP is not set, then the QEMU driver will do pread and/or pwrite to
> the specified offsets of the device file descriptor, depending on what
> accesses are supported.  This is all reported through the REGION_INFO
> ioctl for a given index.  If mmap is supported, the VM will have direct
> access to the area, without faulting to KVM other than to populate the
> mapping.  Without mmap support, a VM MMIO access traps into KVM, which
> returns out to QEMU to service the request, which then finds the
> MemoryRegion serviced through vfio, which will then perform a
> pread/pwrite through to the kernel vfio bus driver to handle the
> access.  Thanks,
> 

Today KVMGT (not using VFIO yet) registers I/O emulation callbacks to 
KVM, so VM MMIO access will be forwarded to KVMGT directly for 
emulation in kernel. If we reuse above R/W flags, the whole emulation 
path would be unnecessarily long with obvious performance impact. We
either need a new flag here to indicate in-kernel emulation (bias from
passthrough support), or just hide the region alternatively (let KVMGT
to handle I/O emulation itself like today).

Thanks
Kevin

  reply	other threads:[~2016-01-26 21:21 UTC|newest]

Thread overview: 118+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-18  2:39 VFIO based vGPU(was Re: [Announcement] 2015-Q3 release of XenGT - a Mediated ...) Jike Song
2016-01-18  2:39 ` [Qemu-devel] " Jike Song
2016-01-18  4:47 ` Alex Williamson
2016-01-18  4:47   ` [Qemu-devel] " Alex Williamson
2016-01-18  8:56   ` Jike Song
2016-01-18  8:56     ` [Qemu-devel] " Jike Song
2016-01-18 19:05     ` Alex Williamson
2016-01-18 19:05       ` [Qemu-devel] " Alex Williamson
2016-01-20  8:59       ` Jike Song
2016-01-20  8:59         ` [Qemu-devel] " Jike Song
2016-01-20  9:05         ` Tian, Kevin
2016-01-20  9:05           ` [Qemu-devel] " Tian, Kevin
2016-01-25 11:34           ` Jike Song
2016-01-25 11:34             ` [Qemu-devel] " Jike Song
2016-01-25 21:30             ` Alex Williamson
2016-01-25 21:30               ` [Qemu-devel] " Alex Williamson
2016-01-25 21:45               ` Tian, Kevin
2016-01-25 21:45                 ` [Qemu-devel] " Tian, Kevin
2016-01-25 21:48                 ` Tian, Kevin
2016-01-25 21:48                   ` [Qemu-devel] " Tian, Kevin
2016-01-26  9:48                 ` Neo Jia
2016-01-26  9:48                   ` [Qemu-devel] " Neo Jia
2016-01-26 10:20                 ` Neo Jia
2016-01-26 10:20                   ` [Qemu-devel] " Neo Jia
2016-01-26 19:24                   ` Tian, Kevin
2016-01-26 19:24                     ` [Qemu-devel] " Tian, Kevin
2016-01-26 19:29                     ` Neo Jia
2016-01-26 19:29                       ` [Qemu-devel] " Neo Jia
2016-01-26 20:06                   ` Alex Williamson
2016-01-26 20:06                     ` [Qemu-devel] " Alex Williamson
2016-01-26 21:38                     ` Tian, Kevin
2016-01-26 21:38                       ` [Qemu-devel] " Tian, Kevin
2016-01-26 22:28                     ` Neo Jia
2016-01-26 22:28                       ` [Qemu-devel] " Neo Jia
2016-01-26 23:30                       ` Alex Williamson
2016-01-26 23:30                         ` [Qemu-devel] " Alex Williamson
2016-01-27  9:14                         ` Neo Jia
2016-01-27  9:14                           ` [Qemu-devel] " Neo Jia
2016-01-27 16:10                           ` Alex Williamson
2016-01-27 16:10                             ` [Qemu-devel] " Alex Williamson
2016-01-27 21:48                             ` Neo Jia
2016-01-27 21:48                               ` [Qemu-devel] " Neo Jia
2016-01-27  8:06                     ` Kirti Wankhede
2016-01-27  8:06                       ` [Qemu-devel] " Kirti Wankhede
2016-01-27 16:00                       ` Alex Williamson
2016-01-27 16:00                         ` [Qemu-devel] " Alex Williamson
2016-01-27 20:55                         ` Kirti Wankhede
2016-01-27 20:55                           ` [Qemu-devel] " Kirti Wankhede
2016-01-27 21:58                           ` Alex Williamson
2016-01-27 21:58                             ` [Qemu-devel] " Alex Williamson
2016-01-28  3:01                             ` Kirti Wankhede
2016-01-28  3:01                               ` [Qemu-devel] " Kirti Wankhede
2016-01-26  7:41               ` Jike Song
2016-01-26  7:41                 ` [Qemu-devel] " Jike Song
2016-01-26 14:05                 ` Yang Zhang
2016-01-26 14:05                   ` [Qemu-devel] " Yang Zhang
2016-01-26 16:37                   ` Alex Williamson
2016-01-26 16:37                     ` [Qemu-devel] " Alex Williamson
2016-01-26 21:21                     ` Tian, Kevin [this message]
2016-01-26 21:21                       ` Tian, Kevin
2016-01-26 21:30                       ` Neo Jia
2016-01-26 21:30                         ` [Qemu-devel] " Neo Jia
2016-01-26 21:43                         ` Tian, Kevin
2016-01-26 21:43                           ` [Qemu-devel] " Tian, Kevin
2016-01-26 21:43                       ` Alex Williamson
2016-01-26 21:43                         ` [Qemu-devel] " Alex Williamson
2016-01-26 21:50                         ` Tian, Kevin
2016-01-26 21:50                           ` [Qemu-devel] " Tian, Kevin
2016-01-26 22:07                           ` Alex Williamson
2016-01-26 22:07                             ` [Qemu-devel] " Alex Williamson
2016-01-26 22:15                             ` Tian, Kevin
2016-01-26 22:15                               ` [Qemu-devel] " Tian, Kevin
2016-01-26 22:27                               ` Alex Williamson
2016-01-26 22:27                                 ` [Qemu-devel] " Alex Williamson
2016-01-26 22:39                                 ` Tian, Kevin
2016-01-26 22:39                                   ` [Qemu-devel] " Tian, Kevin
2016-01-26 22:56                                   ` Alex Williamson
2016-01-26 22:56                                     ` [Qemu-devel] " Alex Williamson
2016-01-27  1:47                                     ` Jike Song
2016-01-27  1:47                                       ` [Qemu-devel] " Jike Song
2016-01-27  3:07                                       ` Alex Williamson
2016-01-27  3:07                                         ` [Qemu-devel] " Alex Williamson
2016-01-27  5:43                                         ` Jike Song
2016-01-27  5:43                                           ` [Qemu-devel] " Jike Song
2016-01-27 16:19                                           ` Alex Williamson
2016-01-27 16:19                                             ` [Qemu-devel] " Alex Williamson
2016-01-28  6:00                                             ` Jike Song
2016-01-28  6:00                                               ` [Qemu-devel] " Jike Song
2016-01-28 15:23                                               ` Alex Williamson
2016-01-28 15:23                                                 ` [Qemu-devel] " Alex Williamson
2016-01-29  7:20                                                 ` Jike Song
2016-01-29  7:20                                                   ` [Qemu-devel] " Jike Song
2016-01-29  8:49                                                   ` [iGVT-g] " Jike Song
2016-01-29  8:49                                                     ` [Qemu-devel] " Jike Song
2016-01-29 18:50                                                     ` Alex Williamson
2016-01-29 18:50                                                       ` [Qemu-devel] " Alex Williamson
2016-02-01 13:10                                                       ` Gerd Hoffmann
2016-02-01 13:10                                                         ` [Qemu-devel] " Gerd Hoffmann
2016-02-01 21:44                                                         ` Alex Williamson
2016-02-01 21:44                                                           ` [Qemu-devel] " Alex Williamson
2016-02-02  7:28                                                           ` Gerd Hoffmann
2016-02-02  7:28                                                             ` [Qemu-devel] " Gerd Hoffmann
2016-02-02  7:35                                                           ` Zhiyuan Lv
2016-02-02  7:35                                                             ` [Qemu-devel] " Zhiyuan Lv
2016-01-27  1:52                                     ` Yang Zhang
2016-01-27  1:52                                       ` [Qemu-devel] " Yang Zhang
2016-01-27  3:37                                       ` Alex Williamson
2016-01-27  3:37                                         ` [Qemu-devel] " Alex Williamson
2016-01-27  0:06                   ` Jike Song
2016-01-27  0:06                     ` [Qemu-devel] " Jike Song
2016-01-27  1:34                     ` Yang Zhang
2016-01-27  1:34                       ` [Qemu-devel] " Yang Zhang
2016-01-27  1:51                       ` Jike Song
2016-01-27  1:51                         ` [Qemu-devel] " Jike Song
2016-01-26 16:12                 ` Alex Williamson
2016-01-26 16:12                   ` [Qemu-devel] " Alex Williamson
2016-01-26 21:57                   ` Tian, Kevin
2016-01-26 21:57                     ` [Qemu-devel] " Tian, Kevin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=AADFC41AFE54684AB9EE6CBC0274A5D15F78EAEA@SHSMSX101.ccr.corp.intel.com \
    --to=kevin.tian@intel.com \
    --cc=alex.williamson@redhat.com \
    --cc=cjia@nvidia.com \
    --cc=igvt-g@ml01.01.org \
    --cc=jike.song@intel.com \
    --cc=kraxel@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=shuai.ruan@intel.com \
    --cc=yang.zhang.wz@gmail.com \
    --cc=zhiyuan.lv@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.