GPU Passthrough on Skylake NUC

Warning

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 Getting started guide for Intel NUC, with the following changes:

  1. Set up a Clear Linux Operating System

    Clear Linux 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 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 i915.nuclear_pageflip=1 root=/dev/nvme0n1p3 rw rootwait ignore_loglevel no_timer_check consoleblank=0 i915.tsd_init=7 i915.tsd_delay=2000 i915.avail_planes_per_pipe=0x01010F i915.domain_plane_owners=0x011111110000 i915.enable_guc_loading=0 i915.enable_guc_submission=0 i915.enable_preemption=1 i915.context_priority_mode=2 i915.enable_gvt=1 i915.enable_initial_modeset=0 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 UOS by running the modified launch_uos.sh in acrn-hypervisor/devicemodel/samples/nuc/launch_uos.sh

  9. After UOS 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