Отдать видеокарту виртуальной машине: настоящее препятствие не драйвер, а группа
Передать оборудование напрямую машине можно, но устройства отдаются группами, а не по одному. И отданное оборудование забирает у машины ещё и свободу переезжать.
AtlasPVE ·
Эта статья отвечает на
- proxmox gpu passthrough
- proxmox группа iommu
- proxmox pci passthrough не работает
- proxmox видеокарта для вм
- proxmox проброс оборудования
Отдать виртуальной машине физическую видеокарту, дисковый контроллер или плату захвата можно. Обещание настоящее: машина пользуется этим оборудованием как своим.
Но люди застревают не на драйвере. На группе.
Устройства не отдаются по одному
Ваша материнская плата решает, какие устройства можно отделить друг от друга, и распределяет их по группам. Одно устройство из группы отдать нельзя; вы отдаёте всю группу.
Следствие: если видеокарта в одной группе с дисковым контроллером, отдать видеокарту значит отдать и контроллер. Обычно это невозможно, потому что там висит собственный диск сервера.
Поэтому вопрос при покупке оборудования не «заработает ли эта видеокарта», а «стоит ли она на этой материнской плате в своей собственной группе». Группировка, это свойство материнской платы, а не карты. Одна и та же карта на одной плате пробрасывается чисто, а на другой не пробрасывается вовсе.
Устройство исчезает с сервера
Второй сюрприз: отдав устройство виртуальной машине, сервер больше не может им пользоваться. Это не заём, это передача.
Самый частый случай: на машине с единственной видеокартой вы отдаёте карту виртуальной машине, и собственный экран сервера уходит вместе с ней. Если вы подключаетесь удалённо, ничего страшного, но при неприятности у вас уже не будет возможности подключить клавиатуру с монитором и посмотреть.
Отданное оборудование забирает и свободу переезжать
Для тех, кто собрал кластер, это самый важный пункт: машина с проброшенным оборудованием обычно не может переехать на другой узел.
Причина проста: отданная карта находится внутри этой физической машины. Даже если на другом узле стоит такая же модель, это не то же самое устройство.
То есть страховочная сетка, которую даёт кластер, эту машину не покрывает. Её нельзя перенести в ночь обслуживания и нельзя поднять на другом узле при отказе. Настраивая проброс, вы на самом деле выбираете вот что: подвижность в обмен на производительность и прямой доступ к оборудованию.
Память тоже перестаёт быть гибкой
Четвёртое и наименее известное ограничение: проброшенное оборудование пишет прямо в память виртуальной машины. Чтобы это работало, память должна оставаться на месте.
А механизм, который растягивает память и забирает её обратно, как раз перемещает память туда-сюда. Когда оба включены на одной машине, со стороны драйвера возникают неприятности.
На практике правило такое: на машине с пробросом не растягивайте память, задайте фиксированную. Это значит, что такая машина не может участвовать в игре «обещать больше, чем есть» из прошлой статьи. Обещанная ей память действительно отложена.
Фраза решения
Проброс, это не выигрыш, это обмен. Что вы получаете: настоящую скорость оборудования и доступ ко всем его возможностям. Что теряете: переносимость, использование этого устройства сервером и гибкость памяти.
Если вы идёте на этот обмен осознанно, это правильный инструмент. Если сделали его не заметив, узнаете об этом в первую же ночь обслуживания или при первом отказе.
Что делает Atlas
Читая PCI-устройства сервера, Atlas читает и то, в какой группе разделения находится каждое. То есть до решения вы видите группировку: устройство, которое вы хотите отдать, стоит одно, или рядом лежит что-то, что отдавать не хочется.
Есть ещё правило, попадающее ровно в последнюю часть этой статьи. Если у виртуальной машины настроен проброс оборудования и включено растягивание памяти, Atlas помечает это предупреждением: вместе они создают неприятности со стороны драйвера. Предупреждение не просто говорит «есть проблема», оно говорит, что делать, и ведёт прямо к настройке памяти.
Это маленький пример общей позиции продукта: сама настройка допустима, ничего не выдаёт ошибку, но две допустимые настройки вместе не имеют смысла. О таком нужно говорить при настройке, а не во время отказа.
Источники
Собственная документация Proxmox. На английском, и последнее слово в этом вопросе за ней.