Установка Nvidia Optimus на Ubuntu Linux 11.10

/www/pages/modesco/ubuntovod

Прошел год, с тех пор, когда я последний раз воевал с гибридной графикой в Linux. Много всего изменилось с тех пор и забегая вперед, скажу, что в лучшую сторону. В этой заметке я расскажу о технологии Nvidia Optimus, что она даёт владельцам ноутбуков и какие неприятности готовит линуксоидам.

Что такое Nvidia Optimus

Всем известно, что ноутбуки подразделяются на несколько классов: нетбуки, ноутбуки бизнес-класса, мобильные ноутбуки бизнес-класса, desktop replacement, игровые ноутбуки и т.д. Основная проблема видеоподсистемы ноутбука в том, что она может быть либо быстрой и потреблять много энергии, либо медленной и энергоэкономичной. Могла быть.

Nvidia решила эту проблему с помощью технологии Nvidia Optimus. Она может обеспечивать как высокую производительность, так и экономичность потребления питания. Суть технологии в том, что в системе есть две видеокарты: интегрированная маломощная карта от Intel, и дискретная производительная Nvidia. При этом первая работает постоянно, а вторая подключается по мере необходимости. Не просто подключается а, включается и выключается. Т.е. при отключении дискретной видеокарты она перестаёт потреблять питание.

Таким образом эта технология - по сути компромисс между интегрированным видео и дискретным, позволяющий получить все преимущества и того и того. Важно понимать один нюанс, переключиться полностью на дискретное видео невозможно, т.к. дискретная видеокарта не имеет собственного видеовыхода. Ее драйвер под Windows копирует просчитанные фреймы в интеловскую встроеную видеокарту которая единственная имеет видеовыход и к которой подключен дисплей ноута. Это хорошо иллюстрирует следующая картинка:

Естественно работать всё это будет не на любых компонентах, вот таблица совместимости:

Как узнать стоит ли Optimus?

Для этого из консоли linux надо выполнить следующую команду:

lspci -vnn | grep ```[030[02]]`

Если вывод этой команды отображает две строки - значит да. В противносм случае - нет.

В предыдущих сериях

В прошлом году я пытался настроить работу гибридной графики на Vaio Z11 под Ubuntu 10.10. У меня это в полной мере не получилось. Ни о каком переключении видеокарт в реальном времени речи и не шло, по аппаратному switch’у на корпусе они также не переключались. При работе под Nvidia не регулировалась яркость экрана, она была на максимуме, а при работе под интегрированной видюшкой от Intel - Nvidia продолжала кушать аккумулятор.

Новое ядро

В этом году разработчики ядра обратили свой взор на проблему гиридной графики и технологии Nvidia Optimus. Было предложено несколько решения. Для переключения графики были созданы:

Для управления двумя видеокартами:

  • Bumblebee. Кстати в январе 2012 вышел Bumblebee 3.0, в котором сделали много всяких вкусностей
  • Irinhide

Ну и несколько изменений в ядре, которые, по идее, должны поддерживать всё это безобразие:

  • С версии 2.6.34 в ядре появилась поддержка vga_switcheroo
  • Ubuntu 11.10 установилась на моём ноуте без патчинга ядра. Это была самая лучшая новость! Раньше я использовал патч от Адама для этого (Adam’s patch)

В этот раз (с Ubuntu 11.10) многие проблемы решились. Сразу заработал инсталлятор (не смотря на превышение лимита в 4Gb Ram), ОС установилась и нормально работала с встроенным видео. Однако, как это обычно бывает, пришлось многое что ещё сделать.

Bumblebee

Bumblebee

Это проект поддержки использования дискретных карт на основе NVIDIA Optimus с проприетарными драйверами. Он - самый активно развивающийся проект на текущий момент. Недавно вышла версия 3.0. Позволяет вручную выгружать отдельные приложения на дискретную карту. Реализуется за счёт использования дополнительного X сервера для графической карты NVIDIA и пакета VirtualGL для трансфера данных между X серверами. Недавно была добавлена возможность отключения дискретной карты для некоторых моделей ноутбуков через acpi_call, когда она не используется. Дополнительно позволяет получить поддержку CUDA, поддержка VDPAU пока что не реализована. Проект создан и поддерживается Peter Lekensteyn из Нидерландов, за что выражаю ему респект, уважуху и огромное спасибо! Ведь сама Nvidia не стала думать о своих Linux пользователях.

Bumblebee и Ubuntu 11.10

Итак, задача стоит так же, как и год назад. Необходимо сделать так, чтобы постоянно была включена только встроенная видеокарта Intel, а Nvidia включалась и подключалась при необходимости. В этот раз мне удалось добиться положительного результата и вот как.

  1. Ставим свежую версию ОС. Сейчас это Ubuntu 11.10. Ждем 12.04
  2. Не ставим никаких драйверов для видео
  3. Накатываем все обновления
    sudo apt-get update && sudo apt-get upgrade
  4. Ставим последнее stock ядро:
    sudo apt-get update && sudo apt-get dist-upgrade
    sudo apt-get install mesa-utils
  5. Устанавливаем Bumblebee по инструкции отсюда: https://wiki.ubuntu.com/Bumblebee а именно:
    sudo add-apt-repository ppa:bumblebee/stable
    sudo apt-get update
    sudo apt-get install bumblebee bumblebee-nvidia
    sudo apt-get install virtualgl-libs:i386 libgl1-mesa-glx:i386 libc6:i386
    sudo usermod -a -G bumblebee $USER
  6. Ставим правильный драйвер, т.к. тот, который идёт с Bumblebee не работает корректно.
    sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
    sudo apt-get update
    sudo apt-get upgrade nvidia-current
  7. Перезагружаемся

Тестирование и бенчмарки

Для запуска приложения на дискретном видео выполняем команду:

optirun firefox

Возникает логичный вопрос, а как же выключить дискретную видеокарту? Оказывается, начиная с версии 3.0, Bumblebee сам выключает дискретное видео, если оно не используется (пруфлинк). И больше не надо вручную включать/выключать его! Но никто не отменял возможность включить/выключить её вручную.

Посмотреть статус:

cat /proc/acpi/bbswitch

Выключить дискретное видео:

tee /proc/acpi/bbswitch <<<OFF

Включить дискретное видео:

tee /proc/acpi/bbswitch <<<ON

Для тестирования удем использовать команду:

optirun glxspheres

GLX Spheres

Вот результаты для встроенного видео (Intel Corporation Core Processor Integrated Graphics Controller (rev 02)):

glxspheres
Polygons in scene: 62464
Visual ID of window: 0x92
Context is Direct
OpenGL Renderer: Mesa DRI Intel(R) Ironlake Mobile
59.819769 frames/sec - 60.528035 Mpixels/sec
40.436506 frames/sec - 40.915274 Mpixels/sec

А вот для дискретного (nVidia Corporation GT216 [GeForce GT 330M] (rev a2)):

optirun glxspheres
Polygons in scene: 62464
Visual ID of window: 0x21
Context is Direct
OpenGL Renderer: GeForce GT 330M/PCIe/SSE2
157.950140 frames/sec - 159.820270 Mpixels/sec
162.941359 frames/sec - 164.870584 Mpixels/sec

Прирост в 3 раза! Так можно и в игры гонять теперь.

Нужно в аптеку, а лень куда то идти? Зайдите на сайт http://medprof-apteka.ru/ и закажите таблетки домой.

Евгений Луцюк
2012-03-22 21:41:00
Так после того как я перегружусь всё будет автоматом работать? Мне ничего уже не надо будет делать?
Гость
2012-03-23 00:29:00
а с ати+интел до сих пор всё плохо =(
GrAndSE
2012-03-25 16:04:00
Раньше пользовался Ironhide, так в конце лета он оказался получше bumblebee. Но сейчас заменил и получил огромнейшее удовольствие после того, как все стало полноценно работать. Наконечно!
Minakov.Mark
2012-03-27 03:14:00
Большое спасибо! Как часы! Спасли в общем :)
Alex
2012-04-01 23:27:00
Супер! Бук перестал греться!
Kovani84
2012-04-09 05:19:00
Ааа-ааа !!! Свершилось! А я тут сижу окна долблю... Будем наверстывать.. ^_^ Спасибо!
Евгений Кравченко
2012-04-10 19:35:00
После установки при запуске хотя бы optirun firefox получаю :  [ERROR]Cannot access secondary GPU - error: [XORG] (EE) NVIDIA(0): Failed to initialize the NVIDIA GPU at PCI:1:0:0.  Please [ERROR]Aborting because fallback start is disabled. При попытке просмотра статуса  cat: /proc/acpi/bbswitch: Нет такого файла или каталога:(
Николай
2012-05-16 14:38:00
А у меня выдаёт такую ошибку- [ERROR]The Bumblebee daemon has not been started yet or the socket path /var/run/bumblebee.socket was incorrect. [ERROR]Could not connect to bumblebee daemon - is it running? Чего с ней делать?
Александр Греев
2012-05-19 01:49:00
alexvgrey@ALexoID:~$ tee /proc/acpi/bbswitch ON tee: /proc/acpi/bbswitch: Отказано в доступе Ubuntu 12.04 Lenovo V570c (Intel/GF410m) пичалька, блин
Konstantin
2012-08-09 15:30:00
Запускать данную команду нужно с админ правами, это первое. Второе - "alexvgrey@ALexoID:~$ tee /proc/acpi/bbswitch ON" а где стрелки <<< ? Пример:tee /proc/acpi/bbswitch <<
Vladimir Terekhov
2012-07-18 06:35:00
sudo tee /proc/acpi/bbswitch ON
Gleb
2012-10-29 01:34:00
gleb@gleb-EasyNote-TS11HR ~ $ optirun vlc VLC media player 2.0.3 Twoflower (revision 2.0.2-93-g77aa89e) [0x2289c68] main libvlc: Запуск vlc с интерфейсом по умолчанию. Используйте 'cvlc' для запуска vlc без интерфейса. "sni-qt/5013" WARN 01:31:03.002 void StatusNotifierItemFactory::connectToSnw() Invalid interface to SNW_SERVICE А что это значит ? При запуске VLC плеера выдаёт.
Gleb
2012-10-29 01:53:00
А . И ещё когда запустил браузер играл в игрушку низкий FPS примерно 40
Gleb
2013-02-13 15:52:00
[ 1531.856617] [ERROR]The Bumblebee daemon has not been started yet or the socket path /var/run/bumblebee.socket was incorrect. [ 1531.856640] [ERROR]Could not connect to bumblebee daemon - is it running?
Gleb
2013-02-13 15:53:00
Почему так ? [ 1531.856617] [ERROR]The Bumblebee daemon has not been started yet or the socket path /var/run/bumblebee.socket was incorrect. [ 1531.856640] [ERROR]Could not connect to bumblebee daemon - is it running?
Gleb
2013-02-13 15:58:00
Почему так ? [ 1531.856617] [ERROR]The Bumblebee daemon has not been started yet or the socket path /var/run/bumblebee.socket was incorrect. [ 1531.856640] [ERROR]Could not connect to bumblebee daemon - is it running? куда делся каталог ??? gleb@gleb-EasyNote-TS11HR:~$ tee /proc/acpi/bbswitch <<<ON tee: /proc/acpi/bbswitch: Нет такого файла или каталога
Олег
2013-10-18 23:35:00
oleg@oleg-Lenovo-V570:~$ tee /proc/acpi/bbswitch <<<ON tee: /proc/acpi/bbswitch: Отказано в доступе ON
Олег
2013-10-18 23:37:00
oleg@oleg-Lenovo-V570:~$ tee /proc/acpi/bbswitch <<<ON tee: /proc/acpi/bbswitch: Отказано в доступе ON это после того как сделал все указанное выше и хотел запустить nVidia