Контекст CUDA для NVENC не найден после приостановки системы

контекст

Недавно я обновил драйверы nVidia до 375.26 и перекомпилировал FFmpeg N-83180-gcf3affa и OBS 17.0.2-5-g43e4a2e (извините, если эти цифры ничего не значат, я не совсем уверен, какие номера версий значительны) на моем Debian. Выполнение приостановки в ОЗУ приведет к тому, что OBS перестанет работать со своим единственным исправлением, чтобы перезагрузить компьютер.

Как воспроизвести

  1. Запустить OBS
  2. Конфигурация вывода:

    • Установите выход в NVENC H.264 и .mp4
    • Использовать CBR
    • Битрейт = 200K
    • Kf интервал = 0
    • Низкая латентность, пресет высокого качества, основной, автоматический
    • Включено кодирование 2-х сторон
    • GPU = 0
    • B-frames = 0
  3. Начните запись и остановите, чтобы подтвердить, что она работает.

  4. Перейдите к действиям входа и нажмите кнопку suspend
  5. Включить и снова войти в систему
  6. Начните запись, ошибка OBS с этой ошибкой:

    [h264_nvenc @ 0x3fdd1e0] Failed creating CUDA context for NVENC: 0x3e7 [h264_nvenc @ 0x3fdd1e0] No NVENC capable devices found 

Системная информация

  • Драйверы / версии программного обеспечения, перечисленные выше
  • Графический процессор: MSI GTX 970
  • uname -a: версия Linux 3.16.0-4-amd64, # 1 SMP Debian 3.16.39-1 (2016-12-30)
  • ОС: Debian 8.7 Jessie

Я использую XFCE 4.10, если это имеет значение для работы кнопок действий.

Вопрос

Есть ли способ, чтобы не перезагружать каждый раз, чтобы избежать получения этой ошибки после пробуждения компьютера?


Редактировать 1

Я знаю, что OBS является источником этой проблемы.

Тестовый кейс 1:

  1. Запустите компьютер, используйте ffmpeg's h264_nvenc encoder для вывода видеофайла
  2. Приостановить работу в ОЗУ
  3. Логин, успешно повторите шаг 1

Тестовый пример 2:

  1. Запустите компьютер, используйте OBS для записи видео с h264_nvenc
  2. Выйти из OBS
  3. Приостановить работу в ОЗУ
  4. Войти, успешно повторите шаг 2

Тестовый кейс 3:

  1. Запустите компьютер, используйте OBS для записи видео с h264_nvenc
  2. Приостановить работу в ОЗУ
  3. Вход в систему с ошибкой Cannot init CUDA

Я предполагаю, что OBS не закрывает свои потоки, когда запись останавливается, вероятно, она сохраняется для определения производительности (?) До выхода из программы? Я не знаю, как это исправить. Перезапуск OBS не действует сразу после появления ошибки, вы должны перезагрузить систему.

Похоже, что GPU полностью справляется со всем, тем не менее, glxinfo , nvidia-smi glxinfo , nvidia-settings все подтверждают, что GPU действительно используется для обработки других задач. Кажется, что NVENC – единственное, что имеет проблемы после приостановки в ОЗУ.


Изменить 2

Вот журналы dmesg : https://www.diffchecker.com/wto7KPJZ

Вложенные «оригинальные» были изменены после выполнения приостановки, вкладка «изменилась» была изменена после выполнения исправления, которое я предложил.

Полный выход dmesg : https://0paste.com/10601#hl

One Solution collect form web for “Контекст CUDA для NVENC не найден после приостановки системы”

FFmpeg блокируется только при инициализации CUDA, если поток h264_nvenc был запущен (и остановлен, но это не нужно) перед тем, как приостановить систему. Если OBS никогда ничего не записывает с кодировщиком h264_nvenc перед приостановкой, он будет работать нормально при повторном входе в систему.

Если OBS блокируется после входа в систему, он станет пригодным для использования:

  1. Выход из OBS
  2. Запуск в терминале:

     sudo rmmod nvidia_uvm && sudo modprobe nvidia_uvm 
  3. Открыть OBS снова

  4. ???
  5. прибыль

Если разгрузка nvidia_uvm не работает, возможно, потребуется перезагрузить модули DRM и модулей, хотя у меня никогда не было этой проблемы.

Linux и Unix - лучшая ОС в мире.