# Einschalten von vt-d  für Intel CPUs (iommu)

### Immou aktivieren für Intel CPUs. Hier wird unterschiedn ob es ein UEFI System oder legacy System ist mit oder ohne zfs.  


Vorrausetzung ist das im BIOS alles mit vt-d eingeschlatet ist und somit das Mainboard und CPU das auch unterstützen.

Überpüfe welches System vorliegt  
!!!!!VGA PASSTHROUGH funktioniert nur wenn das Host Betriebssystem im EFI Boot installiert wurde!!!!!

```
ls /sys/firmware/efi
```

Wenn kein Ergebnis vor liegt ist es BIOS legacy boot.

#### Unter Legacy Boot (also nicht EFI) in der Datei oder EFI ohne ZFS!   
  


```
nano /etc/default/grub
```

Dort

```
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
```

zu

```
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on
```

ändern und

```
update-grub
```

 ausführen.

#### Unter EFI Boot mit ZFS in der Datei

```
nano /etc/kernel/cmdline 
```

Dort

```
root=ZFS=rpool/ROOT/pve-1 boot=zfs
```

 zu

```
root=ZFS=rpool/ROOT/pve-1 boot=zfs intel_iommu=on
```

ändern und

```
pve-efiboot-tool refresh
```

ausführen.

Module beim start laden. Der Modules Datei anfügen

```
nano /etc/modules
```

```
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
```

Wenn Grafikkarten durchgereicht werden sollen müssen noch die Treiber geblacklistet werden.  
ansonsten kann dieser Teil übersprungen werden.

```
echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
update-initramfs -u
   
```

Hier gehts weiter. Wenn der Grafikkarten teil übersprungen wurde.  
Nun die Machine neustarten. Ob iommu aktiv ist kann man mittels.

```
dmesg | grep IOMMU
```

festellen.  
Ausgabe:

```
[    0.028060] DMAR: IOMMU enabled
[    0.090496] DMAR-IR: IOAPIC id 2 under DRHD base  0xfed90000 IOMMU 0

```

Sollte nichts ausgegeben werden, im bios nochmals schauen ob vt-d aktiv ist.

Nun iommu\_unsafe\_interruptssetzten

```
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
update-initramfs -u
```

Für ein Funktionieren pci passthroug müssen alle Geräte die in eine VM durchgereicht werden sollen in einer eigenen Gruppe befinden. Sprich alleine sein. Zur Not PCI Karte umstecken.  
Um überhaupt seperate IOMMU Gruppen zu haben, must das feature ACS (Access Control Services, im BIOS aktiv sein.

```
find /sys/kernel/iommu_groups/ -type l
```

Ausgabe: In usn erem Beispiel ist es die 01:00, diese steckt aber noch mit 00:01.0  
(00:01.0 PCI bridge: Intel Corporation 6th-10th Gen Core Processor PCIe Controller (x16) (rev 05)  
in einer Gruppe.  
Wenn PCI Karte umbauen nicht geht, so wie bei mir.  
Dann dem grup loader noch

```
pcie_acs_override=downstream

Unter legancy
nano /etc/default/grub
update grub

Unter EFI
nano /etc/kernel/cmdline
pve-efiboot-tool refresh

und danach egal welches system
update-initramfs -u

```

mit geben.  
Ausgabe ohne PCI KArte umsetzten oder grub Befehl Downstream

```
/sys/kernel/iommu_groups/7/devices/0000:00:1c.7
/sys/kernel/iommu_groups/5/devices/0000:00:1c.0
/sys/kernel/iommu_groups/3/devices/0000:00:16.0
/sys/kernel/iommu_groups/11/devices/0000:05:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:01.0
/sys/kernel/iommu_groups/1/devices/0000:01:00.0
/sys/kernel/iommu_groups/1/devices/0000:01:00.1
/sys/kernel/iommu_groups/8/devices/0000:00:1f.2
/sys/kernel/iommu_groups/8/devices/0000:00:1f.0
/sys/kernel/iommu_groups/8/devices/0000:00:1f.3
/sys/kernel/iommu_groups/8/devices/0000:00:1f.4
/sys/kernel/iommu_groups/6/devices/0000:00:1c.5
/sys/kernel/iommu_groups/4/devices/0000:00:17.0
/sys/kernel/iommu_groups/2/devices/0000:00:14.2
/sys/kernel/iommu_groups/2/devices/0000:00:14.0
/sys/kernel/iommu_groups/10/devices/0000:03:00.0
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/9/devices/0000:02:00.0

```

Ausgabe mit grub parameter downstream. Es hat geklappt

```
/sys/kernel/iommu_groups/7/devices/0000:00:1c.7
/sys/kernel/iommu_groups/5/devices/0000:00:1c.0
/sys/kernel/iommu_groups/3/devices/0000:00:16.0
/sys/kernel/iommu_groups/11/devices/0000:03:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:01.0
/sys/kernel/iommu_groups/8/devices/0000:00:1f.2
/sys/kernel/iommu_groups/8/devices/0000:00:1f.0
/sys/kernel/iommu_groups/8/devices/0000:00:1f.3
/sys/kernel/iommu_groups/8/devices/0000:00:1f.4
/sys/kernel/iommu_groups/6/devices/0000:00:1c.5
/sys/kernel/iommu_groups/4/devices/0000:00:17.0
/sys/kernel/iommu_groups/12/devices/0000:05:00.0
/sys/kernel/iommu_groups/2/devices/0000:00:14.2
/sys/kernel/iommu_groups/2/devices/0000:00:14.0
/sys/kernel/iommu_groups/10/devices/0000:02:00.0
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/9/devices/0000:01:00.0
/sys/kernel/iommu_groups/9/devices/0000:01:00.1

```

Die Grafikkarte ist jetzt unter der Gruppe 9 kann bei euch andersd sein . Zu der Grafikkarte gehören zwei Einträge.

```
/sys/kernel/iommu_groups/9/devices/0000:01:00.0
/sys/kernel/iommu_groups/9/devices/0000:01:00.1
```

ff