LINUX.ORG.RU

В чем смысл vfio-pci.ids= в строке ядра и options vfio-pci ids= в /etc/modprobe.d/vfio.conf ?

 , , ,


0

1

Не понимаю и не вижу результат от добавления:

  • в строку ядра
    CONFIG_CMDLINE="vfio-pci.ids=10de:0a60,10de:0be3,13f6:0111,1022:7814"
    
  • и в /etc/modprobe.d/vfio.conf
    options vfio-pci ids=10de:0a60,10de:0be3,13f6:0111,1022:7814
    

что они дают? Устройства в vfio без ручного туда пропердоливания (vfio-assign в генте, vfio-bind в арче и т.п. сервисы) не появляются в:

/sys/bus/pci/drivers/vfio-pci/
если модуль устройства не в pci-stub'е (даже если заблеклистен) — при загрузке подгружается и автоматически на vfio-pci не заменяется.

Так зачем это нужно? Видел в пару мест, но конкретно на лорчике видел у Lavos здесь. Что оно дает-то?



Последнее исправление: kep (всего исправлений: 1)

GRUB_CMDLINE_LINUX_DEFAULT="vfio-pci.ids=10de:13c2,10de:0fbb,8086:1e26 intel_iommu=on,igfx_off"

Делает так (см driver in use):

00:1d.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 (rev 04)
	Subsystem: ASRock Incorporation Motherboard
	Kernel driver in use: vfio-pci
01:00.0 VGA compatible controller: NVIDIA Corporation GM204 [GeForce GTX 970] (rev a1)
	Subsystem: Micro-Star International Co., Ltd. [MSI] GM204 [GeForce GTX 970]
	Kernel driver in use: vfio-pci
01:00.1 Audio device: NVIDIA Corporation GM204 High Definition Audio Controller (rev a1)
	Subsystem: Micro-Star International Co., Ltd. [MSI] GM204 High Definition Audio Controller
	Kernel driver in use: vfio-pci
И дает возможность далее сделать так:
qemu-system-x86_64 \
...
-device vfio-pci,host=01:00.0,multifunction=on \
-device vfio-pci,host=01:00.1 \
-device vfio-pci,host=00:1d.0 \
...
ps: Работает это всё на правильном гентушном ядре, когда vfio-pci вкомпилено в ядро и никакие лишние драйвера (например nouveau) не собраны совсем.

Lavos ★★★★★
()
Ответ на: комментарий от Lavos

В догонку:

# zgrep -iE '(vfio|iommu|dmar).*=y' /proc/config.gz 
CONFIG_IOMMU_HELPER=y
CONFIG_VFIO_IOMMU_TYPE1=y
CONFIG_VFIO_VIRQFD=y
CONFIG_VFIO=y
CONFIG_VFIO_PCI=y
CONFIG_VFIO_PCI_VGA=y
CONFIG_VFIO_PCI_MMAP=y
CONFIG_VFIO_PCI_INTX=y
CONFIG_IOMMU_API=y
CONFIG_IOMMU_SUPPORT=y
CONFIG_IOMMU_IOVA=y
CONFIG_DMAR_TABLE=y
CONFIG_INTEL_IOMMU=y
CONFIG_INTEL_IOMMU_DEFAULT_ON=y
CONFIG_INTEL_IOMMU_FLOPPY_WA=y
CONFIG_KVM_VFIO=y

Lavos ★★★★★
()

Устройства в vfio без ручного туда пропердоливания (vfio-assign в генте, vfio-bind в арче и т.п. сервисы) не появляются

вот тут поподробнее. как раз это должно убирать «ручное пропердоливание», да еще и самым ранним и правильным способом.

t184256 ★★★★★
()

при загрузке подгружается и автоматически на vfio-pci не заменяется

Естественно, чтобы оно заменялось тебе надо прописать vfio-pci зависимостью драйверов, типа:

# /etc/modprobe.d/radeon.conf
softdep radeon pre: vfio-pci

В итоге если vfio-pci забрал себе девайс, то драйвер просто не загрузится, а если нет то девайс будет нормально работать на хосте.

И ещё учитывай, что для того чтобы это работало vfio-pci должен быть внутри initramfs или что у тебя там в дистрибутиве. Для убунты это скажем так:

# /etc/initramfs-tools/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

А удобно это все тем, что ты можешь иметь несколько конфигов хоста в загрузчике, а не тупо блеклистить драйвера целиком.

o-
()
Ответ на: комментарий от Lavos

Работает это всё на правильном гентушном ядре, когда vfio-pci вкомпилено в ядро и никакие лишние драйвера (например nouveau) не собраны совсем.

с nouveau например и подобным понятно, но как же ты не собрал драйвера для USB (xhci_hcd, ohci-pci, ehci-pci или какую ты там версию порта отдаешь), что они у тебя назначаются-то сразу на vfio?

kep
() автор топика
Ответ на: комментарий от kep

А с usb почему-то не было проблем, там сразу работало.

Lavos ★★★★★
()
Ответ на: комментарий от o-

softdep radeon pre: vfio-pci

получается, товарищ повыше не настраивал так и работает?

что для того чтобы это работало vfio-pci должен быть внутри initramfs

initrd/initramfs не использую, всё в ядре.

kep
() автор топика
Ответ на: комментарий от Lavos

Да, всем спасибо ребята, теперь работает без ручного пропердоливания сразу после загрузки:

ls -l /sys/bus/pci/drivers/vfio-pci/

0000:00:10.0 -> ../../../../devices/pci0000:00/0000:00:10.0
0000:00:10.1 -> ../../../../devices/pci0000:00/0000:00:10.1
0000:01:00.0 -> ../../../../devices/pci0000:00/0000:00:02.1/0000:01:00.0
0000:01:00.1 -> ../../../../devices/pci0000:00/0000:00:02.1/0000:01:00.1
0000:03:06.0 -> ../../../../devices/pci0000:00/0000:00:14.4/0000:03:06.0

Для этого vfio должен быть собран не модулем, а в ядро, как указано выше.

И USB тоже сразу назначился на vfio, хотя драйвера скомпилены, в общем тут главное как скомпилен сам vfio, а не остальное, насколько я понял.

kep
() автор топика
Ответ на: комментарий от King_Carlo

А ты попробуй, получается vfio-assign/vfio-bind и прочий ручной пропердол это уже устаревшая хрень, теперь оно автоматически работает, так-то.

kep
() автор топика
Ответ на: комментарий от kep

получается, товарищ повыше не настраивал так и работает?

Ну у него как ты и заметил все в ядре, поэтому и работает так.

o-
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.