wiki/gofurther/vfio-mdev.md

3.4 KiB

title description published date tags editor dateCreated
Virtual Function I/O Mediated devices (vfio-mdev) Create and Configure Virtual Function I/O Mediated devices (vfio-mdev) true 2022-07-21T21:10:41.046Z markdown 2022-07-21T21:10:41.046Z

Configure Virtual Function I/O Mediated devices (vfio-mdev)

Virtual Function I/O Mediated devices (vfio-mdev) allows you to split your GPU into virtual GPUs (vGPus), which are multiple virtual instances that can be managed using the native driver of your GPU.

These instructions only cover Intel GPUs that are compatible with Virtual Function I/O (VFIO) Mediated devices (gen 5th to gen 9th, perhaps 10th).

For Xe Intel graphics (11th and onward) and other cards, use SR-IOV-based GPUs.

Preparation

  • Make sure to update the grub first
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  • Reboot
Reboot
  • Modify available GPU Aperture size (GPU memory) in the BIOS/UEFI.
To-do

Create a virtual GPU

  • List available virtual GPUs
mdevctl types
0000:00:02.0
  i915-GVTg_V5_1
    Available instances: 1
    Device API: vfio-pci
    Description: low_gm_size: 512MB, high_gm_size: 2048MB, fence: 4, resolution: 1920x1200, weight: 16
  i915-GVTg_V5_2
    Available instances: 2
    Device API: vfio-pci
    Description: low_gm_size: 256MB, high_gm_size: 1024MB, fence: 4, resolution: 1920x1200, weight: 8
  i915-GVTg_V5_4
    Available instances: 5
    Device API: vfio-pci
    Description: low_gm_size: 128MB, high_gm_size: 512MB, fence: 4, resolution: 1920x1200, weight: 4
  i915-GVTg_V5_8
    Available instances: 7
    Device API: vfio-pci
    Description: low_gm_size: 64MB, high_gm_size: 384MB, fence: 4, resolution: 1024x768, weight: 2
  • You may need to increase GPU aperture size, or memory, if there is no available instance

The i915-GVTg_V5_4 kind seems to offer the best trade-offs between the available resolution and the number of available instances.

  • Generate unique id
uuidgen
7686131b-b229-4768-a02c-35d1dbed7c66
  • Start a vGPU based off this id and of type i915-GVTg_V5_4
sudo mdevctl start -u 7686131b-b229-4768-a02c-35d1dbed7c66 -p 0000:00:02.0 --type i915-GVTg_V5_4
  • Define, or make this vGPU permanent.
sudo mdevctl define -u 7686131b-b229-4768-a02c-35d1dbed7c66
  • Set it to auto-start when the host has boot up.
sudo mdevctl modify -u 7686131b-b229-4768-a02c-35d1dbed7c66 --auto
  • Verify it has successfully been created
mdevctl list -d
7686131b-b229-4768-a02c-35d1dbed7c66 0000:00:02.0 i915-GVTg_V5_4 auto (active)

Assign a virtual GPU to a virtual machine

  • Add that segment to a virtual machine's definition. Modify the UUID address according to the previously generated UUID.
    <hostdev mode="subsystem" type="mdev" managed="no" model="vfio-pci" display="on">
      <source>
        <address uuid="7686131b-b229-4768-a02c-35d1dbed7c66"/>
      </source>
      <address type="pci" domain="0x0000" bus="0x09" slot="0x00" function="0x0"/>
    </hostdev>
  • Notice the display on, and the the RAMFB section, which allows to see the output before an operating system takes over.

Remove any video device

  • Remove any video device

Resources