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
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.