IGVT-g: Difference between revisions

From NixOS Wiki
imported>Samueldr
m Adds external resource link about that feature
imported>Gnidorah
No edit summary
Line 8: Line 8:


== NixOS configuration ==
== NixOS configuration ==
 
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
/etc/nixos/configuration.nix
   boot.kernelPackages = pkgs.linuxPackages_4_16;
   boot.kernelPackages = pkgs.linuxPackages_4_16;
   boot.kernelParams = [ "i915.enable_gvt=1" ];
   boot.kernelParams = [ "i915.enable_gvt=1" ];
Line 27: Line 26:
   ];
   ];
   virtualisation.libvirtd.enable = true;
   virtualisation.libvirtd.enable = true;
   users.extraUsers.'''user'''.extraGroups = [ "libvirtd" ];
   users.extraUsers.user.extraGroups = [ "libvirtd" ];
 
</nowiki>}}
== Create or destroy VGPU ==
== Create or destroy VGPU ==


Line 61: Line 60:


=== Bare Qemu ===
=== Bare Qemu ===
<syntaxHighlight lang="sh">
   qemu-system-x86_64 \
   qemu-system-x86_64 \
     -enable-kvm \
     -enable-kvm \
Line 68: Line 68:
     -serial stdio \
     -serial stdio \
     -display gtk,gl=on \
     -display gtk,gl=on \
     -device vfio-pci,sysfsdev=/sys/bus/mdev/devices/'''a297db4a-f4c2-11e6-90f6-d3b88d6c9525''',x-igd-opregion=on
     -device vfio-pci,sysfsdev=/sys/bus/mdev/devices/a297db4a-f4c2-11e6-90f6-d3b88d6c9525,x-igd-opregion=on
</syntaxHighlight>


=== libvirtd ===
=== libvirtd ===
If using virt-manager, create new or open existing VM. Its impossible to remove primary QXL videocard, but it will conflict, so change it to Cirrus.
If using virt-manager, create new or open existing VM. Its impossible to remove primary QXL videocard, but it will conflict, so change it to Cirrus.


sudo -E virsh edit '''win10'''
{{file|sudo -E virsh edit '''win10'''|xml|<nowiki>
  <domain type='kvm' '''xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0''''>
  <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0>
  <nowiki><!-- ... --></nowiki>
  <!-- ... -->
  <devices>
  <devices>
  <nowiki><!-- ... --></nowiki>
  <!-- ... -->
  <graphics type='spice'>
  <graphics type='spice'>
   <listen type='none'/>
   <listen type='none'/>
   <nowiki><!-- choose renderer via virt-manager --></nowiki>
   <!-- choose renderer via virt-manager -->
   <gl enable='yes'/>
   <gl enable='yes'/>
  </graphics>
  </graphics>
  <'''hostdev''' mode='subsystem' type='mdev' managed='no' model='vfio-pci'>
  <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'>
   <nowiki><source></nowiki>
   <source>
     <address uuid=''''a297db4a-f4c2-11e6-90f6-d3b88d6c9525''''/>
     <address uuid='a297db4a-f4c2-11e6-90f6-d3b88d6c9525'/>
   <nowiki></source></nowiki>
   </source>
   <nowiki><!-- assign to first available slot --></nowiki>
   <!-- assign to first available slot -->
   <address type='pci' domain='0x0000' bus='0x00' slot=''''0x05'''' function='0x0'/>
   <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
  </hostdev>
  </hostdev>
  </devices>
  </devices>
   <qemu:commandline>
   <qemu:commandline>
   <qemu:arg value='-set'/>
   <qemu:arg value='-set'/>
   <qemu:arg value='device.'''hostdev0'''.x-igd-opregion=on'/>
   <qemu:arg value='device.hostdev0.x-igd-opregion=on'/>
   </qemu:commandline>
   </qemu:commandline>
  </domain>
  </domain>


Finally use sudo virt-viewer --attach '''win10'''
Finally use sudo virt-viewer --attach '''win10'''
== See also ==
* [https://www.kraxel.org/blog/2018/04/vgpu-display-support-finally-merged-upstream/ <em>vgpu display support</em> on a contributor (kraxel)'s blog]

Revision as of 19:29, 9 May 2018

Intel GVT-g is a full GPU virtualization solution with mediated pass-through which allows host and multiple guests to share same Intel integrated videocard. Guest gets a near-native graphics peformance.

Win7-32 / Win7-64 / Win8.1-64 /Win10-RS1-64 are validated. Install recent Intel driver into the guest.

Hardware Requirements

For client platforms, 5th, 6th or 7th Generation Intel® Core Processor Graphics is required. For server platforms, E3_v4, E3_v5 or E3_v6 Xeon Processor Graphics is required.

NixOS configuration

/etc/nixos/configuration.nix
  boot.kernelPackages = pkgs.linuxPackages_4_16;
  boot.kernelParams = [ "i915.enable_gvt=1" ];
  nixpkgs.config.packageOverrides = super: let self = super.pkgs; in {
    linux_4_16 = super.linux_4_16.override {
      extraConfig = ''
  # since 4.16-rc1
  DRM_I915_GVT y
  DRM_I915_GVT_KVMGT m
      '';
    };
  };
  environment.systemPackages = with pkgs; [
  virtmanager
  virt-viewer
  libossp_uuid
  ];
  virtualisation.libvirtd.enable = true;
  users.extraUsers.user.extraGroups = [ "libvirtd" ];

Create or destroy VGPU

Show mode information

$ cat /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/i915-GVTg_V5_8/description 
low_gm_size: 64MB
high_gm_size: 384MB
fence: 4
resolution: 1024x768
weight: 2

Create

# uuid
a297db4a-f4c2-11e6-90f6-d3b88d6c9525
# echo "a297db4a-f4c2-11e6-90f6-d3b88d6c9525" > "/sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/i915-GVTg_V5_8/create"

Destroy

# echo 1 > /sys/bus/pci/devices/0000:00:02.0/a297db4a-f4c2-11e6-90f6-d3b88d6c9525/remove

Configure KVM

Support for local display is present in Qemu 2.12. Only BIOS (SeaBIOS) machine is supported, UEFI (OVMF) is not supported.

Bare Qemu

  qemu-system-x86_64 \
     -enable-kvm \
     -m 1G \
     -nodefaults \
     -M graphics=off \
     -serial stdio \
     -display gtk,gl=on \
     -device vfio-pci,sysfsdev=/sys/bus/mdev/devices/a297db4a-f4c2-11e6-90f6-d3b88d6c9525,x-igd-opregion=on

libvirtd

If using virt-manager, create new or open existing VM. Its impossible to remove primary QXL videocard, but it will conflict, so change it to Cirrus.

{{file|sudo -E virsh edit win10|xml|<nowiki>

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0>
<devices>
<graphics type='spice'>
 <listen type='none'/>
 <gl enable='yes'/>
</graphics>
<hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'>
    <address uuid='a297db4a-f4c2-11e6-90f6-d3b88d6c9525'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</hostdev>
</devices>
 <qemu:commandline>
  <qemu:arg value='-set'/>
  <qemu:arg value='device.hostdev0.x-igd-opregion=on'/>
 </qemu:commandline>
</domain>

Finally use sudo virt-viewer --attach win10