LINUX.ORG.RU
решено ФорумAdmin

возможен ли проброс PCI и USB устройств?

 , ,


1

2

Делаю комп с большим числом беспроводных сетевух. Каждую сетевуху надо отдать отдельным устройством виртуальной машине. Для виртуалки использую KVM. Мать gigabyte p75-d3 и проц i5-3550. Все чего удалось мне добиться - это проброс почему-то только одного чипсетного USB контроллера (туда подключена сетевуха) + устройства на PCI-E. Пробовал пробрасывать отдельные внешние PCI устройства (сеть, звук, контроллер usb) - не пашет (не стартует виртуfлка - пробовал в centos6, fedora 19, ubuntu 12.04). Не пашут и пробросы usb-устройств. Почему? Пока могу лишь 3 интерфейса отдать гостям (2 pci-e слота и встроенный usb-контроллер), а хостовой машине остается четвертый. Хочу услышать ваши истории успеха на системах интел и амд.

P.S. мать официально не поддерживает vt-d.

★★★★★

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

GA-P75-D3
Intel® B75 Express Chipset (Intel® BD82B75 PCH)
Intel® Virtualization Technology for Directed I/O (VT-d): No

Оно? PCIe, вероятно, пробрасываются, потому что подключены напрямую к процессору, минуя чипсет.

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

как пробрасываешь юсб? вроде квм позволяет пробросить отдельное устройство, а не контроллер.

anonymous
()
Ответ на: комментарий от Deleted

Оно? PCIe, вероятно, пробрасываются, потому что подключены напрямую к процессору, минуя чипсет.

Оно. Без vt-d pci-ex не должны пробрасываться тоже.

Кто-то врет.

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

Оно? PCIe, вероятно, пробрасываются, потому что подключены напрямую к процессору, минуя чипсет.

Без vt-d вообще не пробрасывается. Это я пробовал на других компьютерах, например, на q9505+P43. Если поддержки vt-d нет, то будет так:

$ dmesg | grep -e DMAR -e IOMMU 
Intel-IOMMU: enabled
То есть ничего не выводится. А если есть, то:
$ dmesg | grep -e DMAR -e IOMMU
ACPI: DMAR 000000007db65be8 000F8 (v01 A M I   OEMDMAR 00000001 INTL 00000001)
dmar: IOMMU 0: reg_base_addr fbffe000 ver 1:0 cap d2078c106f0462 ecap f020fe
dmar: IOMMU 1: reg_base_addr dfffc000 ver 1:0 cap d2078c106f0462 ecap f020fe
...
Так вот несмотря на то, что официально поддержки нет, у меня она есть неофициально. Работает неофициально не только на этой плате, но и на других, например, на z77.

andrew667 ★★★★★
() автор топика
Последнее исправление: andrew667 (всего исправлений: 2)

Чтоб не плодить темы спрошу здесь. Ниже выхлоп dmesg | grep AMD-Vi. Скажите IOMMU в данном случае работает или нет?

[0.301904] [Firmware Bug]: AMD-Vi: IOAPIC[9] not in IVRS table
[0.301909] [Firmware Bug]: AMD-Vi: IOAPIC[10] not in IVRS table
[0.301913] [Firmware Bug]: AMD-Vi: No southbridge IOAPIC found in IVRS table
[0.301916] AMD-Vi: Disabling interrupt remapping due to BIOS Bug(s)
[1.245347] AMD-Vi: Found IOMMU at 0000:00:00.2 cap 0x40
[1.245524] AMD-Vi: Initialized for Passthrough Mode

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

Судя по всему работает.

Меня вот это смущает:

AMD-Vi: Disabling interrupt remapping due to BIOS Bug(s)

И ещё проблема, в моей убунту 13.04 нет каталога /sys/bus/pci/drivers/pci-stub, поэтому забиндить туда железку я не могу, чего делать не знаю.

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

Видимо, поддержка VT-d есть в БИОСе и процессоре, но ее нет в чипсете. Поэтому будет работать проброс устройств только на PCIe шине процессора.

Deleted
()
Ответ на: комментарий от anonymous

как пробрасываешь юсб? вроде квм позволяет пробросить отдельное устройство, а не контроллер.

У меня хорошо пробросился только контроллер. В госте, которому отдан этот контроллер usb-устройства определяются (пробовал сетевые карточки и флэшки). Отдельно пробросить usb устройство не получается. В федоре (хосте) устройство типа в госте есть, на него ставятся драйверы, но оно не работает. В убунте (хосте) даже не стартует гость если устройство таким макаром отдавать.

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

ты при загрузке ядра опцию iommu указывал? Не знаю как для амд, но для интела intel_iommu=on После загрузки с этой опцией выхлоп dmesg | grep -e DMAR -e IOMMU становится больше раза в 2. У тебя, по моему мнению, работает. Напиши модель материнки и проц.

andrew667 ★★★★★
() автор топика
Последнее исправление: andrew667 (всего исправлений: 1)
Ответ на: комментарий от andrew667

ты при загрузке ядра опцию iommu указывал?

GRUB_CMDLINE_LINUX=«max_loop=64 iommu=pt iommu=1 amd_iommu=fullflush»

Напиши модель материнки и проц.

asus sabertooth 990fx r2.0, AMD FX-8350.

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

Видимо, поддержка VT-d есть в БИОСе и процессоре, но ее нет в чипсете. Поэтому будет работать проброс устройств только на PCIe шине процессора.

Это сообщение ни о чем. У тебя есть опыт с пробросом PCI и USB устройств? Если получилось, то напиши на чем (железо+ софт). Может оно не работает вообще в принципе. А если не имеешь никакого опыта, то лучше ничего не пиши и не вводи людей в заблуждение.

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

Так у тебя устройства гостю отдаются? Что вообще происходит? Если не работает, то попробуй ссылку, которую дал Myp3ik, и еще попробуй с разными биосами.

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

странно. я пробрасывал таким образом модемы, телефоны, программаторы. сетевые не пробрасывал, но поидее они должны работать так же, libusb же пофигу что пробрасывать

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

странно. я пробрасывал таким образом модемы, телефоны, программаторы. сетевые не пробрасывал, но поидее они должны работать так же, libusb же пофигу что пробрасывать

речь про usb устройства? Какая материнка? Я просто хочу понять у меня мать неполноценно работает либо операция проброса вообще невозможна в принципе.

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

да, про юсб. несколько разных ноутов, и старые были точно без vtd. vtd для проброса юсб не нужен, это чисто программно делается с помщью libusb. втыкаешь девайс, в консоли куему набираешь usb_add host:bus.addr, bus.addr узнаешь из lsusb. все должно рабоать. или через параметр при запуске виртуалки, ман куему.

anonymous
()
Ответ на: комментарий от andrew667

Так у тебя устройства гостю отдаются?

Нет, не отдаются. Более того, как я уже писал выше, у меня даже pci-stub нет.

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

[ 0.301464] AMD-Vi: device: 00:00.2 cap: 0040 seg: 0 flags: 3e info 1300
[ 0.301469] AMD-Vi: mmio-addr: 00000000feb20000
[ 0.301482] AMD-Vi: DEV_SELECT_RANGE_START devid: 00:00.0 flags: 00
[ 0.301486] AMD-Vi: DEV_RANGE_END devid: 00:00.2
[ 0.301490] AMD-Vi: DEV_SELECT devid: 00:02.0 flags: 00
[ 0.301493] AMD-Vi: DEV_SELECT_RANGE_START devid: 01:00.0 flags: 00
[ 0.301496] AMD-Vi: DEV_RANGE_END devid: 01:00.1
[ 0.301499] AMD-Vi: DEV_SELECT devid: 00:04.0 flags: 00
[ 0.301503] AMD-Vi: DEV_SELECT devid: 02:00.0 flags: 00
[ 0.301506] AMD-Vi: DEV_SELECT devid: 00:05.0 flags: 00
[ 0.301509] AMD-Vi: DEV_SELECT devid: 03:00.0 flags: 00
[ 0.301512] AMD-Vi: DEV_SELECT devid: 00:09.0 flags: 00
[ 0.301515] AMD-Vi: DEV_SELECT devid: 04:00.0 flags: 00
[ 0.301518] AMD-Vi: DEV_SELECT devid: 00:0a.0 flags: 00
[ 0.301522] AMD-Vi: DEV_SELECT devid: 00:0b.0 flags: 00
[ 0.301525] AMD-Vi: DEV_SELECT devid: 00:0d.0 flags: 00
[ 0.301528] AMD-Vi: DEV_SELECT devid: 00:11.0 flags: 00
[ 0.301531] AMD-Vi: DEV_SELECT_RANGE_START devid: 00:12.0 flags: 00
[ 0.301535] AMD-Vi: DEV_RANGE_END devid: 00:12.2
[ 0.301538] AMD-Vi: DEV_SELECT_RANGE_START devid: 00:13.0 flags: 00
[ 0.301541] AMD-Vi: DEV_RANGE_END devid: 00:13.2
[ 0.301544] AMD-Vi: DEV_SELECT devid: 00:14.0 flags: d7
[ 0.301547] AMD-Vi: DEV_SELECT devid: 00:14.2 flags: 00
[ 0.301551] AMD-Vi: DEV_SELECT devid: 00:14.3 flags: 00
[ 0.301554] AMD-Vi: DEV_SELECT devid: 00:14.4 flags: 00
[ 0.301557] AMD-Vi: DEV_ALIAS_RANGE devid: 08:00.0 flags: 00 devid_to: 00:14.4
[ 0.301562] AMD-Vi: DEV_RANGE_END devid: 08:1f.7
[ 0.301571] AMD-Vi: DEV_SELECT devid: 00:14.5 flags: 00
[ 0.301574] AMD-Vi: DEV_SELECT devid: 00:15.0 flags: 00
[ 0.301577] AMD-Vi: DEV_SELECT devid: 00:15.1 flags: 00
[ 0.301580] AMD-Vi: DEV_SELECT devid: 0a:00.0 flags: 00
[ 0.301583] AMD-Vi: DEV_SELECT devid: 00:15.2 flags: 00
[ 0.301586] AMD-Vi: DEV_SELECT devid: 0b:00.0 flags: 00
[ 0.301590] AMD-Vi: DEV_SELECT devid: 00:15.3 flags: 00
[ 0.301593] AMD-Vi: DEV_SELECT devid: 0c:00.0 flags: 00
[ 0.301596] AMD-Vi: DEV_SELECT_RANGE_START devid: 00:16.0 flags: 00
[ 0.301599] AMD-Vi: DEV_RANGE_END devid: 00:16.2
[ 0.301603] AMD-Vi: DEV_SPECIAL(IOAPIC[255]) devid: 00:14.0
[ 0.301606] AMD-Vi: DEV_SPECIAL(HPET[0]) devid: 00:14.0
[ 0.301610] AMD-Vi: DEV_SPECIAL(IOAPIC[255]) devid: 00:00.1
[ 0.301613] [Firmware Bug]: AMD-Vi: IOAPIC[9] not in IVRS table
[ 0.301616] [Firmware Bug]: AMD-Vi: IOAPIC[10] not in IVRS table
[ 0.301620] [Firmware Bug]: AMD-Vi: No southbridge IOAPIC found in IVRS table
[ 0.301623] AMD-Vi: Disabling interrupt remapping due to BIOS Bug(s)
[ 1.241213] AMD-Vi: Found IOMMU at 0000:00:00.2 cap 0x40
[ 1.241391] AMD-Vi: Initialized for Passthrough Mode

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

Это не солюшн, а, как написал сам автор - ugly hack, а ветка заканчивется словами: «no luck with IOMMU with kernels 3.8/9. I just disable IOMMU from bios.»

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

Пробовал, не повезло. Я когда покупал эту железку не в последнюю очередь рассчитывал на корректную работу iommu в kvm, а тут такой облом.

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

Это сообщение ни о чем. У тебя есть опыт с пробросом PCI и USB устройств? Если получилось, то напиши на чем (железо+ софт). Может оно не работает вообще в принципе. А если не имеешь никакого опыта, то лучше ничего не пиши и не вводи людей в заблуждение.

Раз такой умный, зачем вообще тут спрашиваешь совета? Мое сообщение вполне себе о чем. Да, это про Z87, но c B75 ситуация аналогичная (оба этих чипсета не поддерживают VT-d).

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

Раз такой умный, зачем вообще тут спрашиваешь совета?

Хочу услышать Ваши истории успеха на системах интел и амд.

Мое сообщение вполне себе о чем. Да, это про Z87, но c B75 ситуация аналогичная (оба этих чипсета не поддерживают VT-d).

Прочитал. Идея в том, что если отдавать устройство, которое подлючено к PCI-E шине процессора, то оно будет работать в госте, так как чипсет не нужен. Сделал проброс сетки реалтековской (которая в материнке родная) - работает без вопросов...Может она работает с PCI-E от процессора, конечно, но чувствую, что истина где-то посередине.

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

да, про юсб. несколько разных ноутов, и старые были точно без vtd. vtd для проброса юсб не нужен, это чисто программно делается с помщью libusb. втыкаешь девайс, в консоли куему набираешь usb_add host:bus.addr, bus.addr узнаешь из lsusb.

Дома проверил на ноуте (debian7 на thinkpad t400 c2d p8400, чипсет p45 ) и компе (сейчас там убунта, но в федоре то же самое было). В ноуте vt-d нету Результаты интересные. Все делал через virt-manager.
1) Начал проверку с флэшки. Пробросилась и на ноуте и на компе нормально, данные скопировались.
2) Вставил сетевуху tp-link wn722nc. Гость загрузился и заработал только на ноуте. К беспроводной сети подключился. Пробовал winxp. На десктопе тыкал в разные порты, в том числе пробовал внешний pci контроллер nec. Не хочет и все. сentos и ubuntu загружаются, но там сетевухи НЕТ, а я ведь ее отдал! ifconfig, lsusb не помогли. Такое чувство, что устройство отдается, а потом опять забирается. winxp вообще только виснет. До заставки доходит, потом черный экран и все. Вынимаешь сетевуху, и хостовый комп тоже зависает. Помогает только reset.
3) Вставляю 2 сетевухи в ноут - там уже virt-manager сходит с ума. Выбираю устройства разные, а он их с одинаковым адресом добавляет. Можно конечно попробовать разрулить в virsh через edit host. Запускаешь гостя и он материт, что я добавил 2 устройства с одинаковым адресом...А я-то внимательно смотрел, что они на разных! Виртуалка не стартует. На десктопе ситуация аналогична.

P.S. Еще немного потыкался. Получается, что если 2 сетевухи включаешь сразу, но виртуалке отдаешь одну, то тоже не работает. Сетевухи подключал к разным контроллерам.

Вот такой он проброс usb устройств.

andrew667 ★★★★★
() автор топика
Последнее исправление: andrew667 (всего исправлений: 2)
Ответ на: комментарий от Myp3ik

Попробую пропатчить, посмотрим. Кстати, а не подскажешь мать под AM3+, на которой iommu работает без глюков из коробки?

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