Bug 49972 - Добавить NVreg_PreserveVideoMemoryAllocations=1 и NVreg_TemporaryFilePath=
Summary: Добавить NVreg_PreserveVideoMemoryAllocations=1 и NVreg_TemporaryFilePath=
Status: CLOSED WORKSFORME
Alias: None
Product: Sisyphus
Classification: Development
Component: nvidia_glx_common (show other bugs)
Version: unstable
Hardware: x86 Linux
: P5 enhancement
Assignee: Sergey V Turchin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-04-09 18:39 MSK by Vladislav Babenko
Modified: 2024-04-18 15:44 MSK (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vladislav Babenko 2024-04-09 18:39:36 MSK
После добавления modeset=1 в nvidia_glx_common /etc/modprobe.d/
(Был добавлен в этом таске. https://packages.altlinux.org/en/tasks/332535/)

Стал возможен режим сессий под wayland композитором.

Проблема в том, что в wayland режиме при входе в спящий режим или гибернизацию, есть высокий шанс потерять часть данных из видеопамяти (Когда зарезервированного места в RAM меньше, чем занято видеопамяти). Что выливается в артефакты и отсутствие элементов.

На основании README из пакета nvidia, я предлагаю использовать их решение, с использованием их юнитов в systemd и 2-х дополнительных опций modprobe:
NVreg_PreserveVideoMemoryAllocations=1
NVreg_TemporaryFilePath=

Вопрос только в том, правильно ли будет вообще включение юнитов nvidia-suspend, nvidia hibernate и nvidia-resume во время установки?

И как эти опции отразятся на старых видеокартах со старыми драйверами, где нет поддержки?

И есть ещё отдельный вопрос, связанный с NVreg_TemporaryFilePath. Его можно и не указывать, тогда, по умолчанию будет использоваться tmp каталог. 

Но в Вики **не рекомендуют** использовать tmpfs директории, т.к. будет риск нехватки всё той же RAM, и рекомендуют использовать любой другой каталог (run тоже tmfs каталог). Вариант отдельного каталога не указан. 
Я предлагаю указывать отдельный каталог, но нужно решить, где он будет находиться.
Как вариант, можно каталог /var/tmp

Сама страница в  README: 
https://download.nvidia.com/XFree86/Linux-x86_64/550.40.07/README/powermanagement.html
Comment 1 Vladislav Babenko 2024-04-09 19:03:18 MSK
В 2-х словах:
Если сейчас в Wayland выйти в спящий режим или гибернизацию, в большинстве случаев будет потеря элементов экрана.

Если modeset=1 в пакет добавили, то может и решение проблем с сохранением видеопамяти тоже добавить?
Comment 2 Sergey V Turchin 2024-04-11 12:34:56 MSK
> И есть ещё отдельный вопрос
Отдельный вопрос -- отделный баг. В этом отдельные вопросы будут создавать бардак.
Comment 3 Sergey V Turchin 2024-04-17 19:10:45 MSK
(Ответ для Vladislav Babenko на комментарий #1)
> Если сейчас в Wayland выйти в спящий режим или гибернизацию, в большинстве
> случаев будет потеря элементов экрана.
Как воспроизвести?
Comment 4 Vladislav Babenko 2024-04-17 20:02:19 MSK
Как воспроизвести:
Зайти в сессию с wayland режимом, перейти в спящий режим. Главный момент, чтобы выделенных ресурсов видеопамяти было больше, чем выделено в оперативке. Т.е. если ОЗУ 8 гигов, а в самой карте от силы 1 или 2 гига, то скорее всего всё будет хорошо. Это происходит, когда примерный паритет ram и vram, либо 2-ой больше.

Что ожидаю: корректное отображение элементов.

Что происходит: Отсутствие элементов графики на экране. Текстов, объектов, задников.

На самом деле, в документации описана 2 варианта. 1-ый, про который я описал и 2-ой, связанный с режимом сна в s0ix. И у того и у того есть свои нюансы. Например, от 1-го варианта на некоторых устройствах с prime могут быть проблемы. Им необходим 2-ой вариант, который, как раз больше для переносных устройств подходит и не работает на стационарных.

Я теперь не уверен, должно ли это быть в самом пакете. Бегло посмотрел на других дистрибутивах и ничего такого не обнаружил (но сам nvidia_drm.modeset=1 при этом есть). Для этого необходимо какое-то комплексное решение, и скорее всего, такое делать в самом пакете не стоит. По крайней мере, пока у других это не появится и неотработается.
Comment 5 Sergey V Turchin 2024-04-18 11:38:35 MSK
(Ответ для Vladislav Babenko на комментарий #4)
> Это происходит, когда примерный паритет ram и vram, либо 2-ой больше.
Такое довольно редко бывает.

[...]
> Бегло посмотрел на
> других дистрибутивах и ничего такого не обнаружил (но сам
> nvidia_drm.modeset=1 при этом есть).
Да.

> Для этого необходимо какое-то комплексное решение
Документация.

>, и скорее всего, такое делать в самом пакете не стоит.
> По крайней мере, пока у других это не появится и неотработается.
Согласен.
Comment 6 Vladislav Babenko 2024-04-18 15:44:26 MSK
(Ответ для Sergey V Turchin на комментарий #5)
> (Ответ для Vladislav Babenko на комментарий #4)
> > Это происходит, когда примерный паритет ram и vram, либо 2-ой больше.
> Такое довольно редко бывает.

Как раз наоборот, частно. Я написал неправильную вещь насчёт паритета. У меня, например 8 gb vram и 16 ram и мне уже не хватает. А в дешёвых и средних сегментах уже есть видеокарты и с 8, и с 12 гб vram. Я не знаю сколько выделяется в системной памяти для пространства драйвера, но этого мало для сохранения всех ресурсов видеопамяти. 

Например, у GDM есть свой файл с udev.rules, который запрещает режим wayland на nvidia, если не включена одна из этих опций.
Правило для 1 способа:
https://git.altlinux.org/srpms/g/gdm.git?p=gdm.git;a=blob;f=gdm/data/61-gdm.rules.in;h=010f9eb1ab9f4ce5085cdcefc509592107fc948c;hb=46.0-alt1#l41

И правило для 2-го способа, которые появились недавно и поэтому только в аппстриме:
https://gitlab.gnome.org/GNOME/gdm/-/blob/main/data/61-gdm.rules.in?ref_type=heads#L42

В самой документации Nvidia написано:
"However, these allocations are collectively large, and TYPICALY cannot be evicted. Since the amount of system memory available to drivers at suspend time is OFTEN insufficient to accommodate large portions of video memory, the nvidia kernel drivers are designed to act conservatively, and normally only save essential video memory allocations."

Я согласен, что по крайней мере пока в других дистрибутивах этого не появилось, не стоит с этим торопиться, но само решение этой проблемы насущее.

Спасибо Вам Сергей, за уделённое время!