LINUX.ORG.RU

Мультисит

 ,


2

2

Доброе $(время_суток).

Запилил себе мультисит используя две видеокарты:
Nvidia GTX480 и Nvidia 7600, в общем оно работает, однако игры на вторую видеокарту приходится пробрасывать с помощью VirtualGL.

Звук делил пульсой, usb-порты и устройства ввода делил systemd (на удивление легко все получилось).

Проблема в графической части, VirtualGL добавляет оверхед и это неприятно для моего i5, начального уровня.
Судя по информации с панели nvidia-settings и htop, я не уперся в производительность видеокарты, а уперся в процессор.
Игра Insurgency2 (движок portal2) на втором пользователе (где идет пророс) съедает на 30% процессора больше. Примерно такое-же оверхэд есть и в других играх. Кроме того есть проблемы с некоторыми играми, они не позволяют себя пробросить с помощью VirtualGL.

Вопрос, можно-ли как-то организовать мультисит в одном Xorg`е? Тогда по идее не должно быть проблем с 3d графикой. Да и вторую видео карту можно убрать. Вариант с xenphyr у меня почему-то не взлетел.

Короче, мне интересно, как можно изолировать двух пользователей в одной сессии xorg, как можно ограничить/привязать устройства ввода к дисплеям xorg и в какую сторону мне дальше гуглить/копать.

(цены на комп-железо угнетают, особенно, когда дома 6 юзеров)

★

Не понял. что ты называешь мультиситом? При нормальном мультисите как раз не должно быть проблем с запуском программы в соответствующих иксах, так как иксы запущены на той карте. Бывают, правда, проблемы с разными производителями, но у тебя обе карточки от Nvidia.

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

У меня проблема в мощности второй карты. Мультисит используется и для игр, потому приходится «пробрасывать» GTX480 на сит со слабой карточкой. Что я делаю «в лоб» используя VirtualGL.
Понятное дело, glxgears и на 7600 крутятся ускоренно, но хочется-же не только glxgears играть на втором сите.

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

Мультисит - это многопользовательская конфигурация с (допустим) двумя запущенными сеансами пользователей: Два сеанса иксов разведены на две видяхи, со своим монитором, клавиатурой и мышью.

У тебя так?

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

Да. Именно так.
Причем, для файрфокса и прочих нетребовательных к 3D программ - у каждого пользователя своя видеокарта и они никак не пересекаются. Классический мультисит.

А вот игры на слабой видеокарте пускать смысла мало, по этому я используя VirtualGL со второго сита запускаю игру на мощной видеокарте. Те рендер идет на мощной, а на второй сит пробрасывается отрендеренная картинка.
Забавно, но если игру ограничить 45ю кадрами в секунду, GTX480 справляется с двумя экземплярами игры не особо потея. Ну правда не allmax.

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

Что я хочу? Избавиться от VirtualGL и второй видеокарты. Меня не особо волнуют вопросы безопасности - домашний десктоп.
Идеально - сделать псевдомультисит на одном Xorg, без прослоек, что бы не тормозило ничего.

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

Потому-что там уже запущена игра. )
Мультисит-же, играем вдвоем.

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

Хм, я сейчас на работе, вообще я делал без деления xorg.conf, те, в самой конфе перечислены оба сита. Иксы грузятся с одной конфиги, только "-seat" разный.

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

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

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

Хм, я сейчас на работе, вообще я делал без деления xorg.conf, те, в самой конфе перечислены оба сита. Иксы грузятся с одной конфиги, только "-seat" разный.
https://wiki.archlinux.org/index.php/xorg_multiseat#Graphics_hardware

Попробуй классический вариант.

Делаешь xorg.conf в котором жёстко прописываешь видеокарту и устройства ввода для первого рабочего места отключая их автоматическое определение X сервером.

Делаешь второй xorg.conf в котором описываешь конфигурацию второго рабочего места.

Пишешь сценарий который запускается после запуска основного gdm (или kdm). В этом сценарии запускается X с указанием второго xorg.conf и на нём запускается второй экземпляр gdm. Подключение программ к X серверу определяется переменной dysplay.

Если используется проприетарный драйвера nvidia, то обе видеокарты должны использовать одинаковый модуль ядра и желательно одинаковый драйвер. Если нужны разные драйвера, то схема будет немного сложнее.

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

Эх. Я выше рассказывал почему мне не нужна эта схема (она у меня сейчас есть и работает).
В краце - у меня только одна мощная видеокарта. А играть хочется одновременно.
Сейчас так:
seat0 - целиком на GTX480
seat-1 - на GF 7600, когда хочет поиграть грузит VirtualGL, который запускает игру, рендерит ее на GTX480 а готовую картинку показывает на GF 7600.
Эта схема работает, однако из-за такого подхода есть оверхэд, от которого я хочу избавиться.

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

Почему мне не поможет вариант с двумя xorg на одной видеокарте - nvidia-драйвера так не умеют.

Почему мне не поможет вариант с двумя xorg на двух видеокартах - на сите со слабой видюхой один фиг придется использовать VirtualGL.

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

Почему мне не поможет вариант с двумя xorg на одной видеокарте - nvidia-драйвера так не умеют.

Каждый X-сервер на своей видеокарте.

Почему мне не поможет вариант с двумя xorg на двух видеокартах - на сите со слабой видюхой один фиг придется использовать VirtualGL.

Тогда вот как. К одной видеокарте подключить 2 монитора и прописать «ситы» на каждый видео-выход.

А слабенькую видеокарту использовать как дополнительный рендер для физических движков.

https://www.overclockers.ru/hardnews/45467/Raskryta_vozmozhnost_sozdaniya_SLI...

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

Тогда вот как. К одной видеокарте подключить 2 монитора и прописать «ситы» на каждый видео-выход.

Собственно как это сделать?

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

Собственно как это сделать?

Примеры:
Главный

Section "Device"
Identifier "Intel Corporation Intel Default Card"
Driver "i810"
BusID "PCI:0:2:0"
Option "MonitorLayout" "CRT,LFP"
Screen 0
EndSection
Второй
Section "Device"
Identifier "Intel Corporation Intel Default Card External"
Driver "i810"
BusID "PCI:0:2:0"
Option "Display" "CRT"
Option "MonitorLayout" "CRT,LFP"
Screen 1
EndSection
Подробную информацию смотри здесь https://habrahabr.ru/post/112534/

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

Увы, читал и пробовал. Тот xorg, который грузится первым, лочит под себя видюху. Второй - уже сидит без видюхи и ноет в логи. :(

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

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

kir2yar ★
() автор топика

Есть в конфиге иксов такая штука: serverlayout

Section «ServerLayout»
Identifier «seat1»
Screen 0 «screen1» 0 0
InputDevice «mouse1» «CorePointer»
InputDevice «keyboard1» «CoreKeyboard»
EndSection

То что нужно, однако... Однако на одном запущенном экземпляре иксов может работать только один serverlayout! Фак.

kir2yar ★
() автор топика

Игра Insurgency2

плохо оптимизирована, сама по-себе игра чувствительна к однопоточной производительности ЦПУ.

А вообще интересно, подписался.

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

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

Технически если выхода на монитор два, то и устройства 2. Только как их обозначить не помню.

rezedent12 ☆☆☆
()
Ответ на: комментарий от xmichael

Если ей ограничить количество кадров в секунду - то пашет нормально на i5.
Сейчас обновился на убунту 1604 все тоже, что и с 1510. Кардинально нового ничего нет.
Пока получается играть нормально используя virtualgl. Правда не все стимовские вещи понимают такое.

Я обычно гружусь используюя такую баш-магию.

#!/bin/bash

#Находим номер дисплея на котором запущен сит0 (мощная видюха)
RD=`ps -U root -o args | grep seat0 | grep -v grep | cut -d" " -f3`


echo RENDER DISPLAY SET TO $RD
echo Executing vglrun -c proxy -fps 35 -d $DISPLAY "$@"
echo Logs in ~/vgl.err and ~/vgl.out

#запускаем игру передавая картинки без сжатия, ограничиваем скорость в 35кадров что бы не жрать видео и проц.
vglrun -c proxy -fps 35 -d $RD "$@" 2> ~/vgl.err > ~/vgl.out


#-c <c>    : proxy = Send 3D images uncompressed using X11 Transport
#                    [default for local X connections]
#            jpeg = Compress 3D images using JPEG/send using VGL Transport
#                   [default for remote X connections]
#            rgb = Encode 3D images as RGB/send using VGL Transport
#            xv = Encode 3D images as YUV420P/send using XV Transport
#            yuv = Encode 3D images as YUV420P/send using the VGL Transport
#                  and display on the client using X Video
#            [If an image transport plugin is being used, then <c> can be any
#             number >= 0 (default=0).]

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