From: Zhi Wang <zhi.a.wang@intel.com>
To: intel-gfx@lists.freedesktop.org, igvt-g@lists.01.org
Cc: daniel.vetter@ffwll.ch, david.j.cowperthwaite@intel.com
Subject: [RFC 00/29] iGVT-g implementation in i915
Date: Thu, 28 Jan 2016 18:21:22 +0800 [thread overview]
Message-ID: <1453976511-27322-1-git-send-email-zhi.a.wang@intel.com> (raw)
This patchset implements the core part of Intel GVT-g [1] for graphics
virtualization. The patchset consists of two subsets: One is the
device model implementation of vGPUs for virtual machines (patch 09 -
29) Another is the needed i915 native driver changes for that
implementation (patch 01 - 08). We hope to get feedbacks of the native
driver changes from i915 developers, while the device model part can
be a reference to see how we utilize those changes.
Background
----------
Back to 1 year ago, we ever sent RFC of iGVT-g changes to native i915
drivers, so called "host mediation"[2]. The architecture is that host
i915 driver runs on top of iGVT-g device model, and device model
controls hardware directly if it is enabled. After discussion, we
agreed an architecture change to let native driver on host controls
hardware directly, and integrate virtualization changes into i915.
Last year we followed this direction to remove host mediation, and
move some virtualization related logics into i915. For instance, the
interrupt part [3]. Later we found that the i915 changes can be much
reduced if we virtualize more resources for VMs. Now we are happy to
see that the i915 changes are very limited.
Major i915 changes
------------------
In the new architecture, device-model works as a client. We do not
mediate any i915 accesses of hardware resources. VM's vGPU resources
keep virtual as much as possible. One example is interrupt. vGPU's
interrupt will be triggered either through virtual timer (vblnk) or
workload status changes (ctx_switch), not directly bound to hardware
interrupts. Hence we do not need to touch i915 interrupt framework at
all.
The remaining i915 changes are:
- vGPU guest framebuffer GEM object support
Wrap a guest framebuffer into a host i915 GEM object. So host graphics
application could be able to access guest display surface easily via
DRM/GL APIs.
Related commits:
drm/i915: Support vGPU guest framebuffer GEM object
- Host i915 GGTT graphics memory space/fence registers balloon
i915 host owns limited GGTT graphics memory space/fence registers
under GVT environment, others are managed by GVT resource allocator,
which allocates/de-allocates these resources for GVT guest.
Related commits:
drm/i915: Introduce host graphics memory balloon
- GVT context creation
GVT workload scheduler needs special host LRC contexts, so called
"shadow LRC context" to submit guest workload to host i915. During the
guest workload submission. GVT fills the shadow LRC context with the
content guest LRC context: engine context is copied without changes,
ring context is mostly owned by host i915, except the PPGTT root
pointers, which will be filled with the shadow PPGTT page table root
pointers managed by GVT-g.
Related commits:
drm/i915: gem: Introduce i915_gem_create_gvt_context()
drm/i915: Ondemand populate context addressing mode bit
drm/i915: Do not initialize the engine state of GVT context
drm/i915: Do not populate PPGTT root pointers for GVT context
- GVT context scheduling
Since GVT guest workload will also be dispatched through i915 GEM
submission system, the GVT context mentioned above is also scheduled
by host i915 LRC routines. The workload inside a GVT context may come
from different GVT guests, some render MMIOs have to be configured
with the guest render MMIOs before the GVT context gets kicked out.
It's hard to submit a GVT context with a host LRC context in the same
ELSP combo.
The LRC context submission policy for GVT context is adjusted as:
* If ELSP submission routines pick a GVT context, then stop to pick
next context. (Single ELSP submission - for easy render MMIOs save/restore)
* If ELSP submission routines pick a i915 context, and the next
context is a GVT context, then stop pick the next context. (Single
ELSP submission - we cannot skip the GVT context, as the seqno of
workload in GVT context may be passed, but the workload in GVT context
haven't be executed yet)
Related commits:
drm/i915: GVT context scheduling
Difference from community release
---------------------------------
This patchset is different from regular iGVT-g code release[4], which
is still based on old host-mediated architecture. Furthermore, this
patchset only supports BDW whereas code release supports HSW/BDW/SKL.
We will add SKL support later based on this RFC code and HSW support
will be dropped.
Internally we tested this RFC patchset with both linux and windows VM
and the architecture changes work fine.
Acknowledgement
---------------
iGVT-g implementation is several years effort and many people
contributed to the code. There names are not here yet. In later formal
patchset we will reflect individual's contribution.
Meanwhile, in the previous iGVT-g related discussion, Daniel, Chris
and Joonas ever gave very good inputs. We appreciate them and look
forward to more comments/suggestions from community.
We are trying to get more familiar with i915 and willing to adopt
suggestions to keep improving. We hope to work with community together
to make iGVT-g a great component in i915 to support graphics
virtualization. Thanks!
Reference
---------
[1] https://01.org/igvt-g
[2] http://lists.freedesktop.org/archives/intel-gfx/2014-September/053098.html
[3] http://lists.freedesktop.org/archives/intel-gfx/2015-September/075397.html
[4] http://lists.freedesktop.org/archives/intel-gfx/2016-January/086372.html
*** BLURB HERE ***
Bing Niu (2):
drm/i915: Introduce host graphics memory balloon for gvt
drm/i915: gvt: Full display virtualization
Niu Bing (1):
drm/i915: gvt: vGPU framebuffer format decoder
Niu,Bing (1):
drm/i915: gvt: vGPU MMIO register emulation
Yi Sun (1):
drm/i915: gvt: Introduce GVT control interface
Yulei Zhang (2):
drm/i915: gvt: Resource allocator
drm/i915: gvt: vGPU command scanner
Zhi Wang (21):
drm/i915/gvt: Introduce the basic architecture of GVT-g
drm/i915: Introduce GVT context creation API
drm/i915: Ondemand populate context addressing mode bit
drm/i915: Do not populate PPGTT root pointers for GVT context
drm/i915: Do not initialize the engine state of GVT context
drm/i915: GVT context scheduling
drm/i915: gvt: Basic mmio emulation state
drm/i915: gvt: update PVINFO page definition in i915_vgpu.h
drm/i915: gvt: vGPU life cycle management
drm/i915: gvt: trace stub
drm/i915: gvt: vGPU interrupt emulation framework
drm/i915: gvt: vGPU graphics memory emulation framework
drm/i915: gvt: Generic MPT framework
gvt: Xen hypervisor GVT-g MPT module
drm/i915: gvt: vGPU configuration emulation
drm/i915: gvt: vGPU OpRegion emulation
drm/i915: gvt: Full execlist status emulation
drm/i915: gvt: vGPU execlist workload submission
drm/i915: gvt: workload scheduler
drm/i915: gvt: vGPU schedule policy framework
drm/i915: gvt: vGPU context switch
Zhiyuan Lv (1):
drm/i915: Support vGPU guest framebuffer GEM object
arch/x86/include/asm/xen/hypercall.h | 7 +
arch/x86/include/asm/xen/interface.h | 4 +
arch/x86/xen/mmu.c | 83 ++
drivers/gpu/drm/i915/Kconfig | 16 +
drivers/gpu/drm/i915/Makefile | 3 +
drivers/gpu/drm/i915/gvt/Makefile | 8 +
drivers/gpu/drm/i915/gvt/aperture_gm.c | 225 +++
drivers/gpu/drm/i915/gvt/cfg_space.c | 190 +++
drivers/gpu/drm/i915/gvt/cfg_space.h | 33 +
drivers/gpu/drm/i915/gvt/cmd_parser.c | 2018 +++++++++++++++++++++++++++
drivers/gpu/drm/i915/gvt/cmd_parser.h | 466 +++++++
drivers/gpu/drm/i915/gvt/control.c | 181 +++
drivers/gpu/drm/i915/gvt/debug.h | 103 ++
drivers/gpu/drm/i915/gvt/display.c | 233 ++++
drivers/gpu/drm/i915/gvt/display.h | 129 ++
drivers/gpu/drm/i915/gvt/edid.c | 493 +++++++
drivers/gpu/drm/i915/gvt/edid.h | 184 +++
drivers/gpu/drm/i915/gvt/execlist.c | 612 +++++++++
drivers/gpu/drm/i915/gvt/execlist.h | 179 +++
drivers/gpu/drm/i915/gvt/fb_decoder.c | 325 +++++
drivers/gpu/drm/i915/gvt/fb_decoder.h | 110 ++
drivers/gpu/drm/i915/gvt/gtt.c | 1912 ++++++++++++++++++++++++++
drivers/gpu/drm/i915/gvt/gtt.h | 305 ++++
drivers/gpu/drm/i915/gvt/gvt.c | 446 ++++++
drivers/gpu/drm/i915/gvt/gvt.h | 715 ++++++++++
drivers/gpu/drm/i915/gvt/handlers.c | 2141 +++++++++++++++++++++++++++++
drivers/gpu/drm/i915/gvt/hypercall.h | 56 +
drivers/gpu/drm/i915/gvt/instance.c | 272 ++++
drivers/gpu/drm/i915/gvt/interrupt.c | 721 ++++++++++
drivers/gpu/drm/i915/gvt/interrupt.h | 257 ++++
drivers/gpu/drm/i915/gvt/mmio.c | 545 ++++++++
drivers/gpu/drm/i915/gvt/mmio.h | 105 ++
drivers/gpu/drm/i915/gvt/mpt.h | 169 +++
drivers/gpu/drm/i915/gvt/opregion.c | 314 +++++
drivers/gpu/drm/i915/gvt/opregion.h | 34 +
drivers/gpu/drm/i915/gvt/params.c | 54 +
drivers/gpu/drm/i915/gvt/params.h | 49 +
drivers/gpu/drm/i915/gvt/perf.h | 69 +
drivers/gpu/drm/i915/gvt/reg.h | 889 ++++++++++++
drivers/gpu/drm/i915/gvt/render.c | 104 ++
drivers/gpu/drm/i915/gvt/render.h | 31 +
drivers/gpu/drm/i915/gvt/sched_policy.c | 295 ++++
drivers/gpu/drm/i915/gvt/sched_policy.h | 48 +
drivers/gpu/drm/i915/gvt/scheduler.c | 501 +++++++
drivers/gpu/drm/i915/gvt/scheduler.h | 85 ++
drivers/gpu/drm/i915/gvt/trace.h | 260 ++++
drivers/gpu/drm/i915/gvt/trace_points.c | 29 +
drivers/gpu/drm/i915/gvt/utility.c | 91 ++
drivers/gpu/drm/i915/i915_dma.c | 20 +
drivers/gpu/drm/i915/i915_drv.h | 29 +
drivers/gpu/drm/i915/i915_gem.c | 3 +
drivers/gpu/drm/i915/i915_gem_context.c | 38 +
drivers/gpu/drm/i915/i915_gem_gtt.c | 4 +-
drivers/gpu/drm/i915/i915_gem_gvtbuffer.c | 247 ++++
drivers/gpu/drm/i915/i915_vgpu.c | 16 +-
drivers/gpu/drm/i915/i915_vgpu.h | 94 +-
drivers/gpu/drm/i915/intel_lrc.c | 64 +-
drivers/xen/Kconfig | 5 +
drivers/xen/Makefile | 6 +
drivers/xen/xengt.c | 1153 ++++++++++++++++
include/uapi/drm/i915_drm.h | 38 +
include/xen/interface/hvm/hvm_op.h | 177 ++-
include/xen/interface/hvm/ioreq.h | 132 ++
include/xen/interface/memory.h | 28 +
include/xen/interface/xen.h | 107 ++
include/xen/xen-ops.h | 5 +
66 files changed, 18222 insertions(+), 43 deletions(-)
create mode 100644 drivers/gpu/drm/i915/gvt/Makefile
create mode 100644 drivers/gpu/drm/i915/gvt/aperture_gm.c
create mode 100644 drivers/gpu/drm/i915/gvt/cfg_space.c
create mode 100644 drivers/gpu/drm/i915/gvt/cfg_space.h
create mode 100644 drivers/gpu/drm/i915/gvt/cmd_parser.c
create mode 100644 drivers/gpu/drm/i915/gvt/cmd_parser.h
create mode 100644 drivers/gpu/drm/i915/gvt/control.c
create mode 100644 drivers/gpu/drm/i915/gvt/debug.h
create mode 100644 drivers/gpu/drm/i915/gvt/display.c
create mode 100644 drivers/gpu/drm/i915/gvt/display.h
create mode 100644 drivers/gpu/drm/i915/gvt/edid.c
create mode 100644 drivers/gpu/drm/i915/gvt/edid.h
create mode 100644 drivers/gpu/drm/i915/gvt/execlist.c
create mode 100644 drivers/gpu/drm/i915/gvt/execlist.h
create mode 100644 drivers/gpu/drm/i915/gvt/fb_decoder.c
create mode 100644 drivers/gpu/drm/i915/gvt/fb_decoder.h
create mode 100644 drivers/gpu/drm/i915/gvt/gtt.c
create mode 100644 drivers/gpu/drm/i915/gvt/gtt.h
create mode 100644 drivers/gpu/drm/i915/gvt/gvt.c
create mode 100644 drivers/gpu/drm/i915/gvt/gvt.h
create mode 100644 drivers/gpu/drm/i915/gvt/handlers.c
create mode 100644 drivers/gpu/drm/i915/gvt/hypercall.h
create mode 100644 drivers/gpu/drm/i915/gvt/instance.c
create mode 100644 drivers/gpu/drm/i915/gvt/interrupt.c
create mode 100644 drivers/gpu/drm/i915/gvt/interrupt.h
create mode 100644 drivers/gpu/drm/i915/gvt/mmio.c
create mode 100644 drivers/gpu/drm/i915/gvt/mmio.h
create mode 100644 drivers/gpu/drm/i915/gvt/mpt.h
create mode 100644 drivers/gpu/drm/i915/gvt/opregion.c
create mode 100644 drivers/gpu/drm/i915/gvt/opregion.h
create mode 100644 drivers/gpu/drm/i915/gvt/params.c
create mode 100644 drivers/gpu/drm/i915/gvt/params.h
create mode 100644 drivers/gpu/drm/i915/gvt/perf.h
create mode 100644 drivers/gpu/drm/i915/gvt/reg.h
create mode 100644 drivers/gpu/drm/i915/gvt/render.c
create mode 100644 drivers/gpu/drm/i915/gvt/render.h
create mode 100644 drivers/gpu/drm/i915/gvt/sched_policy.c
create mode 100644 drivers/gpu/drm/i915/gvt/sched_policy.h
create mode 100644 drivers/gpu/drm/i915/gvt/scheduler.c
create mode 100644 drivers/gpu/drm/i915/gvt/scheduler.h
create mode 100644 drivers/gpu/drm/i915/gvt/trace.h
create mode 100644 drivers/gpu/drm/i915/gvt/trace_points.c
create mode 100644 drivers/gpu/drm/i915/gvt/utility.c
create mode 100644 drivers/gpu/drm/i915/i915_gem_gvtbuffer.c
create mode 100644 drivers/xen/xengt.c
create mode 100644 include/xen/interface/hvm/ioreq.h
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next reply other threads:[~2016-01-28 10:23 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-28 10:21 Zhi Wang [this message]
2016-01-28 10:21 ` [RFC 01/29] drm/i915/gvt: Introduce the basic architecture of GVT-g Zhi Wang
2016-01-29 13:57 ` Joonas Lahtinen
2016-01-29 16:48 ` Chris Wilson
2016-02-03 6:28 ` Zhi Wang
2016-02-05 7:02 ` Zhiyuan Lv
2016-02-03 6:01 ` Zhi Wang
2016-02-03 7:01 ` Zhiyuan Lv
2016-02-04 11:25 ` Joonas Lahtinen
2016-02-16 9:54 ` Zhi Wang
2016-02-16 12:44 ` Jani Nikula
2016-02-16 14:08 ` Joonas Lahtinen
2016-01-28 10:21 ` [RFC 02/29] drm/i915: Introduce host graphics memory balloon for gvt Zhi Wang
2016-02-04 11:27 ` Joonas Lahtinen
2016-02-05 10:03 ` Zhiyuan Lv
2016-02-05 13:40 ` Joonas Lahtinen
2016-02-05 14:16 ` Zhiyuan Lv
2016-02-08 11:52 ` Joonas Lahtinen
2016-02-10 8:08 ` Daniel Vetter
2016-01-28 10:21 ` [RFC 03/29] drm/i915: Introduce GVT context creation API Zhi Wang
2016-01-28 10:21 ` [RFC 04/29] drm/i915: Ondemand populate context addressing mode bit Zhi Wang
2016-01-28 10:21 ` [RFC 05/29] drm/i915: Do not populate PPGTT root pointers for GVT context Zhi Wang
2016-01-28 10:21 ` [RFC 06/29] drm/i915: Do not initialize the engine state of " Zhi Wang
2016-01-28 10:21 ` [RFC 07/29] drm/i915: GVT context scheduling Zhi Wang
2016-01-28 10:21 ` [RFC 08/29] drm/i915: Support vGPU guest framebuffer GEM object Zhi Wang
2016-01-28 10:21 ` [RFC 09/29] drm/i915: gvt: Resource allocator Zhi Wang
2016-01-28 10:21 ` [RFC 10/29] drm/i915: gvt: Basic mmio emulation state Zhi Wang
2016-01-28 10:21 ` [RFC 11/29] drm/i915: gvt: update PVINFO page definition in i915_vgpu.h Zhi Wang
2016-01-28 10:21 ` [RFC 12/29] drm/i915: gvt: vGPU life cycle management Zhi Wang
2016-01-28 10:21 ` [RFC 13/29] drm/i915: gvt: trace stub Zhi Wang
2016-01-28 10:21 ` [RFC 14/29] drm/i915: gvt: vGPU interrupt emulation framework Zhi Wang
2016-01-28 10:21 ` [RFC 15/29] drm/i915: gvt: vGPU graphics memory " Zhi Wang
2016-01-28 10:21 ` [RFC 16/29] drm/i915: gvt: Generic MPT framework Zhi Wang
2016-01-28 10:21 ` [RFC 17/29] gvt: Xen hypervisor GVT-g MPT module Zhi Wang
2016-01-28 11:33 ` Joonas Lahtinen
2016-01-28 12:50 ` Zhiyuan Lv
2016-01-28 10:21 ` [RFC 18/29] drm/i915: gvt: vGPU configuration emulation Zhi Wang
2016-01-28 10:21 ` [RFC 19/29] drm/i915: gvt: vGPU OpRegion emulation Zhi Wang
2016-01-28 10:21 ` [RFC 20/29] drm/i915: gvt: vGPU framebuffer format decoder Zhi Wang
2016-01-28 10:21 ` [RFC 21/29] drm/i915: gvt: vGPU MMIO register emulation Zhi Wang
2016-01-28 10:21 ` [RFC 22/29] drm/i915: gvt: Full display virtualization Zhi Wang
2016-01-28 10:21 ` [RFC 23/29] drm/i915: gvt: Introduce GVT control interface Zhi Wang
2016-01-28 10:21 ` [RFC 24/29] drm/i915: gvt: Full execlist status emulation Zhi Wang
2016-01-28 10:21 ` [RFC 25/29] drm/i915: gvt: vGPU execlist workload submission Zhi Wang
2016-01-28 10:21 ` [RFC 26/29] drm/i915: gvt: workload scheduler Zhi Wang
2016-01-28 10:21 ` [RFC 27/29] drm/i915: gvt: vGPU schedule policy framework Zhi Wang
2016-01-28 10:21 ` [RFC 28/29] drm/i915: gvt: vGPU context switch Zhi Wang
2016-01-28 10:21 ` [RFC 29/29] drm/i915: gvt: vGPU command scanner Zhi Wang
2016-01-28 17:15 ` ✗ Fi.CI.BAT: failure for iGVT-g implementation in i915 Patchwork
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=1453976511-27322-1-git-send-email-zhi.a.wang@intel.com \
--to=zhi.a.wang@intel.com \
--cc=daniel.vetter@ffwll.ch \
--cc=david.j.cowperthwaite@intel.com \
--cc=igvt-g@lists.01.org \
--cc=intel-gfx@lists.freedesktop.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).