Desempenho do Battlefield 4 no GNU/Linux: como corrigir microstutter?

Boa noite, pessoal!

Há algum tempo comecei a jogar, no GNU/Linux, um jogo que eu joguei muito no Windows: Battlefield 4. Estou usando a versão Steam (dos repositórios oficiais do Manjaro). A princípio, eu usava o Debian, e tive um probleminha com o ping nas partidas. Depois acabei migrando para o Manjaro e esse problema foi resolvido ao utilizar o Proton Glorious Eggroll (ProtonGE).

Bem, um problema comum aos dois sistemas permanece: microstutter. Parece ser algo frequente nesse jogo ao rodar no GNU/Linux, conforme as pesquisas que fiz. Meu computador conseguia rodar esse jogo sem qualquer problema no Windows. As configurações da máquina são as seguintes:

Há um microstutter bem chatinho que parece ocorrer em intervalos regulares, apesar do desempenho geral do jogo estar bacana. Coisas que já tentei fazer:

O problema permanece, apesar dessas correções terem ajudado (especialmente no caso da última). Estou ciente de que meu processador é um 4/4 limitado para jogos modernos, mas ele não alcança picos de 100% de uso para justificar esse microstutter. É possível jogar, mas a experiência não é agradável.

O jogo está configurado para 2560x1080p @ 75 Hz, qualidade ultra. Alterar a qualidade não faz diferença na ocorrência do problema. O jogo está instalado em um SSD (Netac N530S 360GB).

Portanto, gostaria de perguntar: alguém aí está rodando esse jogo no GNU/Linux? Notou problemas de desempenho? Realizou alguma ação que surtiu efeito?

Desde já, obrigado. :slight_smile:

This issue has been resolved! I thought to try playing on Manjaro again, and with the EA App and Wine 6.19-GE instead of Origin + whatever Wine version I was using then it works flawlessly.

That being said, I’ve had to downgrade from the 2060 to 1060; I’m not sure if the change in graphics card is what fixed it, but I can’t imagine.

Anyone with this issue, try the following or a similar config:

  • Wine-GE-6.19-1 DXVK + D3D Extras + DXVK NVAPI + Esync + Fsync enabled in Lutris.
  • Use the EA App, not Origin.
  • In Lutris, configure Battlefield 4 → System options tab, put bf4.exe EADesktop.exe BF_Launcher.exe in the “Include processes” field.

Curious if this helps anyone!

Fonte:

1 curtida

Agradeço pela resposta, mas eu já havia encontrado essas soluções. No caso, estou rodando o jogo pela Steam, e portanto é necessário usar o cliente do Origin. :slight_smile:

E, aparentemente, isso teria relação com a correção que apliquei ao Origin (desabilitar permissão de escrita).

2 curtidas

Eu não tenho o jogo para testar, mas recomendaria algumas coisas que geralmente eu faço:
Use algo como o cpufreq que controle o clock.
Desativar vsync, preferir o limitador interno do jogo.
Desativar qualquer limitador de quadros externos.
Desinstalar o gamemode, essa ferramenta sempre atrapalhou muito a estabilidade quando eu usava.
Testar o parâmetro “DXVK_ASYNC=1” no jogo.
Garantir que o esync esteja devidamente configurado: wine/README.esync at esync · zfigura/wine · GitHub

Essas foram as que lembrei agora, espero que ajude.

2 curtidas

Obrigado pelas dicas! Sobre cada uma:

  • Quanto ao CPUFreq, meu processador já atinge o máximo para os 4 núcleos (3.8 GHz) enquanto estou jogando, então não há limitação nesse sentido. E em nenhum momento ele alcança 100% de uso, ficando geralmente entre 50% e 80%.
  • O vsync eu já não usava, mas experimentei trocar o limitador externo pelo limitador interno do jogo. Não altera o resultado, o stutter continua ocorrendo em intervalos regulares. Se eu remover o limitador, o desempenho piora muito, pois aí a taxa de FPS sobe e o uso do processador vai a 100%.
  • Nunca usei o Gamemode.
  • Testei o parâmetro “DXVK_ASYNC=1” e notei uma enorme queda de desempenho, então o removi.

Mais algumas coisas que tentei e parecem ter ajudado:

  • Desativar todas as notificações e sons de notificações da Origin logo que ela abre.
  • Aumentar a escala de resolução para manter o pipeline da placa de vídeo cheio. Esse jogo, mesmo no ultra (em 2560x1080p), é leve para minha placa de vídeo. Aumentar a escala de resolução faz o uso dela subir e, consequentemente, os stutters parecem diminuir.

Contudo, o problema ainda existe. Pesquisei em vários lugares e, aparentemente, esse problema não tem solução definitiva ainda. Não é possível ter uma boa experiência no Battlefield 4, versão Steam, jogando no GNU/Linux, independentemente do hardware. No Windows 10 meu computador rodava esse jogo no ultra a 75 FPS cravados sem qualquer sinal de microstutter.

Em algum momento vão acabar trocando a Origin pelo EA App no Proton, pois a Origin será descontinuada. Aí sim talvez resolva, tomando como base as soluções mencionadas pelo colega @mngustavo13.

Talvez tenha esperança, tem um projeto semelhante ao DXVK chamado GRVK que converte a api Mantle também usado no BF4 em Vulkan. Nunca testei mas parece que o projeto esta avançando.
Pagina do projeto:

Jogos que usam a api Mantle suportados:

2 curtidas

Descobri mais uma coisa. Ao usar o Proton da Steam, ao invés do ProtonGE, o stutter é MUITO mais leve e raro. Ainda acontece, mas incomoda muito menos. Só tem um porém: o ProtonGE é necessário para corrigir a falta do ping no jogo, uma vez que boa parte dos servidores te expulsam se não conseguirem detectar seu ping.

Tentei usar o Proton Experimental com o comando setcap, desta forma:

sudo setcap cap_net_raw+epi "/home/kairand/.local/share/Steam/steamapps/common/Proton - Experimental/files/bin/wineserver"
sudo setcap cap_net_raw+epi "/home/kairand/.local/share/Steam/steamapps/common/Proton - Experimental/files/bin/wine-preloader"
sudo setcap cap_net_raw+epi "/home/kairand/.local/share/Steam/steamapps/common/Proton - Experimental/files/bin/wine64-preloader"

Contudo, descobri que essa tática não funciona mais, já que a Valve introduziu um runtime com pressure-vessel, que mantém todos os jogos confinados em um contêiner, removendo os privilégios.

Descobri que uma possível solução é fazer um bypass, mas é uma solução paliativa, não permanente, e que afeta todos os jogos. Além disso, seria necessário fazer novamente toda vez que o SteamLinuxRuntime_soldier for atualizado: Proton 5.13 forces Steam Linux Runtime -> No MangoHud · Issue #369 · flightlessmango/MangoHud · GitHub

Ainda estou indeciso se irei fazer essa gambiarra ou não. Atualmente é uma sinuca de bico: ficar tomando kick na maioria dos servidores por não ter ping ou então conviver com stutter.

Bem, tem uma solução mais óbvia também, né. Vou tentar uma versão do Proton anterior ao 5.13 com o comando setcap.

Tentei os comandos setcap no Proton 5.0, também não funcionaram.

Complicado…

Vale a pena controlar o governor do cpu. É justamente na transição do estado de baixo consumo para alto processamento que ele atua, ou seja, diminui o tempo necessário para realizar uma operação. Isso pode ser aplicado tanto no cpu quanto na gpu.

Selecionar o modo performance trava o clock do cpu, o que é muito proveitoso em aplicações real-time, tal qual jogos.

Eu tenho um script que quando vou jogar já trava o cpu em “performance” ( cpupower frequency-set -g performance ), trava o clock da gpu ( echo "7" > /sys/class/drm/card0/device/pp_dpm_sclk no meu caso que é amd) e aumenta todos os fans pra 50%. Ao final da jogatina volto tudo ao normal.

Eu sofria com microstutter e isso resolveu, principalmente ao travar o clock da placa de vídeo!

1 curtida

Opa, obrigado pela dica. :slight_smile:

Contudo, não se aplicaria ao meu caso. Meu processador já atinge sua frequência máxima constantemente enquanto estou jogando, mantendo os 4 núcleos cravados em 3.8 GHz. Além disso, esse problema do micro stutter ocorre apenas no Battlefield 4, outros jogos estão rodando super bem.

Esse jogo (Battlefield 4) é bem conhecido por ter problemas de microstutter no GNU/Linux, pelo que andei vendo. E é algo que independe da configuração do PC.

Acredito que dependemos da EA e da Valve para termos uma solução definitiva… Talvez quando o Origin for substituído pelo EA App, algo que deve ocorrer ainda no próximo ano.

Pessoal, atualizei o Proton GloriousEggroll para a versão 7.0, logo que foi lançada, e a questão do microstutter melhorou muito. Atualmente, essas travadinhas estão ocorrendo de forma muito mais rara.

Então, fica a dica: utilizar uma versão acima de 7.0 do Proton GloriousEggroll para resolver o problema do ping e minimizar (muito) o microstutter. Além disso, deixar a Steam processar todos os shaders do Vulkan previamente, é claro.

Para quem usa Debian, o problema do ping depende de um passo extra:

1 curtida

Este tópico foi fechado automaticamente 3 dias depois da última resposta. Novas respostas não são mais permitidas.