[Xen] Przekazywanie urządzeń PCI z hosta do guesta

Bardzo pożyteczny i szczegółowy opis:

W obecnej chwili nie wiem jeszcze, jakie urządzenia PCI będę chciał przekazywać do docelowych wiemek na Xen. Jednak chciałbym wytestować, jakie konfiguracje będą mi odpowiadać, a jakie nie.

Do testowania póki co sprawdzają mi się następujące elementy:

**1. Identyfikacja oznaczenia BDF (bus.device.function)
**
Oczywiście wystarczy zwykły lspci, jednak można lepiej.

W momi przypadku będę przekazywał do gościa, czyli hostowanej wiemki, interfejsy sieciowe. Kartę sieciową z czterema intefrejsami można o wiele czytelniej zidentyfikować w ten sposób:

lspci -tv

Pomoże to również szybciej ustalić kolejność gniazd na niej:

2. Możliwość przypisywania urządzeń PCI do wiemek

W tym celu będzie potrzbny moduł xen-pciback. Jeżeli nie jest załadowany, to należy go załadować:

modprobe xen-pciback

Wybraną kartę sieciową dodajemy do listy urządzeń, które można przypisać do wiemek:

xl pci-assignable-add 04:00.1

Jeżeli została poprawnie dodana, będzie można ją wylistować:

xl pci-assignable-list

W zasadzie tyle wystarczy, by powyższa konfiguracja hosta zadziałała w przypadku poniższej konfiguracji wiemki:

I daje to rezultat:

Oczywiście to nie jest trwała konfiguracja. Niemniej do początkowego testowania przypisań - a może raczej przekierowań - urządzeń, zanim się zdecydujemy na ostateczny układ, zupełnie wystarczy.

3. Posprzątanie po sobie

Po testach urządzenie można usunąć z listy urządzeń do przekierowania poniższym poleceniem:

xl pci-assignable-remove 04:00.1

Nie wiem jeszcze jaki jest best practice, by po każdym rebucie hosta wybrane urządzenia PCI mogły być przypisane do wiemek.

Póki co poradziłem sobie tak:
**
/usr/local/bin/passQaudNicCard.sh**

#!/bin/sh

# a script to allow passing four NICs of the quad network card to Xen hosts
# created, 11/04/2022

#   +-1d.0-[02-05]----00.0-[03-05]--+-02.0-[04]--+-00.0  Intel Corporation 82576 Gigabit Network Connection
#   |                               |            \-00.1  Intel Corporation 82576 Gigabit Network Connection
#   |                               \-04.0-[05]--+-00.0  Intel Corporation 82576 Gigabit Network Connection
#   |                                            \-00.1  Intel Corporation 82576 Gigabit Network Connection

PCIDEVLIST="
    04:00.0
    04:00.1
    05:00.0
    05:00.1
"

for i in $PCIDEVLIST; do
    xl pci-assignable-add $i
done


/etc/systemd/system/pass-quad-nic-card.service

[Unit]
Description=a service to allow passing quad nic card to Xen vms

[Service]
ExecStart=/usr/local/bin/passQaudNicCard.sh

[Install]
WantedBy=multi-user.target


I po restarcie hosta zwraca mi:
https://paste.opensuse.org/view/raw/32331482

więc póki co może być.