Приветствую!
В процессе попыток перевести одну из рабочих станций на Linux столкнулся с неразрешимой для себя проблемой.
А именно, ни как не удается заставить работать систему на мультимониторной конфигурации.
Дано:
2 x GPU NVidia GeForce GT 430 на каждом из них висит по 2 монитора.
Имеем:
- С открытым драйвером Nouveau мониторы в настройках системы определяются прекрасно, но производительность оставляет желать лучшего.
- С последним проприетарным драйвером из репозитория, сконфигурировав X-сервер с помощью утилиты идущей в комплекте с драйвером, система видит только два монитора из четырех (с первой видеокарты). Более того, нормально работать можно только с Primary монитором. На втором мониторе, по сути, только обоина или, в зависимости от включения Option BaseMosaic в конфиге, просто черный фон.
Содержимое xorg.conf:
# nvidia-settings: X configuration file generated by nvidia-settings
# nvidia-settings: version 367.35 (buildd@lgw01-18) Tue Aug 9 10:11:49 UTC 2016
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 0
Screen 1 "Screen1" RightOf "Screen0"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Option "Xinerama" "0"
EndSection
Section "Files"
EndSection
Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
# generated from default
Identifier "Keyboard0"
Driver "kbd"
EndSection
Section "Monitor"
# HorizSync source: edid, VertRefresh source: edid
Identifier "Monitor0"
VendorName "Unknown"
ModelName "Acer V276HL"
HorizSync 30.0 - 83.0
VertRefresh 50.0 - 76.0
Option "DPMS"
EndSection
Section "Monitor"
# HorizSync source: edid, VertRefresh source: edid
Identifier "Monitor1"
VendorName "Unknown"
ModelName "Philips PHL 243V5"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 76.0
Option "DPMS"
EndSection
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GT 430"
BusID "PCI:1:0:0"
EndSection
Section "Device"
Identifier "Device1"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GT 430"
BusID "PCI:4:0:0"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "Stereo" "0"
Option "nvidiaXineramaInfoOrder" "CRT-1"
Option "metamodes" "DVI-I-1: nvidia-auto-select +0+0, VGA-0: nvidia-auto-select +1920+0"
Option "SLI" "Off"
Option "MultiGPU" "Off"
Option "BaseMosaic" "off"
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "Screen"
Identifier "Screen1"
Device "Device1"
Monitor "Monitor1"
DefaultDepth 24
Option "Stereo" "0"
Option "nvidiaXineramaInfoOrder" "CRT-1"
Option "metamodes" "VGA-0: nvidia-auto-select +0+0, DVI-I-1: nvidia-auto-select +1920+0"
Option "SLI" "Off"
Option "MultiGPU" "Off"
Option "BaseMosaic" "off"
SubSection "Display"
Depth 24
EndSubSection
EndSection
Здесь мы в результате получаем 2 X-Screen по два монитора в каждом. Судя по всему, сами иксы видят все 4 монитора. Курсор есть на всех четырех, но на тех, что принадлежат второй карте, курсор нативный иксовый, т.е. в виде крестика.
Итого можно сделать вывод, что кеды некорректно работают на конфигурации системы более чем с одним X-Screen.
Все попытки объединить вывод в один X-Screen потерпели неудачу.
Имеющие опыт конфигурации Multihead систем на GPU NVidia отзовитесь!
Убил весь день. В какую сторону копать ума не приложу.
Я очень сильно сомневаюсь, что KDE можно заставить работать на разных Х.
Суть Xinerama как раз в том, чтобы собрать все мониторы в один Х, только в таком случае в этом параметре должна быть единичка, а в ServerLayout должны быть перечислены и пронумерованы мониторы, с указанием их местоположения относительно друг друга.
Утила вам создала конфиг неверно, копайте в эту сторону.
1. Xinerama напрочь убивает ускорение OpenGL.
2. Становиться жутко неудобно работать, т.к. окна максимизируются на все 4 монитора.
3. Kubuntu в отличие от Ubuntu так и не удалось заставить работать нормально даже с Xinerama.
Собственно потому и обращаюсь к сообществу. Ибо все варианты уже испробовал...
1. То, что использование двух видеокарт, не соединенных специальным мостом (типа SLI/Crossfire, только для FB) убивает производительность - это факт. Если просто рассуждать - получаем два варианта: рендеринг идет либо в программный фреймбуфер, либо в FB одной из карт, если она позволяет работу с таким размером (разрешением) аппаратно, после чего оно режется на части (разделяется и копируется побитово) и его части заливаются на разные карточки. Этот процесс заведомо медленнее, чем TwinView, когда все делает одна карта.
Но вот по поводу полного убиения OpenGL я не уверен, поскольку из ряда неподтвержденных источников можно нагуглить инфу, что "в свежих блобах nvidia есть поддержка OpenGL в Xinerama". Есть даже такой забавный опыт - https://www.cs.uaf.edu/2007/powerwall/. Можно долго предполагать всяку фигню типа "а возможно оно и работало какой-то период, а потом поломали", но лучше проверить на практике, убедившись, что каждый пункт конфига понимается правильно и действительно было сделано все возможное.
2. Даже если сделать один сеанс X, размером, скажем, 7680х1080?
3. Аналогичный вопрос, сеанс был один?
Xinerama тестил. Собственно, на рабочей станции крутиться одно самописное и требовательное к производительности графики приложение. Скорость работы с Xinerama в разы ниже. Это если говорить об одновременной работе на двух GPU.
Сеанс X запущен был, разумеется, один. В общем-то кеды дополнительно ни как не конфигурил. Все ковыряния касались исключительно xorg.conf
P.S.
Самое главное, что древняя XP на данной конфигурации работает просто великолепно. Производительность даже без SLI моста на высоком уровне.
Ну, с виндой у nvidia все вообще хорошо: и со SLI, и с multigpu, и c multihead, и с оптимизацией под отдельные игры/приложения... С линуксом они такого рвения не проявляют.
Наверное, тут единственный способ - попробовать оптимизировать свое приложение под данную конфигурацию, если конечно архитектура была заложена хорошая.
Отправить комментарий