Pull to refresh

Поддержка гибридных графических карт

Reading time 3 min
Views 9.7K
В последнее время на рынке ноутбуков появляется всё больше и больше моделей, содержащих не одну, а сразу две графические карты. Первая обычно от Intel, малопроизводительная и не жадная к батарее, и вторая от NVIDIA или ATI, берущая на себя тяжёлые задачи и требовательные игры, в то же время очень прожорливая в отношении к заряду батареи. Практически всё время работает первая графическая карта, вторая начинает работать, как только в ней возникает необходимость, и находится в отключённом состоянии всё остальное время.

Поддержкой Windows производители озаботились в полной мере, что не удивительно. Всё работает практически «из коробки», достаточно поставить нужный набор драйверов.

Под Linux пока что не всё так гладко. Стоит уяснить сразу, поддержка на уровне ядра практически отсутствует. Есть несколько проектов, реализующие отдельный функционал, как выключение карт или передача изображений от одной карты к другой, но, чтобы вот так всё и сразу, — увы и ах. Всё осложняется тем, что производители не сильно спешат добавлять поддержку своих велосипедрешений в Linux и не рассказывают, как на них ездиими управлять.

Технические детали

В большинстве случаев дискретная (вторая) карта оказывается никуда не подключена, и передача изображения на интегрированную карту выполняется силами ПО и драйверов. Это объясняет наличие виртуального экрана CRT-0 или DFP-0 в системе, к которому невозможно нормально подключиться. Тем не менее, иногда это возможно.

Рассмотрим большинство доступных на этот момент решений.

vga_switcheroo

Модуль ядра, реализующий переключение между картами (выключение одной карты, включение другой). Появился в ядре с версии 2.6.34. Также получил расширенные возможности и большую поддержку карт в byo-switcheroo (ранее asus-switcheroo). Требует наличие примонтированной debugfs, для переключения между картами требуется выключение X сервера. К тому же работает только с открытыми драйверами.

acpi_call

Ещё один модуль ядра, но пока что не вошедший в основную ветку. Возможно, он там никогда не окажется. Расположен на github. Основная задача — дать пользователю возможность передавать командные строки в подсистему acpi. В основном же используется, чтобы включать и выключать дискретную карту в целях экономии энергии.

hybrid-windump

Приложение для проброса основного экрана X сервера, в экран другого X сервера. Также расположено на github. Позволяет объединить два экрана с разных X серверов на одном физическом дисплее.

bumblebee

Проект поддержки использования дискретных карт на основе NVIDIA Optimus с проприетарными драйверами. Самый активно развивающийся проект на текущий момент. Расположен опять на github. Позволяет вручную выгружать отдельные приложения на дискретную карту. Реализуется за счёт использования дополнительного X сервера для графической карты NVIDIA и пакета VirtualGL для трансфера данных между X серверами. Недавно была добавлена возможность отключения дискретной карты для некоторых моделей ноутбуков через acpi_call, когда она не используется. Дополнительно позволяет получить поддержку CUDA, поддержка VDPAU пока что не реализована.

Что дальше?

В ядре 3.0 ожидается добавление более продвинутого метода переключения через MXM. Тем не менее это всего лишь малая часть от полноценной поддержки всего и вся. Также рекомендуется подписаться на рассылку linux-hybrid-graphics и следить за обновлениями на специализированном блоге. Ну, и конечно же по возможности проявлять активность в сообществе, помогая развивать различные решения и предоставляя дампы acpi вашего оборудования.

Список ссылок
  1. Заявление про поддержку NVIDIA Optimus в Linux — www.nvnews.net/vbulletin/showpost.php?p=2183477&postcount=2
  2. Коммит модуля vga_switcheroo в основную ветку ядра — git.kernel.org/linus/6a9ee8af344e3bd7dbd61e67037096cdf7f83289
  3. Репозиторий byo-switcheroo на github — github.com/awilliam/asus-switcheroo
  4. Репозиторий acpi_call на github — github.com/avilella/acpi_call
  5. Репозиторий hybrid-windump на github — github.com/gebart/hybrid-windump
  6. Проект VirtualGL — www.virtualgl.org
  7. Репозиторий bumblebee на github — github.com/MrMEEE/bumblebee
  8. Новость про поддержку Optimus в ядре 3.0 — www.phoronix.com/scan.php?page=news_item&px=OTQzMA
  9. Рассылка hybrid-graphics-linux на launchpad — lists.launchpad.net/hybrid-graphics-linux
  10. Блог про поддержку гибридной графики в Linux — linux-hybrid-graphics.blogspot.com
Tags:
Hubs:
+38
Comments 29
Comments Comments 29

Articles