Enable GPU Passthrough on the Skylake NUC

This community reference release for the Skylake NUC with GPU passthrough is a one-time snapshot release and is not supported or maintained.

Software Configuration

Source code patches are provided in skl-patches-for-acrn.tar file to work around or add support for enabling GPU passthrough:

  • 0001-hv-workaround-for-system-hang-on-non-apicv-devices.patch
  • 0002-hv-More-changes-to-enable-GPU-passthru.patch
  • 0003-dm-increase-interrupt-storm-threshold-for-gpu-passth.patch
  • 0004-dm-passthrough-opregion-to-uos-gpu.patch
  • 0005-dm-modify-launch-script-to-support-gpu-passthrough.patch

Software Setup

Please follow the Use SDC Mode on the NUC, with the following changes:

  1. Set up a Clear Linux Operating System

    Clear Linux OS will update to the latest version during installation. Run this command (as root) to roll back to version 25130, using the -x switch to ignore version mismatch:

    # swupd verify -x --fix --picky -m 25130
    # swupd autoupdate --disable
    # reboot
    
  2. Add the ACRN hypervisor to the EFI Partition

    Refer to Build ACRN from Source to build the hypervisor, device model, and tools.

    Download and untar this skl-patches-for-acrn.tar file, apply these patches to the acrn-hypervisor, and build it:

    $ git clone https://github.com/projectacrn/acrn-hypervisor
    $ cd acrn-hypervisor
    $ git checkout acrn-2018w39.6-140000p
    $ curl https://projectacrn.github.io/latest/_static/downloads/skl-patches-for-acrn.tar | tar x
    $ git am *.patch
    $ make
    

    This build process creates new acrn-dm, acrn.efi and launch_uos.sh files.

  3. Replace acrn-dm with this new version (as root):

    # cp build/devicemodel/acrn-dm  /usr/bin/acrn-dm
    
  4. Put the new acrn.efi hypervisor application (included in the Clear Linux OS release) on the EFI partition (as root):

    # mount /dev/nvme0n1p1 /mnt
    # mkdir /mnt/EFI/acrn
    # cp build/hypervisor/acrn.efi /mnt/EFI/acrn/
    
  5. Configure the EFI firmware to boot the ACRN hypervisor by default. This assumes you are on an NVMe SSD as in the Skull Canyon:

    # efibootmgr -c -l "\EFI\acrn\acrn.efi" -d /dev/nvme0n1 -p 1 -L "ACRN"
    
  6. Create a boot entry for ACRN Service OS by making a few edits to the acrn.conf file (note the options line must be one long line, without any line breaks):

    # vim /mnt/loader/entries/acrn.conf
    title The ACRN Service OS
    linux   /EFI/org.clearlinux/kernel-org.clearlinux.pk414-sos.4.14.68-99
    options pci_devices_ignore=(0:18:1) console=tty0 console=ttyS2 root=/dev/nvme0n1p3 rw rootwait ignore_loglevel no_timer_check consoleblank=0 i915.nuclear_pageflip=1 i915.avail_planes_per_pipe=0x01010F i915.domain_plane_owners=0x011111110000 i915.enable_gvt=1 i915.enable_guc=0 hvlog=2M@0x1FE00000
    
  7. Don’t Enable weston service (skip this step found in the NUC’s getting started guide).

  8. Set up Reference User VM by running the modified launch_uos.sh in acrn-hypervisor/devicemodel/samples/nuc/launch_uos.sh

  9. After User VM is launched, do these steps to run GFX workloads:

    1. install weston and glmark2:

      #swupd bundle-add desktop glmark2
      
    2. Add new user cl_uos:

      # useradd cl_uos
      # passwd cl_uos
      # usermod -G wheel -a cl_uos
      
    3. Enable weston service:

      # systemctl enable weston@cl_uos
      # systemctl start weston@cl_uos
      
    4. Disable weston screen saver:

      # vim .config/weston.ini
      [core]
      idle-time=0
      
    5. run glmark2:

      # glmark2-es2-wayland