User Tools

Site Tools


Sidebar

software:virtualization:iommu

notes

### 1
# Run an intel system with "intel_iommu=on iommu=pt".
# The latter option is optional on older RHEL versions (i.e. 6),
# disables checks for better performance.
$ cat /proc/cmdline 
[..] intel_iommu=on iommu=pt

### 2
# verify that cgroups are created (only applicable to RHEL7)
$ find /sys/kernel/iommu_groups/ -type l

### 3
# inspect the systems pci devices
$ lspci -nvv | less
# For example, I want to export 03:00.1
03:00.1 0200: 14e4:165f
        Subsystem: 1028:0639
[..]
        Kernel driver in use: tg3
        Kernel modules: tg3
# => we want to pass through here device 03:00.1

### 4
# find out the devices in the same cgroup
$ ll /sys/bus/pci/devices/0000\:03\:00.1/iommu_group/devices/
total 0
[..] 0000:03:00.0 -> ../../../../devices/pci0000:00/0000:00:1c.3/0000:03:00.0
[..] 0000:03:00.1 -> ../../../../devices/pci0000:00/0000:00:1c.3/0000:03:00.1
# or via virsh:
$ virsh nodedev-list --tree
computer
  |
  [..]
  +- pci_0000_00_1c_3
  |   |
  |   +- pci_0000_03_00_0
  |   |   |
  |   |   +- net_em3_18_66_da_5a_ee_95
  |   |     
  |   +- pci_0000_03_00_1
# => So we will need to detach these 2 devices,
     pci_0000_03_00_0 and pci_0000_03_00_1, from the host

### 5
# get the virsh name for the device
$ virsh nodedev-list --cap pci
[..]
pci_0000_03_00_1
[..]

### 6
# detach the devices seen in 4)
$ virsh nodedev-dettach pci_0000_03_00_0
Device pci_0000_03_00_0 detached
$ virsh nodedev-dettach pci_0000_03_00_1
Device pci_0000_03_00_1 detached

### 5
# start the VM with the device passthrough
$ virt-install --name=guest1-rhel6-64 \
    --disk path=/var/lib/libvirt/images/guest1-rhel6-64.img,size=8 
    --vcpus=2 --ram=2048 \
    --location=http://ip/6.8/Server/x86_64/os/ 
    --network bridge=virbr0,model=virtio \
    --os-type=linux --os-variant=rhel6 \
    --host-device=pci_0000_03_00_1

errors and hints

error
$ virt-install [..] --host-device=pci_0000_03_00_1
Starting install...
Retrieving file vmlinuz...                                                                                                                               | 4.1 MB  00:00:10     
Retrieving file initrd.img...                                                                                                                            |  39 MB  00:00:12     
Allocating 'guest1-rhel6-64.img'                                                                                                                         | 8.0 GB  00:00:00     
ERROR    internal error: qemu unexpectedly closed the monitor: 2017-05-11T08:25:06.847580Z qemu-kvm: -device vfio-pci,host=03:00.1,id=hostdev0,bus=pci.0,addr=0x8: vfio: error, group 18 is not viable, please ensure all devices within the iommu_group are bound to their vfio bus driver.
2017-05-11T08:25:06.847605Z qemu-kvm: -device vfio-pci,host=03:00.1,id=hostdev0,bus=pci.0,addr=0x8: vfio: failed to get group 18
2017-05-11T08:25:06.847629Z qemu-kvm: -device vfio-pci,host=03:00.1,id=hostdev0,bus=pci.0,addr=0x8: Device initialization failed.
2017-05-11T08:25:06.847641Z qemu-kvm: -device vfio-pci,host=03:00.1,id=hostdev0,bus=pci.0,addr=0x8: Device 'vfio-pci' could not be initialized
Removing disk 'guest1-rhel6-64.img'                                                                                                                      |    0 B  00:00:00     
Domain installation does not appear to have been successful.
If it was, you can restart your domain by running:
  virsh --connect qemu:///system start guest1-rhel6-64
otherwise, please restart your installation.
hint

Although just this device is intended to be reached through, all devices in the group have to be in the cgroup, and to be detached from the host. Perform steps 4 and 6 from above.

software/virtualization/iommu.txt ยท Last modified: 2021/03/23 12:22 (external edit)