LINUX.ORG.RU

Отключение Nvidia GPU.

 , , , ,


0

1

Имееются две видеокарты в кудахтере. Одна красная, вторая зеленая. ATI служит заглушкой, но стоит в основном слоте и, соответственно, на ней отображается вся первоначальная загрузка и стартует консольный буфер. У каждой карточки по монитору. OS: Linux Mint 21.3; WM: Cinnamon. Грузится система на проприетарных драйверах nvidia из репозиториев минта.

Энивей, интересует как (!)правильно в таком сетапе «откреплять» зеленую карточку и оставлять красную как активную. Просто откреплять ее я могу, пробрасывать в виртуалку тоже. Это все протестировано. Просто две проблемы. Скрипт открепления срабатывает только со второго раза (а значит уже какой-то не тот порядок) и, соответственно, уже через ssh (и да, сразу через ssh срабатывает тоже со второго раза). После подсоединения GPU назад как-будто спавниться второй юзер (users выдает два моих логина).

Порядок действий при откреплении:

# Для понимания где мы.
set -x
VIRSH_GPU_VIDEO=pci_0000_06_00_0
VIRSH_GPU_AUDIO=pci_0000_06_00_1

# Гасим display-manager и тут я не уверен есть ли смысл отключать мультиюзера.
# sudo systemctl isolate multi-target.service
sudo systemctl stop display-manager.service

# По идее, останавливаем вывод консоли, но так как она на radeon'е,
# я не вижу в этом смысла.
# echo 0 > /sys/class/vtconsole/vtcon0/bind
# echo 0 > /sys/class/vtconsole/vtcon1/bind
sleep 1

# Выгружаем драйвер nvidia, оставляя radeon, делаем передышку.  
sudo rmmod nvidia_drm
sudo rmmod nvidia_uvm
sudo rmmod nvidia_modeset
sudo rmmod nvidia
sleep 3

# Собственно, делаем detach устройства.
sudo virsh nodedev-detach $VIRSH_GPU_VIDEO
sudo virsh nodedev-detach $VIRSH_GPU_AUDIO
sleep 1
  
# Подгружаем драйвер vfio.
sudo modprobe vfio
sudo modprobe vfio_iommu_type1
sudo modprobe vfio_pci
sleep 3

# Стартуем все это дело назад, но уже на одном radeon'е.
sudo systemctl start display-manager.service

Думаю, обратный скрипт представить не сложно, там ничего неожиданного.


зачем ты дисплей менеджер трогаешь? и дрова нвидии выгружаешь еще?

должно работать просто: при стопе ВМ нвидия имеет дрова vfio-pci в системе.

но это не айс, потому что при этом не работают энергосберегайки. поэтому лучше или держать ее с пустой ВМ с виндой, либо байндить ее в хост обратно и запускать nvidia-persistenced c –persistence (перед запуском ВМ этот процесс надо останавливать тогда), чтобы она ела 5 Вт, а не 35.

чтобы байндить в хост я юзаю такое:

for dev in 0000:08:00.0 0000:08:00.1; do
        vendor=$(cat /sys/bus/pci/devices/$dev/vendor)
        device=$(cat /sys/bus/pci/devices/$dev/device)

	echo "Removing ${dev} from vfio-pci id list"
        echo "${vendor} ${device}" > /sys/bus/pci/drivers/vfio-pci/remove_id
	sleep 0.1

	echo "Remove PCI device"
	echo 1 > /sys/bus/pci/devices/${dev}/remove
	while [[ -e "/sys/bus/pci/devices/${dev}" ]]; do
		sleep 0.1
	done

	echo "Rescanning..."
	echo 1 > /sys/bus/pci/rescan
	while [[ ! -e "/sys/bus/pci/devices/${dev}" ]]; do
		sleep 0.1
	done
done
anonymous
()
Ответ на: комментарий от anonymous

зачем ты дисплей менеджер трогаешь?

Потому что не нем висит логин менеджер, который все еще держит драйвера nvidia?

и дрова нвидии выгружаешь еще?

Что бы при заходе в систему (хоста) под radeon’ом они не подхватывались автоматом?

должно работать просто: при стопе ВМ нвидия имеет дрова vfio-pci в системе.

Можно тут, пожалуйста, подробнее? Что конкретно такое тут «ВМ»: 1) Виндовс Менеджер; 2) Виндовс Машина; 3) Виртуальная Машина; 4) Вообще что-то иное. Как мне правильно остановить WM и потом сразу же поднять его на radeon’е? Если можно, конкретные команды. И почему при стопе WM и его запуске система должна решить, что время стартовать не на nvidia, а нужно грузить Radeon+VFIO?

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

Потому что не нем висит логин менеджер, который все еще держит драйвера nvidia?

зачем такое? на нвидии ничего висеть не должно, пока ты не скажешь.

Что бы при заходе в систему (хоста) под radeon’ом они не подхватывались автоматом?

продолжаем: то, что нвидия с дровами на хосте активна, не значит что дисплей менеджер должен ее активно удерживать.

у меня Х11 хоть и видит обе карты, но трогает исключительно радеон.

начнем с азов, у тебя хост всегда юзает для отрисовки десктопа только радеон, верно? нвидия юзается только для КУДА и прочего, аля бамблби и что там еще было?

или же ты хочешь еще и хостовый десктоп рисовать нвидией?

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

начнем с азов, у тебя хост всегда юзает для отрисовки десктопа только радеон, верно? нвидия юзается только для КУДА и прочего, аля бамблби и что там еще было?

Нет. Проприетарный драйвер nvidia стоит как доминирующий и отрисовывает иксы, берет под управление и второй монитор с radeon’ом. Из контекста, видно, это не понятно, а я четко не пояснил, прошу прощения. Далее, думаю, первые вопросы отпадают?

При перебросе я кидаю иксы на radeon, а nvidia и монитор на ней на vfio (они становятся неактивны для хоста). Далее зеленую уже подхватит guest система.

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

Далее, думаю, первые вопросы отпадают? верно

обычно такую неудобную схему с рестартом иксов (и всех программ там открытых) используют когда есть только 1 видяха

anonymous
()