laptops.rst 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. .. ARU (c) 2018 - 2024, Pavel Priluckiy, Vasiliy Stelmachenok and contributors
  2. ARU is licensed under a
  3. Creative Commons Attribution-ShareAlike 4.0 International License.
  4. You should have received a copy of the license along with this
  5. work. If not, see <https://creativecommons.org/licenses/by-sa/4.0/>.
  6. .. _hybrid_graphics:
  7. ******************************
  8. Гибридная графика в ноутбуках
  9. ******************************
  10. .. index:: prime, dgpu, igpu
  11. .. _about:
  12. ================================
  13. Что такое гибридная графика?
  14. ================================
  15. Гибридная графика - это аппаратная конфигурация, в которой есть две и более
  16. видеокарт, которые могут работать в тандеме друг с другом. Такой подход
  17. встречается в основном в ноутбуках, где есть интегрированная графика (iGPU) от
  18. процессора и дискретная графика (dGPU). Его основное преимущество заключается в
  19. том, что интегрированная графика должна (но не обязательно) использоваться
  20. только для малозатратных задач, таких как серфинг в Интернете, просмотр видео и
  21. т. д. А дискретная графика используется для видеоигр, видеомонтажа,
  22. 3D-моделирования и так далее. Следовательно, если два GPU разделяют "большие" и
  23. "маленькие" задачи, и в данный момент выполняются только "маленькие" задачи, то
  24. нет никакого смысла в работе dGPU, поэтому его можно просто временно отключить
  25. (то есть усыпить), тем самым значительно снизив энергопотребление. Таким
  26. образом, когда dGPU снова понадобится (мы запустим приложение, которое его
  27. использует), он проснется и возобновит работу.
  28. .. index:: prime, optimus, bumblebee
  29. .. _what_is_prime:
  30. =========================
  31. Что такое PRIME?
  32. =========================
  33. PRIME - это универсальная технология для работы с различными наборами гибридной
  34. графики в Linux, такими как NVIDIA Optimus/AMD Dynamic Switchable Graphics.
  35. PRIME Offload - это реализация идеи переноса выполнения рендеринга с одного GPU
  36. на другой, но вот отображением уже готовых кадров на экран заниматься будет тот
  37. GPU, который управляет дисплеем в данный момент, как правило это встроенная
  38. графика. Поддержка PRIME в закрытом драйвере NVIDIA фактически началась только
  39. с драйвера 435.17, поэтому если вы являетесь пользователем устаревшей ветки
  40. драйверов 390xx или даже 340xx, PRIME Offload не будет работать для вас.
  41. Обратите внимание, что автор настоятельно не рекомендует вам использовать
  42. устаревшие способы использования гибридной графики, такие как nvidia-xrun или
  43. Bumblebee. Они устарели и не поддерживаются (Bumblebee не обновлялся уже более
  44. 8 лет), работают исключительно на убогих хаках и имеют низкую
  45. производительность. В то же время открытый драйвер Nouveau поддерживает PRIME
  46. Offload, что может стать неплохой альтернативой для старых dGPU.
  47. Кроме того, пожалуйста, избегайте использования таких инструментов, как
  48. optimus-manager. Они могут показаться вам очень удобными, но поверьте, они
  49. могут вызвать множество проблем, и они вам на самом деле не нужны, если ваш
  50. графический процессор поддерживает PRIME Offload и динамическое управление
  51. питанием.
  52. .. index:: xorg, kms, modeset
  53. .. _setup_prime:
  54. ===================
  55. Настройка PRIME
  56. ===================
  57. Для того чтобы заставить работать PRIME в закрытом драйвере NVIDIA, необходимо
  58. включить поддержку KMS (указать параметр ``nvidia-drm.modeset=1``), что уже
  59. подробно описывалось в разделе :ref:`first-steps` (Включение поддержки KMS).
  60. При условии, что все модули NVIDIA загружаются правильно, а проверить это можно
  61. при помощи команды ``lspci -k | grep "Kernel driver in use: nvidia"``, вы уже
  62. можете полноценно использовать вашу дискретную видеокарту. **Никакой
  63. дополнительной настройки Xorg делать не нужно!**. Для современных версий
  64. драйвера все должно работать из коробки.
  65. .. note:: Если модули драйвера NVIDIA по какой-то причине не загружаются,
  66. убедитесь, что вы отключили *Secure Boot* в настройках UEFI.
  67. Для конфигураций, где обе видеокарты управляются открытыми драйверами Mesa (к
  68. примеру AMD+AMD, AMD+Intel или даже Intel+NVIDIA, где дискретная графика NVIDIA
  69. находится под управлением открытого драйвера Nouveau), ничего настраивать не
  70. нужно и для использования дискретной графики нужно лишь указать переменную
  71. окружения ``DRI_PRIME=1`` перед запуском приложений или игр по аналогии со
  72. всеми переменными, которые будут описаны далее для NVIDIA или использовать уже
  73. готовые графические способы.
  74. .. index:: rtd3, nvidia
  75. .. _dynamic_power_managment:
  76. ---------------------------------
  77. Динамическое управление питанием
  78. ---------------------------------
  79. Поддержка динамического управления питанием вашей дискретной видеокарты
  80. позволяет драйверу полностью отключать её питание на время простоя, то есть
  81. когда в ней нет необходимости, она просто уходит в состоянии сна не потребляя
  82. никакой энергии. К сожалению, она доступна не для всех и работает только для
  83. мобильных видеокарт NVIDIA начиная с поколения Turing (16xx/20xx) и выше. Для
  84. видеокарт поколения Ampere её поддержка включена по умолчанию и никаких
  85. дополнительных действий производить не нужно, однако если вы являетесь
  86. обладателем графики именно поколения Turing, то вам так же понадобиться создать
  87. дополнительные файлы настройки и правила udev, которые будут выполнять
  88. настройку динамического управления питания при каждом запуске. Для этого просто
  89. создайте файл под названием ``/etc/udev/rules.d/71-nvidia.rules`` со следующим
  90. содержанием:
  91. .. code-block:: shell
  92. :caption: ``sudo nano /etc/udev/rules.d/71-nvidia.rules``
  93. ACTION=="add|bind", SUBSYSTEM=="pci", DRIVERS=="nvidia", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", TEST=="power/control", ATTR{power/control}="auto"
  94. ACTION=="remove|unbind", SUBSYSTEM=="pci", DRIVERS=="nvidia", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", TEST=="power/control", ATTR{power/control}="on"
  95. .. warning:: Динамическое управление питание на текущий момент не работает для
  96. видеокарт поколения Turing при использовании открытых модулей драйвера
  97. NVIDIA (``nvidia-open-dkms``) [#]_.
  98. Вам также потребуется изменить значение параметра для модуля драйвера NVIDIA,
  99. который и активирует работу динамического управления питанием:
  100. .. code-block:: shell
  101. :caption: ``sudo nano /etc/modprobe.d/nvidia-dynamic-powermanagment.conf``
  102. options nvidia NVreg_DynamicPowerManagement=0x02
  103. После чего рекомендуется обновить образы initramfs через команду ``sudo
  104. mkinitcpio -P`` и перезагрузиться. Чтобы убедиться, что все работает правильно
  105. нужно проверить вывод команды ``cat /proc/driver/nvidia/gpus/*/power``, он
  106. должен быть примерно следующим::
  107. Runtime D3 status: Enabled (fine-grained)
  108. Video Memory: Active
  109. GPU Hardware Support:
  110. Video Memory Self Refresh: Supported
  111. Video Memory Off: Supported
  112. S0ix Power Management:
  113. Platform Support: Supported
  114. Status: Disabled
  115. .. index:: prime-run
  116. .. _usage_prime_offload:
  117. ============================
  118. Использование PRIME Offload
  119. ============================
  120. Чтобы указать, что вы хотите использовать дискретную графику вместо встроенной,
  121. перед запуском программы необходимо указать несколько переменных окружения::
  122. __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia <program>
  123. Такой набор переменных выглядит очень громоздким и его легко забыть, поэтому вы
  124. можете установить пакет ``nvidia-prime`` (``sudo pacman -S nvidia-prime``),
  125. который содержит скрипт-псевдоним ``prime-run`` для всех этих переменных. Тогда
  126. запуск приложения с его помощью будет выглядеть следующим образом::
  127. prime-run <program>
  128. Где ``<program>`` - это имя команды, запускающей ваше приложение. Например, вы
  129. можете запустить команду ``glxinfo``, чтобы проверить корректность работы PRIME
  130. Offload::
  131. prime-run glxinfo | grep OpenGL
  132. Если вывод данной команды даёт вам упоминание вашей дискретной видеокарты,
  133. значит вы всё сделали правильно. При возникновении проблем, советуем вам
  134. перепроверить правильность установки драйвера NVIDIA и загрузки всех модулей.
  135. .. index:: plasma, gnome, cinnamon, steam, lutris
  136. .. _graphical_way:
  137. ----------------------
  138. Графический способ
  139. ----------------------
  140. Возможно, запуск всех необходимых приложений через терминал с помощью
  141. ``prime-run`` покажется вам не слишком удобным, но некоторые приложения
  142. позволяют вам указывать запуск игр/других приложений с использованием
  143. дискретной графики через специальные настройки.
  144. .. index:: lutris, games
  145. .. _lutris:
  146. ~~~~~~~
  147. Lutris
  148. ~~~~~~~
  149. Чтобы настроить запуск игр с использованием дискретной графики в Lutris, нужно
  150. зайти в настройки (три полоски в правом верхнем углу окна и кнопка
  151. *"Настройки"*). Далее перейдите в раздел *"Global options" -> "Display" ->
  152. GPU"*. Здесь вы выбираете графический процессор, с которым будет запускаться
  153. игра.
  154. .. image:: images/lutris-prime.png
  155. .. index:: steam, games
  156. .. _steam:
  157. ~~~~~~
  158. Steam
  159. ~~~~~~
  160. В Steam нет специальных настроек для запуска игр с дискретной графикой, но вы
  161. можете нажать на *"Шестеренку"* и перейти в *"Свойства"* перед запуском игры,
  162. после чего прописать команду ``prime-run %command%`` или указанные ранее
  163. переменные окружения, например:
  164. .. image:: images/steam-prime.png
  165. .. index:: desktop, prime
  166. .. _desktop_environments:
  167. ~~~~~~~~~~~~~~~~~~~~~~
  168. Графические окружения
  169. ~~~~~~~~~~~~~~~~~~~~~~
  170. Ряд пользовательских окружений таких как KDE Plasma, Cinnamon и GNOME имеют
  171. встроенную интеграцию с PRIME при помощи специального инструмента как
  172. ``switcheroo-control``. Чтобы получить заветную удобную кнопку для запуска
  173. приложений с использованием дискретной графики в данных окружениях и без
  174. необходимости лезть в терминал, вы должны установить данный пакет и включить
  175. соответствующую службу::
  176. sudo pacman -S switcheroo-control
  177. sudo systemctl enable --now switcheroo-control
  178. .. note:: Использование switcheroo-control позволяет работать описанным ниже
  179. графическим способам на всех конфигурациях PRIME, в которых даже нет NVIDIA
  180. dGPU, например AMD+AMD.
  181. .. index:: plasma
  182. .. _plasma_way:
  183. """"""""""""
  184. KDE Plasma
  185. """"""""""""
  186. После установки ``switcheroo-control`` щелкните правой кнопкой мыши на нужную
  187. вам значок приложения на рабочем столе или в меню приложений, затем перейдите в
  188. *"Свойства"* -> *"Приложение"* -> *"Дополнительные параметры"* -> *"Запускать с
  189. использованием дискретной графики"*.
  190. .. image:: images/plasma-prime.jpg
  191. .. _cinnamon_way:
  192. """"""""""
  193. Cinnamon
  194. """"""""""
  195. По аналогии с Plasma в Cinnamon, вы также можете зайти в меню приложений,
  196. кликнуть правой кнопкой мыши по значку приложения и в появившемся контекстном
  197. меню выбрать *"Свойства"*, после чего в появившемся меню поставить флажок
  198. *"Использовать выделенный графический процессор, если он доступен"*.
  199. .. image:: images/cinnamon-prime.png
  200. """""""
  201. GNOME
  202. """""""
  203. В GNOME также следует щелкнуть правой кнопкой мыши по значку приложения и
  204. выбрать *"Запустить с дискретной графикой"*. Но учтите, что GNOME не запоминает
  205. этот выбор, и в следующий раз, когда вы просто щелкните по значку, приложение
  206. все равно будет работать с интегрированной графикой.
  207. .. index:: dgpu, nvidia, x11
  208. .. _troubleshooting:
  209. ===========================
  210. Устранение проблем с PRIME
  211. ===========================
  212. .. index:: external-monitor, laggy
  213. .. _external_monitor_laggy:
  214. --------------------------------
  215. Внешний монитор сильно тормозит
  216. --------------------------------
  217. Это известная проблема с драйвером NVIDIA, связанная с тем, что порт для
  218. подключения монитором управляется NVIDIA dGPU, в то время как композитинг и
  219. отображение кадров выполняется с учетом работы iGPU. Вам следует установить
  220. последнюю версию драйвера NVIDIA и использовать Wayland с композитором,
  221. поддерживающим явную синхронизацию. Для GNOME это было исправлено в версии
  222. 46.2. Для Plasma 6 это, вероятно, было исправлено в версии 6.1, хотя некоторые
  223. пользователи сообщают о нормальной работе уже в версии 6.0. В других
  224. окружениях/оконных менеджерах эта проблема все еще присутствует, поэтому для ее
  225. устранения необходимо перейти на последнюю версию GNOME или Plasma.
  226. В случае работы в окружениях на базе протокола X11 вы также можете решить эту
  227. проблему переставив iGPU и dGPU местами, сделав тем самым дискретную графику
  228. NVIDIA главным GPU, что позволяет избавиться от тормозов. Чтобы это сделать
  229. нужно создать следующий конфиг:
  230. .. code-block:: shell
  231. :caption: ``sudo nano /etc/X11/xorg.conf.d/10-gpu.conf``
  232. Section "ServerLayout"
  233. Identifier "layout"
  234. Screen 0 "nvidia"
  235. Inactive "integrated"
  236. EndSection
  237. Section "Device"
  238. Identifier "nvidia"
  239. Driver "nvidia"
  240. BusID "PCI:1:0:0" # Например: "PCI:1:0:0"
  241. EndSection
  242. Section "Screen"
  243. Identifier "nvidia"
  244. Device "nvidia"
  245. Option "AllowEmptyInitialConfiguration"
  246. EndSection
  247. Section "Device"
  248. Identifier "integrated"
  249. Driver "modesetting"
  250. EndSection
  251. Section "Screen"
  252. Identifier "integrated"
  253. Device "integrated"
  254. EndSection
  255. В поле "BusID" вы должны указать собственное значение номера шины вашего dGPU в
  256. том формате, в котором он указан в примере. Изменить нужно лишь первую цифру из
  257. примера с ``1`` на ваш номер шины, если конечно он уже не равен ``1``. Его вы
  258. можете узнать при помощи следующей команды: ``lspci -Dd "10de:*:030x" | cut -f
  259. 2 -d ":" | awk '{x=$0+0;print x}'``. После сохранения файла и перезагрузки
  260. вашим GPU по умолчанию должна стать NVIDIA графика.
  261. .. [#] https://forums.developer.nvidia.com/t/clarifying-560-series-drivers-open-sourcedness-vs-kernel-module-type-proprietary/292698/2