LINUX.ORG.RU

Загрузка X11 на интегрированном GPU.

 ,


1

1

Есть ноут, хочу загружать иксы на iGPU, что бы иметь возможность при необходимости юзать GPU на ВМ, сделал конфиг:

Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "iGPU" 0 0
EndSection

Section "Device"
    Identifier     "iGPU"
    Driver         "modesetting"
    BusID          "PCI:0:2:0" #Проверьте BusID
EndSection

#Section "Device"
#    Identifier     "dGPU"
#    Driver         "nvidia"
#    BusID          "PCI:1:0:0" #Проверьте BusID
#EndSection

Section "Screen"
    Identifier     "iGPU"
    Device         "iGPU"
    DefaultDepth    24
    SubSection     "Display"
    Viewport        0 0
    EndSubSection
EndSection

Section "OutputClass"
    Identifier     "iGPU"
    MatchDriver    "i915"
    Driver         "modesetting"
EndSection

#Section "OutputClass"
#    Identifier     "dGPU"
#    MatchDriver    "nvidia-drm"
#    Driver         "nvidia"
#    Option         "AllowEmptyInitialConfiguration"
#    Option         "PrimaryGPU" "no"
#    ModulePath     "/usr/lib/nvidia/xorg"
#    ModulePath     "/usr/lib/xorg/modules"
#EndSection

nvidia-smi:

| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+

Однако, отвязать nvidia я не могу, и команда sudo fuser -v /dev/nvidia0 мне показываеть что есть процесс:

/dev/nvidia0:        root        725 F.... Xorg

Вот этот процесс:

    PID TTY      STAT   TIME COMMAND
    725 tty7     Ssl+   0:54 /usr/lib/Xorg :0 -seat seat0 -auth /run/lightdm/root/:0 -n

Если смотреть логи иксов:

[     5.048] (**) OutputClass "nvidia" ModulePath extended to "/usr/lib/nvidia/xorg,/usr/lib/xorg/modules,/usr/lib/xorg/modules"
[     5.048] (--) PCI:*(0@0:2:0) 8086:a7a0:1043:304d rev 4, Mem @ 0x622e000000/16777216, 0x4000000000/268435456, I/O @ 0x00005000/64, BIOS @ 0x????????/131072
[     5.048] (--) PCI: (1@0:0:0) 10de:28a1:1043:304d rev 161, Mem @ 0x5f000000/16777216, 0x6000000000/8589934592, 0x6200000000/33554432, I/O @ 0x00004000/128, BIOS @ 0x????????/524288
[     5.048] (WW) Open ACPI failed (/var/run/acpid.socket) (No such file or directory)

Получается он загружает nvidia в любом случае? Есть вариант отвязывать/привязывать GPU без полной перезагрузки, а только перезапуском исков?

Можешь попробовать через unbind сделать. На примере моей сетёвки.

Сначала изучаешь выхлоп lspci -nn

...
00:19.0 Ethernet controller [0200]: Intel Corporation Ethernet Connection (2) I218-V [8086:15a1] (rev 05)
...

На основании этого выхлопа выполняются команды (у меня они сделаны в скрипте):

echo 0000:00:19.0 > /sys/bus/pci/drivers/e1000e/unbind
echo "8086 15a1" > /sys/bus/pci/drivers/vfio-pci/new_id

После этого сетёвка исчезает из системы и готова к пробросу с помощью драйвера vfio-pci. В твоём случае может оказаться проще запускать такой скрипт до запуска иксов, тогда у иксов просто не будет возможности использовать отвязанный гпу.

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

Как я понимаю это будут другие двова, xf86? Вопщем попробовал, загрузилось, анимация сильно тупит, нвидиа по прежнему в использовании. Поменяол обратно на модесеттинг.

И еще, нвидиа не загружается, если я добавляю ее в blacklist. Но мне хочется загружать/выгружать ее без перезагрузки, неужели нет такого варианта…

Через какой сервис можно логами поделиться?

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

Да, они разные, для логов можно pastebin.com или transfer.sh, у меня схожая конфигурация с твоей, ноутбук Dell 5401

Смотри, есть два варианта работы «дискретной» видеокарты:

  1. Две полноценные карты
  2. Одна карта «ограниченная», т.е. сама по себе не способна полноценно выводить графику, но позволяет её рендерить на своём видео чипе (это мой случай, карта - Nvidia MX150)

Посему не факт что задумка полностью прокатит, но тем не менее, Xorg использует такую иерархию

  • Server
    • Screen
      • Device

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

Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "PrimaryScreen" 0 0
    
    # Вот как то так
    Option          "SingleCard" "true"
EndSection

Section "Device"
    Identifier     "iGPU"
    Driver         "modesetting"
    BusID          "PCI:0:2:0" #Проверьте BusID
EndSection

Section "Screen"
    Identifier     "PrimaryScreen"
    Device         "iGPU"
EndSection

# В дополнение к "SingleCard", можно намекнуть серверу - "без самодеятельности"
Section "ServerFlags"
    Option       "AutoAddDevices"   "false"
    
    # Опции с GPU как правило про "secodary" карту
    Option       "AutoAddGPU"       "false"
EndSection

Конфиг не проверял, попробуй и поделись итоговым Xorg.0.log

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

"AutoAddDevices" не подхватилась, вот что в логе

[     5.020] (**) Option "SingleCard" "true"
[     5.020] (**) Option "AutoAddGPU" "false"
[     5.020] (==) Automatically adding devices
[     5.020] (==) Automatically enabling devices
[     5.020] (**) Not automatically adding GPU devices
[     5.020] (==) Automatically binding GPU devices
...
sparks ★★★★
()
Ответ на: комментарий от u5er

Это должно сработать. Можешь пож сориентировать как это сделать? Мне получается нужно убить lightdm, убить иксы, потом выгрузить драйвер и отвзать видео. Со всем этим поможет баш скрипт?

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

Да, я эту строку убрал, ибо с ней, у меня не работает клава и мышь, ну или в ручную их добавлять в конфиг. Я сейчас думаю, что мне нужно убивать иксы, экранный менеджер и отвязывать видео/выгружать драйвер.

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

Нет, ещё живой, но поддерживают его по факту разработчики дистрибьютивов, в OpenSuse наконецто пофиксили баг с именем модуля для gen 9 карт, 3д пркрасно работает, единственное с чем были косяки это тиринг, но производительность в играх у него выше на 15-20%

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

Не принципиально, как это делать, главное, чтоб на момент отзыва драйвер ничем не использовался. Можешь шелл скриптом, можешь любым другим удобным способом. У меня, когда я постоянно использовал виартуалку с пробросом, этим занимался openRC в момент запуска системы. Сейчас я это оформил в шелл скрипт, т.к. виртуалка нужна не постоянно.

Можешь оформить 2 шелл скрипта - один будет отвязывать видеокарту, другой привязывать обратно. Нужно пробросить видео? Останавливаешь иксы, пробрасываешь, запускаешь снова - иксы запускаются только на встройке, дискретка проброшена. Закончил работать в виртуалке и дискретка нужна на основной системе? Останавливаешь иксы, привязываешь дискретку обратно, запускаешь иксы.

Как это делать на горячую без остановки иксов я не знаю. В своё время искал информацию - так и не нашёл.

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

Жаль, некоторые карты можно «разбивать» на несколько виртуальных, формально это только «крутые» Tesla и пр могут делать, но чип там используется такой же как и в GTX, а ограничение искуственное и его можно обойти, но не на Ampere, Ada Lovelace (AD107) не подойдёт

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

У меня на intel драйвере отключилось вообще всё ускорение. Видео не работало в плеерах, в браузере и электронах ракомакофон с кусками изображений.

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

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

systemctl stop display-manager.service
# тут я делаю что нужно
systemctl start display-manager.service

Иксы закрываются, но по новой не запускается lightdm.

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

А все нагуглил, логично же, если я запускаю баш из под своего юзера, а потом убиваю сессию, как дальше скрипт может выполняться то. Пишут поможет nohup, но с ним ошибка что служба требует аутентификацию….

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

в плане аутентификации - чтоб она была 1 раз до останвки X-ов - весь скрипт запуская под sudo.

(это же применимо и к варианту с ядрёной консолью что я описал 2 минуты назад выше)

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

Ctrl-Alt-F1/Ctrl-Alt-F2/Ctrl-Alt-F3 .. Ctrl-Alt-F9

В разных дистраз разне сочетание в последнее время, раньше везде Ctrl-Alt-F1 помогало

Открывает ядерную косноль со во фреймбуфере, куда можно залогонитить и управлять перезапуском X-ов.

Вернуться оттуда в Xы - одно из этих же сачетаний. Раньше было -F6, но сейчас что-то намудрили и поразному бывает

цифра после F - это так называемый индекс виртуального териминала Linux между которыми идёт переключение, некоторые из них консоль, а некоторые Xы.

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

sudo nohup ./скрипт.sh имею ввиду

тогда аутентификация только 1 раз ДО запуска скрипта.

Но поможет ли nohup я не уверен, когда перезапускается служба lightm там не только дескриптовы закроются, но и сессия.

Можно в дополнение к nohup пробовтаь использовать setsid (это что-то ттипа нового поддерева процессов) - но это довольно запутанная штука, я пару раз осиливал, но забыл, там могут быть нбансы

GPFault ★★
()

Ты б еще сказал, что за железо. Если старый макбук (2012-2014) с ноувидией - да, ноувидия работает в любом случае. Более того, если она отвалится, то тачка не будет показывать изображение вообще. Фиксится при отвале и нежелании греть/реболить только киданием кучи соплей из трансформаторной проволоки в обход видеочипа и gmux.

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