Blender зависает при использовании интегрированной графики Intel

Blender зависает при использовании интегрированной графики Intel

Blender часто зависает и его приходится завершать во время обычного использования режима редактирования и объектного режима с интегрированной графикой Intel. Я использую версию 3.6.0 на Ubuntu 22.04, хотя проблема присутствует и в других версиях. У меня эта проблема была с тех пор, как у меня была установлена ​​Ubuntu, и она сохранялась после переустановки Ubuntu. После зависания мне удалось найти в журналах следующее:

В разделе "система"

20:02:34 kernel: i915 0000:00:02.0: [drm] GPU HANG: ecode 9:1:85df9e9f, in blender [35275]
20:02:34 kernel: i915 0000:00:02.0: [drm] blender[35275] context reset due to GPU hang

В разделе "приложения"

20:02:26 blender: WAYLAND found but libdecor was not, install libdecor for Wayland support, falling back to X11
20:02:26 blender: Unable to find 'libdecor-0.so'

Зависания, похоже, исчезают, если я использую довольно устаревшую внешнюю видеокарту (которая хуже в любом другом случае использования), так что проблема, похоже, специфична для графики Intel. Ни в одной другой программе, похоже, нет проблем с ней. Я поискал довольно много, но есть >50% вероятность, что я упускаю что-то болезненно очевидное. Спасибо!

EDIT: Установка libdecor не влияет на зависания, поэтому значимыми являются только первые сообщения журнала.

решение1

Я также столкнулся с этой проблемой на Debian 11 ("Bullseye") с Blender 3.6.1 (официальный двоичный файл Linux). Blender перестает отвечать просто при изменении размера куба запуска! dmesgпоказывает похожие сообщения о зависании GPU. Моя графическая карта Skylake GT2 [HD Graphics 520] интегрирована вместе с Intel Core i5-6300U.

Я обнаружил, что эта проблема отмечена как проблема2935(и дубликат3125) в репозитории Freedesktop для драйвера ядра Intel drm/i915.

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

Во-первых, увеличьте параметр драйвера preempt_timeout_msдо 10000. Это изменение можно сделать с помощью любого текстового редактора (с правами root), но вот однострочная команда, которая выполняет эту работу (используя, teeкак описаноhttps://stackoverflow.com/a/36853636):

$ echo 10000 | sudo tee /sys/class/drm/card0/engine/rcs0/preempt_timeout_ms

Изменение можно проверить по $ cat /sys/class/drm/card0/engine/rcs0/preempt_timeout_ms.

Примечание: это изменение настроек драйверане сохраняется при перезагрузках!

Затем Blender следует запустить с переменной среды (не имею ни малейшего понятия, что она делает, но это задокументировано наhttps://docs.mesa3d.org/envvars.html#intel-driver-environment-variables).

$ INTEL_DEBUG=reemit blender

Однако я обнаружил, что этот второй шаг проще автоматизировать, изменив blender.desktopфайл запуска, который я поместил в ~/.local/share/applications. После этогоhttps://unix.stackexchange.com/q/469466/194642, я изменил строку Exec следующим образом:

Exec=env INTEL_DEBUG=reemit /my/path/to/blender/bin/blender-3.6.1/blender %f

Пока что все работает (Блендер больше не зависает)...

Связанный контент