LINUX.ORG.RU

Работа аппаратного декодирования (ускорения) в linux

 , ,


0

1

Привет. Объясните мне одну вещь, желательно доступно. Есть пк с амд графикой. Установлен опенсорсный драйвер amdgpu и пакет для работы vaapi. По vainfo вижу следующее:

      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileNone                   :	VAEntrypointVideoProc

Есть mpv с такой настройкой:
hwdec=vaapi
Беру любое видео 720p, не важно, локальное или из интернета (не стрим), включаю его, проверяю по «i» на оверлее работу декодирования - работает (при запуске через терминал тоже есть строка о работе аппаратного декодирования)
Using hardware decoding (vaapi).
AO: [pulse] 22050Hz stereo 2ch float
VO: [gpu] 1280x720 vaapi[nv12]
получаю такую картину:
08:56:59 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
08:57:01 PM  all   20.69    0.00    6.65    0.00    0.99    0.49    0.00    0.00    0.00   71.18
08:57:02 PM  all   21.67    0.00    8.62    0.00    0.49    0.00    0.00    0.00    0.00   69.21
08:57:03 PM  all   23.30    0.00    7.28    0.00    1.46    0.24    0.00    0.00    0.00   67.72
08:57:04 PM  all   19.80    0.00    7.92    0.00    0.50    0.25    0.00    0.00    0.00   71.53
08:57:05 PM  all   20.94    0.00    7.64    0.00    0.74    0.25    0.00    0.00    0.00   70.44
08:57:06 PM  all   21.15    0.00    7.45    0.00    1.20    0.24    0.00    0.00    0.00   69.95
08:57:07 PM  all   22.11    0.00    5.65    0.00    0.74    0.00    0.00    0.00    0.00   71.50
08:57:08 PM  all   18.38    0.00    7.60    0.00    0.49    0.25    0.00    0.00    0.00   73.28
08:57:09 PM  all   23.56    0.00    7.21    0.00    1.44    0.48    0.00    0.00    0.00   67.31
Average:     all   20.12    0.00    7.07    0.02    0.88    0.22    0.00    0.00    0.00   71.69
Беру тоже видео, врубаю в оффтопике - загрузка цпу максимум 4%, загрузка гпу 2-3%. Отсюда вопрос: а декодирование вообще работает? Это нормальная картина для линукса или тут что-то не так? Потому что, если я врублю какое-то vp9 видео в ютубе через браузер, у меня +- та же картина.


Попробуй vdpau, vaapi под интел заточено, хоть и работает. В браузерах можно сказать, что декодирование не работает, если у тебя не экспериментальная сборка, или флеш плеер через vdpau.

22050Hz

Какая-то маленькая частота.

boowai ★★ ()

Это нормальная картина для линукса или тут что-то не так?

Нет. Для локального 720p видео должно быть не больше 5 процентов общей нагрузки на проц.

Kron4ek ★★★ ()
Ответ на: комментарий от boowai

Попробуй vdpau

В моем случае аксиома Эскобара

В браузерах можно сказать, что декодирование не работает

Так не про браузеры речь, а про проигрывание через mpv

Какая-то маленькая частота

Все претензии к пульсе и мпв. Я всего лишь скинул выхлоп.

Zeww ()
Ответ на: комментарий от Kron4ek

Собственно, тогда вопрос. Как фиксить? Ошибок я в логах не наблюдаю, настроено все вроде как правильно. Чего-то не хватает? Какой-то опции? Какого-то пакета? Я в недоумении.

Zeww ()
Ответ на: комментарий от Zeww

Честно, не знаю. У меня AMD нет, только интеграшка от Intel.

Впрочем, может декодирование VP9 не очень работает? Попробуй сравнить h264 в mpv и браузере.

Edit. Хотя ты написал, что любое видео. Значит и h264 видимо проверил.

Kron4ek ★★★ ()
Последнее исправление: Kron4ek (всего исправлений: 1)

Нужно запускать perf top и смотреть, где это время CPU тратится. Возможно, понадобится собрать mpv с отладочной информацией, или поставить готовую, если в дистрибутиве есть такая опция.

i-rinat ★★★★★ ()
Ответ на: комментарий от Zeww

Странно, что pthread_mutex_lock в топ вылез. У тебя там Firefox на фоне не был запущен? Он любит лочить направо и налево.

Дальше стоит попробовать построить flamegraph и разглядывать уже его.

Сначала собираешь данные:

perf record --call-graph dwarf -a -F 997 sleep 60
Эта команда минуту будет собирать стеки со всей системы. Ожидается, что эту минуту у тебя будет работать mpv (или что ты там будешь тестить). Потом делаешь из собранных данных svg-картинку:
perf script | ./stackcollapse-perf.pl | ./flamegraph.pl > out.svg
Скрипты лежат тут: https://github.com/brendangregg/FlameGraph.

В итоге у тебя получится примерно это: http://www.brendangregg.com/FlameGraphs/cpu-bash-flamegraph.svg. Снизу вверх — последовательность вызовов. Ширина полосок соответствует времени CPU. Слева направо не связано со временем, все развёртки стеков просто сгруппированы.

i-rinat ★★★★★ ()

У меня для 4к видео в районе 5% нагрузки на процессор с vdpau (если отключить фильтры), если включить фильтры и постпроцессинг по максимуму (что отключит vdpau) то в районе 15-20% на фуллхд, 1 ядра. И несколько процентов на другие. На онтопике. Наверно у тебя просто кукуруза, это нормально. В оффтопике тоже mpv?

А так порнушка сейчас только 4к@60fps в интернете, надо будет посмотреть загрузку. Вроде всё нормально было, в районе 60% процессора. Но я не помню, это h264 или h265 был.

anonymous ()
Ответ на: комментарий от boowai

Попробуй vdpau, vaapi под интел заточено, хоть и работает.

Угумс. Настолько сильно под интел заточено, что многие плюшки AMD VCN только под vaapi и работают в этой ОС.

robus ★★★★ ()
Последнее исправление: robus (всего исправлений: 1)
Ответ на: комментарий от robus

Так VDPAU только для декодирования.

Для кодирования есть OpenMAX , vaapi тоже есть. Но работают они с большими плясками вокруг инициализации, цветовых пространств и форматов. FFmpeg недостаточно гибкий для такого, в gstreamer хотя бы многострочник можно написать.

boowai ★★ ()
Ответ на: комментарий от boowai

Для кодирования есть OpenMAX , vaapi тоже есть. Но работают они с большими плясками вокруг инициализации, цветовых пространств и форматов

не замечал никаких плясок с nvenc и простым, рабоче-крестьянским, ffmpeg

anonymous ()
Ответ на: комментарий от anonymous

Так значит для него прописали уже параметры по-умолчанию, раз там разнообразие оборудования небольшое. Только, что nvenc в windows ещё работает, но это скорей даже ускоряет разработку.

boowai ★★ ()

Если хочется нормально скалируемых (а не как с vo=vaapi) оверлеев, вот профиль для vaapi под X11:

[vaapi-x11]
vo=gpu
gpu-context=x11egl
hwdec=vaapi

Профиль для vaapi под Wayland (vo=vaapi там попросту не взлетит):

[vaapi-wayland]
vo=gpu
gpu-context=wayland
hwdec=vaapi

Юзать mpv с настройкой --profile=vaapi-x11 или --profile=vaapi-wayland соответственно.

robus ★★★★ ()
Ответ на: комментарий от boowai

многие плюшки AMD VCN только под vaapi и работают в этой ОС

Так VDPAU только для декодирования.

Ну вперёд: декодируй аппаратно VCN-ом вот этот сампл 4K VP9. Вангую, что получится только через vaapi.

Если что, вот тут ещё куча сэмплов разных форматов.

robus ★★★★ ()