Ivanovo Linux Users Group - Not logged in
Forum Help Search Login
Previous Next Up Topic X / The X Window System / Nvidia Optimus and Bumblebee with Slackware (37895 hits)
- By LOE (Site/forum admin) Date 31.08.11 15:30 Edited 01.09.11 19:08
Довелось мне заиметь ноутбук с технологией Nvidia Optimus.
Вкратце: в ноуте две видеокарты: интегрированная Intel и дискретная Nvidia. Nvidia карта работает используя Intel карту в качестве средства вывода изображения.
Intel карта маломощная, зато мало потребляет, Nvidia карта много потребляет, зато мощная и с реальным 3D ускорением.
Использование Intel карты с отключением питания у Nvidia карты снижает потребление на 10Вт, что выливается в продление времени работы от аккумуляторов.
Все бы ничего, но nvidia не хочет делать поддержку технологии Optimus для линукса. Под виндой все прозрачно: надо приложению мощь - задействуется nvidia.

Несколько месяцев назад возник проект Bumblebee, который используя VirtualGL позволил задействовать Nvidia и под линуксом.
Суть: для nvidia карты запускается отдельный X-сервер, приложение работает на нем (используя всю графическую мощь) а вывод уже отрендеренной картинки через VirtualGL направляется на основной X-сервер на intel карте.
В то время я попробовал это установить на slackware, но не получилось ;(

И вот, не далее как вчера, снова залез на страницу проекта и выяснил, что проект уже имеет форк, а автор сосредоточился на несколько других приоритетах и сделал еще свой форк :-)

Страница основного форка: https://github.com/Bumblebee-Project/Bumblebee
В нем чуток изменили идеологию, сосредоточились на стабильности и дистро-независимости. Решил попробовать и после пары часов ручных манипуляций (поддержки слаки изкаробки нет) у меня все получилось! :-)

Хочу поделиться опытом и описать процесс.

Что требуется:
1. Архив самого проекта (на сейчас) - файл bumblebee-2.3.1.tar.gz ( https://github.com/Bumblebee-Project/Bumblebee/archives/master )
2. VirtualGL-2.2.90.tar.gz ( http://www.virtualgl.org/Downloads/VirtualGL )
3. libjpeg-turbo-1.1.1.tar.gz ( http://sourceforge.net/projects/libjpeg-turbo/ )
4. NVIDIA-Linux-x86-280.13.run ( http://nvidia.com )
5. дистрибутив slackware (серия x)

Установка.

1. Распаковываем, конфигурируем и устанавливаем libjpeg-turbo:
tar xzf libjpeg-turbo-1.1.1.tar.gz
cd libjpeg-turbo-1.1.1
./configure
# установка по умолчанию в /opt/libjpeg-turbo
make && make install


2. Установка VirtualGL:
tar xzf VirtualGL-2.2.90.tar.gz
cd VirtualGL-2.2.90
mkdir build
cd build
cmake -G "Unix Makefiles" ..
# установка по умолчанию в /opt/VirtualGL
make && make install


3. Установка драйверов Nvidia:
sh NVIDIA-Linux-x86-280.13.run --extract-only
cd NVIDIA-Linux-x86-280.13
# установка в /opt/nvidia
./nvidia-installer --x-prefix=/opt/nvidia --x-module-path=/opt/nvidia/modules --x-library-path=/opt/nvidia/lib \
--opengl-prefix=/opt/nvidia --utility-prefix=/opt/nvidia --documentation-prefix=/opt/nvidia/doc

3a. К сожалению, даже при установке в указанное место, инсталятор проверяет конфликты с системой и грохает несколько библиотек.
Чтобы восстановить статус-кво, идем в дистрибутив slackware в каталог x и делаем:
upgradepkg --reinstall mesa*txz xf86-video-intel*txz xorg-server*txz


4. Рспаковываем саму надстройку:
tar xzf bumblebee-2.3.1.tar.gz

По сути, весь проект - это обвязка над VirtualGL. Раскидываем файлы из каталога install-files по соответствующими каталогам в системе:
mkdir /etc/bumblebee
mkdir /usr/lib/bumblebee
mkdir /usr/lib/bumblebee/drivers
cd bumblebee-2.3.1/install-files
cp bumblebee /usr/local/bin
cp optirun /usr/local/bin
cp common-functions /usr/lib/bumblebee
cp common-paths /usr/lib/bumblebee
cp bumblebee.conf /etc/bumblebee
cp xorg.conf.nvidia /etc/bumblebee
cp bumblebee.handler /etc/init.d/bumblebee # копируем под другим именем!

# создаем файлик, с заведомо излишней информацией :-)
cat > /usr/lib/bumblebee/drivers/nvidia.options
#!/bin/bash
X_LD_LIB_PATH=/opt/nvidia/lib:/opt/nvidia:/opt/nvidia/modules:/opt/nvidia/modules/drivers:/opt/nvidia/modules/extensions:/usr/lib/modules:/usr/lib/modules/drivers:/usr/lib/modules/extensions
X_LD_LIB32_PATH=/opt/nvidia/lib:/opt/nvidia:/opt/nvidia/modules:/opt/nvidia/modules/drivers:/opt/nvidia/modules/extensions:/usr/lib/modules:/usr/lib/modules/drivers:/usr/lib/modules/extensions
X_LD_LIB64_PATH=/opt/nvidia/lib:/opt/nvidia:/opt/nvidia/modules:/opt/nvidia/modules/drivers:/opt/nvidia/modules/extensions:/usr/lib/modules:/usr/lib/modules/drivers:/usr/lib/modules/extensions
LD_LIBRARY_PATH=/opt/nvidia/lib:/opt/nvidia:/opt/nvidia/modules:/opt/nvidia/modules/drivers:/opt/nvidia/modules/extensions:/usr/lib/modules:/usr/lib/modules/drivers:/usr/lib/modules/extensions

MODULE_PATH="/opt/nvidia/lib,/opt/nvidia,/opt/nvidia/modules,/opt/nvidia/modules/drivers,/opt/nvidia/modules/extensions,/usr/lib/modules,/usr/lib/modules/drivers,/usr/lib/modules/extensions"
(тут жмем Ctrl-D)


Узнаем PCI ID nvidia карты:
lspci -d 10de: -n | grep '030[02]:' | cut -d' ' -f1 | tr . :

и прописываем его в файле /etc/bumblebee/xorg.conf.nvidia в строке с BusID

Накладываем следующий патч для файла /usr/lib/bumblebee/common-functions

--- common-functions.orig    2011-08-23 16:45:05.000000000 +0400
+++ common-functions   2011-08-31 00:16:18.000000000 +0400
@@ -204,18 +204,22 @@
     BUMBLEBEE_GROUP=bumblebee
     BUMBLEBEE_LOGFILE=/var/log/bumblebee.log
     . "$BUMBLEBEE_CONFDIR/bumblebee.conf"
+PATH=$PATH:/opt/VirtualGL/bin

     # allow the user to specify a custom xorg path, otherwise base on driver
     [ -z "$X_CONFFILE" ] && X_CONFFILE="$BUMBLEBEE_CONFDIR/xorg.conf.${DRIVER}"

+    set_graphics_driver "$DRIVER"
+
     # -config file   use a certain xorg.conf so the nvidia drivers can be used
     # -sharevts      without this option, the current VTY running X becomes
     #                blank while the Bumblebee X server is running
     # -nolisten tcp  do not use start a TCP server listening for connections
     # -noreset       do not logout after the last program closes
-    X_DAEMON_ARGS="-config $X_CONFFILE -sharevts -nolisten tcp -noreset"
+    X_DAEMON_ARGS="-config $X_CONFFILE \
+-modulepath $MODULE_PATH \
+-sharevts -nolisten tcp -noreset"

-    set_graphics_driver "$DRIVER"

     # Remove colon and everything before it: :1.0 -> 1.0
     DISPLAY_NUMBER=${VGL_DISPLAY##*:}


И последний шаг: необходимо создать группу bumblebee и поместить себя в нее:
grep bumblebee /etc/group
bumblebee:x:1001:loe


Все :-)
Теперь можно запускать от root'а : /etc/init.d/bumblebee start
запускать X-ы и в терминале запускать приложения (привожу пример запуска без и с акселерацией:

bash-4.1$ glxgears
Running synchronized to the vertical refresh.  The framerate should be
approximately the same as the monitor refresh rate.
365 frames in 5.2 seconds = 69.732 FPS
300 frames in 5.1 seconds = 59.248 FPS
300 frames in 5.0 seconds = 59.643 FPS

bash-4.1$ optirun glxgears
4446 frames in 5.0 seconds = 889.065 FPS
5341 frames in 5.0 seconds = 1068.059 FPS
5242 frames in 5.0 seconds = 1048.386 FPS

Как видим, ускорение более чем в 10 раз ;-) Хотя glxgears считает попугаи (да и привязывается к вертикальной развертке)
Более точную информацию дает glxspheres из комплекта VirtualGL:

bash-4.1$ /opt/VirtualGL/bin/glxspheres
Polygons in scene: 62464
Visual ID of window: 0x92
Context is Indirect
OpenGL Renderer: Mesa DRI Intel(R) Ironlake Mobile  x86/MMX/SSE2
24.996526 frames/sec - 22.130924 Mpixels/sec
26.256435 frames/sec - 23.246398 Mpixels/sec
27.925248 frames/sec - 24.723897 Mpixels/sec
27.211555 frames/sec - 24.092022 Mpixels/sec
bash-4.1$ optirun /opt/VirtualGL/bin/glxspheres
Polygons in scene: 62464
Visual ID of window: 0x21
Context is Direct
OpenGL Renderer: GeForce 310M/PCI/SSE2
51.412526 frames/sec - 45.518594 Mpixels/sec
58.360952 frames/sec - 51.670453 Mpixels/sec
68.124850 frames/sec - 60.315017 Mpixels/sec
55.809707 frames/sec - 49.411682 Mpixels/sec

Не в 10 раз, но тоже не плохо :-)
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - By hawk Date 09.09.11 17:50
Отличный материал, LOE спасибо!
Как общее впечатления от ноута? Спрашиваю, потому как последние поделия не впечатляют :-( или стал слишком требовательным.
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent - By LOE (Site/forum admin) Date 10.09.11 14:40
Ноут ASUS K52JC (PRO5IJ). Впечатления нормальные. Работает отлично.

Еще один бонус: для отключения питания nvidia  карты приходилось использовать acpi вызовы (иначе карта грелась). После запуска X-сервера, карта стала сама контролировать питание и нагрев в обычном режиме прекратился.

В принципе, в последнее время появились еще "вкусные" модели, выбрать стало есть из чего ;-)
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - By hawk Date 29.09.11 08:53 Edited 29.09.11 09:01
Приглядел сейчас вот такую вещичку ASUS K43SJ на Intel Core i5 2410M. Главное для меня - экран, пишут вроде нормальный. Если надумаю, данным материал будет актуален ;-). А в целом как такая моделька?
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent - By LOE (Site/forum admin) Date 30.09.11 07:24
В модели K43SJ видео только дискретное (nVidia).
Поэтому штатно ставится блоб от nVidia и никаких оптимусов :-)

Правда дисплей только 14"
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - By hawk Date 30.09.11 07:45
Где как пишут, там проц второе поколение графика уже с процом в одном камне. А на счет выбора, вчера из двух просмотренных оба бракованных, один по видео скорее всего  - на экране красные точки мелькают, второй по клавиетуре :-(. Уже повод усомниться в качестве изделия в целом. По диагонали, т.к. более 3х лет максимальная диагональ ноута 12", 14 - это гигант просто и тяга страшная :-).
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent By LOE (Site/forum admin) Date 30.09.11 11:04
Не во всех процах есть интегрированная графика.
В описаниях этого ноута упоминаний об интегрированной тоже нет, как нет и слов о технологии оптимус.

Чем, как и рекламируют, хорош оптимус - возможностью отключить nvidia графику и снизить потребление (по моим оценкам) на 10Вт
Но приходится терпеть неудобства в линуксе.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent By Bercut Date 12.09.11 17:57
шож, не оскудеет земля ивановская, покамест такие богатыри ея попирают...
дело полезное, вощем.
русский язык подобен искуству кун-фу, и великий мастер никогда не применит его без необходимости...
Parent - By G0thic Date 13.09.11 05:33
дык слака же! /etc/rc.d/bumblebee start
Когда кругозор человека сужается к минимуму, он называет это своей точкой зрения.
Parent By LOE (Site/forum admin) Date 13.09.11 05:55
Привет!

Слака давно поддерживает запуск скриптов в стиле System-V из /etc/init.d/ (вернее, из /etc/rc[0-6].d/). Ломать идеологию исходного пакета не хочется.
Может найду время и попробую написать поддержку слаквари для этого проекта (если не опередят ;-) ). Скриптов там много, но вся суть сводится к вышеописанному - копированию нескольких файлов по ФС.

А для таких задач, которые требуются не всегда, старт-скрипты я запускаю руками.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - By Viatcheslav Date 10.01.13 21:24
При сборке VirtualGL ошибка:

/usr/lib64/gcc/x86_64-slackware-linux/4.7.1/../../../../x86_64-slackware-linux/bin/ld: /opt/libjpeg-turbo/lib64/libturbojpeg.a(libturbojpeg_la-turbojpeg.o): перемещение R_X86_64_32 для &#171;.data&#187; не может использоваться при создании общего объекта; перекомпилируйте с -fPIC
/opt/libjpeg-turbo/lib64/libturbojpeg.a: could not read symbols: Некорректное значение
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
make[2]: *** [lib/librrfaker.so] Ошибка 1
make[1]: *** [rr/CMakeFiles/rrfaker.dir/all] Ошибка 2
make: *** [all] Ошибка 2

перекомпилируйте с -fPIC не помогает

Чем лечить?
Parent - By LOE (Site/forum admin) Date 11.01.13 06:32 Edited 11.01.13 06:34
Надо перекомпилировать libjpeg-turbo :
скачал libjpeg-turbo-1.2.1.tar.gz
разархивировал
запустил ./configure
отредактировал Makefile (добавил -fPIC к переменным) :

CFLAGS = -O3 -fPIC
CPPFLAGS = -Wall -fPIC
CXXFLAGS = -g -O2 -fPIC

запустил make && make install

Скачал VirtualGL-2.3.2.tar.gz
разархивировал, создал каталог build, из него сделал cmake .. потом make
Все нормально. ;-) Только что проверил на Slackware64-14.0

Обращаю внимание, что с начала старта топика проект переписан и использует демон, написанный на С
работает четко (с последними драйверами nvidia)
Страница проекта: https://github.com/Bumblebee-Project
Требуются только сам Bumblebee и bbswitch
Ручных телодвижений делать уже не требуется.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - By Viatcheslav Date 13.01.13 08:31
Делалось с -fPIC

Скриншот  - http://seminews.ru/images/20130113_01.png
Parent By LOE (Site/forum admin) Date 13.01.13 13:37
Еще раз: надо перекомпилировать libjpeg-turbo с указанием -fPIC
и не забыть проинсталлировать после компиляции.

А уже после этого приниматься за компиляцию VirtualGL

Все эти сообщения я видел, все попробовал и предложил работающий рецепт.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Previous Next Up Topic X / The X Window System / Nvidia Optimus and Bumblebee with Slackware (37895 hits)

Powered by mwForum 2.12.0 © 1999-2007 Markus Wichitill

Page created in 0.076s with 10 database queries.