среда, 27 февраля 2013 г.

Bumblebee 3.1, primus, nvidia310, Ubuntu linux - настраиваем гибридную графику на максимальную производительность.


С выходом нового Bumblebee 3.1 и новых драйверов от nvidia 310-x у пользователей возникло много проблем с работоспособностью гибридной графики optimus в  linux-e
Опишу поэтапную инструкцию установки,
актуально для ubuntu 12.10 и походных

(Мой конфиг:Dell inspirion 7720, i7-3620,vertex4 ssd, gt650m+intel4000
Linux Mint 14 Cianomon x64 (на ubuntu 12.10)
)

под катом инструкция:



Открываем терминал
Добавляем респозиторий Bumblebee
   sudo add-apt-repository ppa:bumblebee/stable

Добавляем респозиторий драйверов nvidia
    sudo add-apt-repository ppa:ubuntu-x-swat/x-updates

   sudo apt-get update
   sudo apt-get install linux-headers-generic bumblebee bumblebee-nvidia 
   sudo apt-get install nvidia-experimental-310
   sudo apt-get install nvidia-settings-experimental-310

Установка primus
(если у вы его уже устанавливали ранее удалите респозиторий ppa:zhurikhin/primus с источников приложений, он уже есть в ppa:bumblebee,выше добавленом )

   sudo apt-get install primus
Если у вас 64 битная система установите  еще:
   sudo apt-get install primus-libs-ia32

Далее отредактируем конфиги под новые драйвера


    sudo gedit /etc/bumblebee/bumblebee.conf

и изменяем там такие строки: (в номерах строк возможно расхождение, смотрим по содержимому)

- строка 22, делаем такой вид
Driver=nvidia

- строка 47 делаем такой вид:
KernelDriver=nvidia-experimental-310

- строка 51 делаем такой вид:
LibraryPath=/usr/lib/nvidia-experimental-310:/usr/lib32/nvidia-experimental-310

- строка 54 делаем такой вид:
   XorgModulePath=/usr/lib/nvidia-experimental-310/xorg,/usr/lib/xorg/modules

---
Далее правим конфиг primus
    sudo gedit /usr/bin/primusrun

Строка 16:
    export PRIMUS_libGLa=${PRIMUS_libGLa:-'/usr/lib/nvidia-experimental-310/libGL.so.1:/usr/lib32/nvidia-experimental-310/libGL.so.1'}

Строка 26:

case $PRIMUS_libGLa in
/usr/lib*/nvidia-experimental-310*)

---
Все. С установкой закончили.

В терминале
   sudo service bumblebeed restart
Перезагружаемся.

Открываем терминал, выполняем
    lspci -vnn | grep '\''[030[02]\]'
(Должно отобразится 2 видеокарты, если одна, как у меня, делаем так: выключаем ноутбук Полностью!, включаем, загружаемся, проверяем снова командой выше)
должно быть на подобии этого
$ lspci -vnn | grep '\''[030[02]\]'
00:02.0 VGA compatible controller [0300]: Intel Corporation 3rd Gen Core processor Graphics Controller [8086:0166] (rev 09) (prog-if 00 [VGA controller])
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK107 [GeForce GT 650M] [10de:0fd1] (rev ff) (prog-if ff)

Поехали далее.


В терминале выполняем (показать статус дискретной карты)
    cat /proc/acpi/bbswitch
если видите надпись вроде

0000:01:00.0 OFF
, значит все хорошо,  переходим в конец статьи.
Если же выдает ошибку делаем так:
    sudo gedit /etc/rc.local

прописываем в автозагрузку команду
вставляем текст после строки 
# By default this script does nothing.

sleep 5 && sudo service bumblebeed restart


Выключаем компьютер (важно)
Снова В терминале выполняем (показать статус дискретной карты)
    cat /proc/acpi/bbswitch
надпись должна быть:

0000:01:00.0 OFF
Заключение. Использование
чтобы отключить вертикальную синхронизацию (для тестов, для игр в повседневной работе ее не нужно отключать) перед командой пишем: vblank_mode=0
пример запуск : glxspheres

С интегрированой видеокартой, в терминале:
    vblank_mode=0 glxspheres
С дискретной через optirun
      vblank_mode=0 optirun glxspheres
С дискретной через primusrun
      vblank_mode=0 primusrun glxspheres
или 
      vblank_mode=0 optirun -b primus glxspheres

Результаты роботы на моей intel 4000 + gt 650m 
Интегрированая 172.931228 frames/sec - 192.991251 Mpixels/sec
С дискретной через optirun 181.912737 frames/sec - 145.471977 Mpixels/sec
С дискретной через primusrun 350.961342 frames/sec - 399.672857 Mpixels/sec

Запуск steam:
    primusrun steam

(Далее все игры будут запускаться со стима через дискретную)

запустить без вертикальной синхронизации (отключить ограничение в 60 фпс в игре)
    vblank_mode=0 primusrun steam

Пример запуска не установленной  игры с ntfs диска 
primusrun /media/EEEE/Games/Nexuiz/nexuiz-linux-x86_64-glx -basedir /media/EEEE/Games/Nexuiz/
Пример запуска windows игры через wine с дискретной картой
primusrun wine "/media/EEEE/Games/Dead Rising 2 Off The Record/deadrising2otr.exe"
(можно сделать скрипт на рабочем столе и выполнять его как ярлык)
---
Возможные проблемы и решения 

Если steam игры не запускаются зайдите в свойства игры в клиенте и отключите сообщество steam.

Демон bumblebee не запущен 
проверяем , выполняем
    lspci -vnn | grep '\''[030[02]\]'
(Должно отобразится 2 видеокарты, если одна то выключаем компьютер и загружаемся, не перезагрузка а отключение, есть глюки иногда)
если в списке 2 видеокарты пробуем
перезапускаем 
  sudo service bumblebeed restart

Если у вас шмель запущен но не работает optirun/ primusran
в файле /etc/bumblebe/xorg.conf.nvidia  изменяем "ConnectedMonitor" "DFP" на "UseDisplayDevice" "none"

--
Результат роботы на моем компьютере: