Setting up Kernel and Host User Space#

Follow the steps below to generate the necessary kernel and userspace files to set up an Ubuntu 22.04 hypervisor for hosting guest VMs.

Note: To run Windows VM installation for SR-IOV, you need an Ubuntu host with SR-IOV on a supported Intel Core platform with iGPU.

You can build the kernel either on an Ubuntu 22.04 host or in an Ubuntu 22.04 docker container on an Ubuntu host.

Required Host BIOS Settings#

Intel (VMX) Virtualization

Intel Advanced Menu -> CPU Configuration

Enabled

VT-d

Intel Advanced Menu -> System Agent (SA) Configuration

Enabled

SRIOV Enable

Intel Advanced Menu -> System Agent (SA) Configuration -> Graphics Configuration

Enabled

Intel(R) TCC Mode

Intel Advanced Menu -> Intel(R) Time Coordinated Computing

Disabled

#AC Split Lock

Intel Advanced Menu -> Intel(R) Time Coordinated Computing

Disabled

Attemp Secure Boot

Boot Maintenance Manager Menu -> Secure Boot Configuration Menu

Disabled

Note: A BIOS menu can vary depending on the release.

Install Ubuntu host#

  1. Download Ubuntu 22.04 (Jammy Jellyfish) Intel IOT ISO

  2. Install Ubuntu 22.04 (Jammy Jellyfish):

    # Copy the iso file into a USB drive
    sudo dd if=./ubuntu-22.04-desktop-amd64+intel-iot.iso of=/dev/sdX bs=4M && sync
    
    # Check the boot order number X of the USB drive
    sudo efibootmgr
    
    # Select the USB drive as the next boot device
    sudo efibootmgr -n X
    
    # Reboot into the drive to start the installation
    sudo reboot
    

Note: If operating behind a corporate firewall, setup proxy settings as required.

  1. In the Software & Updates GUI, make sure to download from Main server, as shown below:

    Software and Updates

  2. Upgrade the Ubuntu host software to the latest version:

    # Upgrade Ubuntu software
    # Generic host kernel installed from Ubuntu may be incompatible with board
    # Therefore after upgrade, continue to install host kernel and firmware before rebooting
    sudo apt -y update
    sudo apt -y upgrade
    

Setup custom Intel kernel on Ubuntu Host#

Kernel Setup prerequisites#

  1. MultiOS virtualization scripts, obtained from Your Intel Representative.

  2. kernel-config-6_12.zip (included in the package above)

Build custom Intel Kernel#

  1. Create a working directory:

    # Create a working directory
    mkdir <work directory>
    cd <work directory>
    
  2. Extract files

    # Extract files
    unzip -jo virtualization.multios.kvm.scripts-rpls_sriov_kvm_multios_emt-3.1_ww2525.zip
    unzip -jo kernel-config-6_12.zip
    
  3. Build the Kernel debian files and package them:

    # build kernel debs
    ./sriov_prepare_kernel.sh
    
    # package deb files
    cd sriov_build
    find . -name "*.deb"
    ./linux-headers-6.12.xx-lts2024-iotg_xxxx_amd64.deb
    ./linux-image-6.12.xx-lts2024-iotg-dbg_amd64.deb
    ./linux-image-6.12.xx-lts2024-iotg_xxxx_amd64.deb
    ./linux-libc-dev_6.12.xx-xxxx_amd64.deb
    
  4. Create the lts2024-iotg-kernel-rel.tar.gz package and copy it to the working directory:

    # Create lts2024-iotg-kernel-rel.tar.gz
    tar czvf lts2024-iotg-kernel-rel.tar.gz *.deb
    
    # copy to working dir
    cd -
    cp sriov_build/lts2024-iotg-kernel-rel.tar.gz .
    

Install custom Intel kernel on Ubuntu SR-IOV host#

  1. Boot into the Ubuntu Host OS and navigate to the work directory:”

    # Change to work directory
    cd ~
    
  2. Copy the source files:

    # Copy files
    cp <source path>/lts2024-iotg-kernel-rel.tar.gz .
    cp <source path>/virtualization.multios.kvm.scripts-rpls_sriov_kvm_multios_emt-3.1_ww2525.zip .
    
  3. Extract the script files:

    # Extract script files
    unzip -jo virtualization.multios.kvm.scripts-rpls_sriov_kvm_multios_emt-3.1_ww2525.zip
    
  4. Perform the kernel setup and reboot the Ubuntu host:

    # Perform the kernel setup
    # This will install the kernel and firmware, and update grub
    sudo ./sriov_setup_kernel.sh
    
    # Reboot the Ubuntu host
    sudo reboot
    

Setup Ubuntu host for SR-IOV#

  1. Boot into the Ubuntu Host OS and navigate to the work directory:

    # Go to the work directory
    cd ~
    
  2. Extract files from sriov_patches.zip (included in virtualization.multios.kvm.scripts-rpls_sriov_kvm_multios_emt-3.1_ww2525.zip)

    # Extract files
    unzip sriov_patches.zip
    
  3. Update the host with extracted patches and reboot the host:

    # Update the host
    sudo ./sriov_setup_ubuntu.sh
    
    # Reboot the host
    sudo reboot
    

    Note: If you need to run any benchmarks or reliability tests on the host, make sure to disable auto suspend and hibernation by running the following commands:

    # Disable the suspend and hibernate services
    sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
    # Reboot the Ubuntu host
    sudo reboot now
    

OPTIONAL: Generate guest VM installation files#

You can generate guest VM installation files by either running an initial full setup on an Ubuntu 22.04 host with SR-IOV installed, or by generating the files in an Ubuntu 22.04 docker container.

Option 1: Initial full setup of Ubuntu 22.04 SRIOV host#

Once you have performed a full initial setup of the first host OS, (meaning installation of Intel custom host kernel and SR-IOV on Ubuntu) you should see packages and sriov_install directories with install files.

Copy these directories to use in future setups of the second or subsequent hosts.

# Copy the directories containing the install files
cp -r packages <target path>
cp -r sriov_install <target path>

Option 2: Ubuntu 22.04 Docker container#

Alternatively, the install files can be generated in an Ubuntu docker container by performing the following steps:

# Update and upgrade Ubuntu docker container
sudo apt -y update
sudo apt -y upgrade

# Copy the script files
cp <source path>/virtualization.multios.kvm.scripts-rpls_sriov_kvm_multios_emt-3.1_ww2525.zip .

# Extract files
unzip -jo virtualization.multios.kvm.scripts-rpls_sriov_kvm_multios_emt-3.1_ww2525.zip
unzip sriov_patches.zip

# Prepare and create install files
sudo ./sriov_prepare_projects.sh
sudo ./sriov_install_projects.sh

# Copy the directories containing the install files
cp -r packages <target path>
cp -r sriov_install <target path>