Contexto CUDA para NVENC não encontrado após suspensão do sistema

3

Contexto

Atualizei recentemente meus drivers da nVidia para 375.26 e recompilei o FFmpeg N-83180-gcf3affa e o OBS 17.0.2-5-g43e4a2e (desculpe se esses números não significam nada, não tenho certeza de quais números de versão são significativos ) na minha máquina Debian. Fazer uma suspensão na RAM fará com que o OBS pare de funcionar com sua única correção para reinicializar a máquina.

Como reproduzir

  1. Executar OBS
  2. Configuração de saída:

    • Defina a saída para NVENC H.264 e .mp4
    • Use CBR
    • Taxa de bits = 200 K
    • Kf interval = 0
    • Baixa latência, predefinição de alta qualidade, principal, automática
    • codificação de 2 passagens ativada
    • GPU = 0
    • quadros B = 0
  3. Inicie a gravação e pare para confirmar que funciona

  4. Ir para ações de login e clicar em suspender
  5. Ativar e fazer login novamente
  6. Iniciar a gravação, o OBS falha com este erro:

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

Informações do sistema

  • Versões de drivers / software listadas acima
  • GPU: MSI GTX 970
  • uname -a: versão do Linux 3.16.0-4-amd64, # 1 SMP Debian 3.16.39-1 (2016-12-30)
  • SO: Debian 8.7 Jessie

Eu uso o XFCE 4.10 se isso fizer diferença em como os botões de ação funcionam.

Pergunta

Existe alguma maneira de reinicializar todas as vezes para evitar esse erro depois de ativar o computador?

Editar 1

Eu sei que a OBS é a fonte desse problema.

Caso de teste 1:

  1. Inicie o computador, use o codificador h264_nvenc do ffmpeg para gerar um arquivo de vídeo
  2. Suspender para RAM
  3. Faça login, repita com sucesso a etapa 1

Caso de teste 2:

  1. Inicie o computador, use o OBS para gravar um vídeo com h264_nvenc
  2. Sair OBS
  3. Suspender para RAM
  4. Faça login, repita com êxito a etapa 2

Caso de teste 3:

  1. Inicie o computador, use o OBS para gravar vídeo com h264_nvenc
  2. Suspender para RAM
  3. Login, falha com Cannot init CUDA

Meu palpite é que o OBS não fecha seus fluxos quando uma gravação é interrompida, ela provavelmente é persistente por motivos de desempenho (?) até você sair do programa? Eu não tenho idéia de como consertar isso. Reiniciar o OBS não tem efeito quando o erro aparecer, você deve reinicializar o sistema.

Parece que a GPU é completamente boa em lidar com tudo o mais, no entanto, glxinfo , nvidia-smi , nvidia-settings todos confirmam que a GPU está realmente sendo utilizada para processar outras tarefas. Parece que o NVENC é a única coisa que tem problemas após a suspensão para a RAM.

Editar 2

Aqui estão os dmesg logs: https://www.diffchecker.com/wto7KPJZ

Tabbed "original" foi o que mudou depois de fazer a suspensão, tabbed "mudou" foi o que mudou depois de fazer a correção que eu sugeri.

Total dmesg output: https://0paste.com/10601#hl

    
por xTrollxDudex 22.01.2017 / 20:00

1 resposta

0

O FFmpeg só é bloqueado no init CUDA se um fluxo h264_nvenc foi iniciado (e interrompido, mas isso não é necessário) antes de colocar o sistema em suspensão. Se o OBS nunca gravar nada com o codificador h264_nvenc antes da suspensão, ele funcionará bem quando você fizer o login novamente.

Se o OBS travar após o login, ele poderá ser usado por:

  1. Sair do OBS
  2. Executar no terminal:

    sudo rmmod nvidia_uvm && sudo modprobe nvidia_uvm
    
  3. Abra novamente o OBS

  4. ???
  5. Lucro

Se descarregar nvidia_uvm não funcionar, os módulos DRM e modeset podem precisar ser recarregados também, embora eu nunca tenha tido esse problema.

    
por 23.01.2017 / 18:48