Compare commits
2 commits
836f36732e
...
b426eb4da1
| Author | SHA1 | Date | |
|---|---|---|---|
| b426eb4da1 | |||
| 85d00e3234 |
1 changed files with 81 additions and 0 deletions
|
|
@ -0,0 +1,81 @@
|
|||
# firefox на nvidia - рисует процессором, видео 30 fps
|
||||
|
||||
После апгрейда ютуб в фаерфоксе (deb из PPA mozillateam, 159) стал дёргаться: 60, потом хрясь - 30. Хоть 1080, хоть 2К, хоть в отдельном плеере.<br>
|
||||
Композитор не виноват: счётчик кадров в моём xfwm4 показывал, что он ни разу не опоздал - просто фаерфокс сам отдавал 16-48 кадров.
|
||||
|
||||
В `about:support` -> Графика:
|
||||
```
|
||||
Композитинг WebRender (Software)
|
||||
OPENGL_COMPOSITING ... FEATURE_FAILURE_GLXTEST_FAILED
|
||||
X11_EGL ... glxtest could not use EGL
|
||||
```
|
||||
То есть вся страница и видео рисуются процессором. Флаги в about:config (`gfx.webrender.all` и компания) тут не помогают - фаер честно пишет "force enabled by pref", а потом всё равно уходит в софтвар.
|
||||
|
||||
## Причина - аппармор
|
||||
|
||||
На 26.04 пакет фаерфокса из mozillateam тащит свой профиль `/etc/apparmor.d/usr.bin.firefox` в режиме enforce. Он называется так же (`firefox`), как пустышка Убунты `/etc/apparmor.d/firefox` (там `flags=(unconfined)`), и перебивает её. Смотреть надо не на файл, а на то, что загружено - в выводе фаера из терминала видно `label="firefox (enforce)"`.
|
||||
|
||||
В профиле есть доступ к mesa, а к nvidia - нет. Фаер при старте гоняет тест графики `gfxtest`, тот под профилем не может открыть драйвер - и всё, чёрный список на всё ускорение.
|
||||
|
||||
Проверить без гаданий:
|
||||
```
|
||||
/usr/lib/firefox/gfxtest glx
|
||||
```
|
||||
```
|
||||
aa-exec -p firefox -- /usr/lib/firefox/gfxtest glx
|
||||
```
|
||||
Первое видит RTX и OpenGL 4.6, второе пишет `libEGL initialize failed`. Вот и весь диагноз.
|
||||
|
||||
Добавить в `local/usr.bin.firefox` строку `include <abstractions/opengl>` - не помогает: драйвер ещё лезет пересоздавать `/dev/char/195:*`. Ковырять профиль по одному правилу смысла нет, отключаем:
|
||||
```
|
||||
sudo ln -s /etc/apparmor.d/usr.bin.firefox /etc/apparmor.d/disable/usr.bin.firefox
|
||||
```
|
||||
```
|
||||
sudo apparmor_parser -R /etc/apparmor.d/usr.bin.firefox
|
||||
```
|
||||
```
|
||||
sudo apparmor_parser -r /etc/apparmor.d/firefox
|
||||
```
|
||||
Фаер перезапустить полностью. Бонусом в `about:support` -> Песочница "Пользовательские пространства имён" становится true.
|
||||
|
||||
Вернуть как было:
|
||||
```
|
||||
sudo rm /etc/apparmor.d/disable/usr.bin.firefox && sudo apparmor_parser -r /etc/apparmor.d/usr.bin.firefox
|
||||
```
|
||||
|
||||
## about:config
|
||||
|
||||
```
|
||||
gfx.webrender.all true
|
||||
gfx.webrender.software false
|
||||
gfx.x11-egl.force-enabled true
|
||||
widget.dmabuf.force-enabled true
|
||||
media.hardware-video-decoding.force-enabled true
|
||||
```
|
||||
`gfx.webrender.software.opengl` не трогать - это про то, как выводить картинку, которую всё равно нарисовал процессор.
|
||||
|
||||
## Декодирование видео на видеокарте
|
||||
|
||||
После аппармора рисует уже видюха, но видео всё ещё декодирует проц (процесс `rdd` ~40% CPU). В about:support:
|
||||
```
|
||||
HARDWARE_VIDEO_DECODING ... FEATURE_HARDWARE_VIDEO_DECODING_NO_LINUX_NVIDIA
|
||||
```
|
||||
Это чёрный список самого фаера, force-enabled его не перебивает. Нужен `nvidia-vaapi-driver` и две переменные (из README драйвера):
|
||||
```
|
||||
LIBVA_DRIVER_NAME=nvidia MOZ_DISABLE_RDD_SANDBOX=1 firefox
|
||||
```
|
||||
Вторая снимает песочницу с процесса декодера - без неё драйвер в нём не заводится.
|
||||
|
||||
Чтобы не запускать из терминала - копия ярлыка в `~/.local/share/applications/firefox.desktop` (перекрывает системный, обновления её не трогают), во всех трёх `Exec=`:
|
||||
```
|
||||
Exec=env LIBVA_DRIVER_NAME=nvidia MOZ_DISABLE_RDD_SANDBOX=1 firefox %u
|
||||
```
|
||||
И для ссылок из других программ, если фаер стоит браузером по умолчанию в XFCE, - копия помощника `~/.local/share/xfce4/helpers/firefox.desktop`:
|
||||
```
|
||||
X-XFCE-Commands=env LIBVA_DRIVER_NAME=nvidia MOZ_DISABLE_RDD_SANDBOX=1 %B;
|
||||
X-XFCE-CommandsWithParameter=env LIBVA_DRIVER_NAME=nvidia MOZ_DISABLE_RDD_SANDBOX=1 %B "%s";
|
||||
```
|
||||
|
||||
Ещё грабли: если когда-то выбирал фаер в "Открыть с помощью -> другое приложение", в `~/.local/share/applications/` лежит `userapp-Firefox-*.desktop` с `Exec=/usr/lib/firefox/firefox-bin %u`. На 26.04 `firefox-bin` больше нет - html-файлы и прочее, привязанное к этому ярлыку в `mimeapps.list`, тупо не открываются. Поправить там `Exec=` так же, как выше.
|
||||
|
||||
Итог: основной процесс фаера 84% -> 32% CPU, декодер 42% -> 9%, видюха декодирует, ровные 60.
|
||||
Loading…
Add table
Add a link
Reference in a new issue