Nvidia Optimus on Linux Ubuntu 11.10
Прошел год, с тех пор, когда я последний раз воевал с гибридной графикой в Linux. Много всего изменилось с тех пор и забегая вперед, скажу, что в лучшую сторону. В этой заметке я расскажу о технологии Nvidia Optimus, что она даёт владельцам ноутбуков и какие неприятности готовит линуксоидам.
Nvidia Optimus – что это за зверь?
Всем известно, что ноутбуки подразделяются на несколько классов: нетбуки, ноутбуки бизнес-класса, мобильные ноутбуки бизнес-класса, т.н. desktop replacement, игровые ноутбуки и т.д. Основная проблема видеоподсистемы ноутбука в том, что она может быть либо быстрой и потреблять много энергии, либо медленной и энергоэкономичной. Могла быть.
Nvidia решила эту проблему с помощью технологии Nvidia Optimus. Она может обеспечивать как высокую производительность, так и экономичность потребления питания. Суть технологии в том, что в системе есть две видеокарты: интегрированная маломощная карта от Intel, и дискретная производительная Nvidia. При этом первая работает постоянно, а вторая подключается по мере необходимости. Не просто подключается а, включается и выключается. Т.е. при отключении дискретной видеокарты она перестаёт потреблять питание.
Таким образом эта технология – по сути компромисс между интегрированным видео и дискретным, позволяющий получить все преимущества и того и того. Важно понимать один нюанс, переключиться полностью на дискретное видео невозможно, т.к. дискретная видеокарта не имеет собственного видеовыхода. Ее драйвер под Windows копирует просчитанные фреймы в интеловскую встроеную видеокарту которая единственная имеет видеовыход и к которой подключен дисплей ноута. Это хорошо иллюстрирует следующая картинка:
Естественно работать всё это будет не на любых компонентах, вот таблица совместимомти.
Как узнать стоит ли Optimus?
Для этого из консоли linux надо выполнить следующую команду:
1 |
lspci -vnn | grep '\''[030[02]\]' |
Если вывод этой команды отображает две строки – значит да. В противносм случае – нет.
В предыдущих сериях
В прошлом году я пытался настроить работу гибридной графики на Vaio Z11 под Ubuntu 10.10. У меня это в полной мере не получилось. Ни о каком переключении видеокарт в реальном времени речи и не шло, по аппаратному switch’у на корпусе они также не переключались. При работе под Nvidia не регулировалась яркость экрана, она была на максимуме, а при работе под интегрированной видюшкой от Intel – Nvidia продолжала кушать аккумулятор.
Новое ядро
В этом году разработчики ядра обратили свой взор на проблему гиридной графики и технологии Nvidia Optimus. Было предложено несколько решения. Для переключения графики были созданы:
Для управления двумя видеокартами:
- Bumblbee. Кстати в январе 2012 вышел Bumblbee 3.0, в котором сделали много всяких вкусностей.
- Irinhide
Ну и несколько изменений в ядре, которые по идее должны поддерживать всё это безобразие.
- С версии 2.6.34 в ядре появилась поддержка vga_switcheroo.
- Ubuntu 11.10 установилась на моём ноуте без патчинга ядра. Это была самая лучшая новость! Раньше я использовал патч от Адама для этого (Adam’s patch).
В этот раз (с Ubuntu 11.10) многие проблемы решились. Сразу заработал инсталлятор (не смотря на превышение лимита в 4Gb Ram), ос установилась и нормально работала с встроенным видео. Однако, как это обычно бывает, пришлось многое что ещё сделать.
Bumblebee
Это проект поддержки использования дискретных карт на основе NVIDIA Optimus с проприетарными драйверами. Он – самый активно развивающийся проект на текущий момент. Недавно вышла версия 3.0 Позволяет вручную выгружать отдельные приложения на дискретную карту. Реализуется за счёт использования дополнительного X сервера для графической карты NVIDIA и пакета VirtualGL для трансфера данных между X серверами. Недавно была добавлена возможность отключения дискретной карты для некоторых моделей ноутбуков через acpi_call, когда она не используется. Дополнительно позволяет получить поддержку CUDA, поддержка VDPAU пока что не реализована. Проект создан и поддерживается Peter Lekensteyn из Нидерландов, за что выражаю ему респект и уважуху огромное спасибо! Ведь сама Nvidia не стала думать о своих Linux пользователях.
Bumblebee + Ubuntu 11.10. Let’s go!
Итак, задача стоит так же, как и год назад. Необходимо сделать так, чтобы постоянно была включена только встроенная видеокарта Intel, а Nvidia включалась и подключалась при необходимости. В этот раз мне удалось добиться положительного результата и вот как.
- Ставим свежую версию ОС. Сейчас это Ubuntu 11.10. Ждем-с 12.04
- НЕ СТАВИМ никаикх драйверов для видео.
- Накатываем все обновления (sudo apt-get update & sudo apt-get upgrade).
- Ставим последнее stock ядро: sudo apt-get update && sudo apt-get dist-upgrade
- sudo apt-get install mesa-utils
- Устанавливаем bumblbee по инструкции отсюда: 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 (no need to change $USER, this variable is set to your username)
- Ставим правильный драйвер, т.к. тот, который идёт с Bumblebee не работает корректно.
- sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
- sudo apt-get update
- sudo apt-get upgrade nvidia-current
- Перезагружаемся
Тестирование и бенчмарки
Для запуска приложения на дискретном видео выполняем команду: optirun firefox
Возникает логичный вопрос, а как же выключить дискретную видеокарту? Оказывается, начиная с версии 3.0 Bumblebee сам выключает дискретное видео, если оно не используется. Пруфлинк. И больше не надо вручную включать/выключать его! Но никто не отменял возможность включить/выключить её вручную.
Посмотреть статус:
1 |
# cat /proc/acpi/bbswitch |
Выключить дискретное видео:
tee /proc/acpi/bbswitch << OFF
Включить дискретное видео:
tee /proc/acpi/bbswitch <<< ON
Для тестирования удем использовать команду: optirun glxspheres
Вот результаты для встроенного видео (Intel Corporation Core Processor Integrated Graphics Controller (rev 02)):
1 2 3 4 5 6 7 |
andrey@z11:~$ 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)):
1 2 3 4 5 6 7 |
andrey@z11:~$ 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 разаа. Так можно и в игры гонять теперь 🙂 Например в CS через Wine.
Ссылки
http://www.mail-archive.com/bumblebee@lists.launchpad.net/msg00049.html
Ноутбук + 2 видеокарты — как жить?
Как Nvidia Optimus помогает экономить энергию
Поддержка гибридных графических карт
О том, как я заставлял Ubuntu работать 10 часов от батареи
Bumblebee 3.0 – программа для реализации поддержки Nvidia Optimus в Ubuntu
NVRM: failed to copy vbios to system memory.