Como ativar o wine e-sync em sua distro Linux

Com o advento do Steam Play, da empresa Valve, proprietária do Steam, é impossível negar que agora finalmente possuímos uma solução oficial para rodar games compatíveis apenas com Windows® ou MacOS em nossa plataforma favorita. Ter um nome de peso dando suporte é algo que chama a atenção e não pode ser ignorado. A solução está sendo testada e utilizada por vários jogadores no mundo inteiro (supõe-se que essa marca já atingiu 1 milhão de usuários) para que os jogos sejam suportados o mais rapidamente, ou ainda, que ao menos possuam uma forma viável de ser jogados. Este post trata de um assunto que é direta e indiretamente ligado a games, porém é interessante que seja abordado, mesmo saindo do escopo direto do Steam Play/Proton/Wine/DXVK etc.

Mas afinal , o que é o Wine E-sync?

Em termos bem básicos, é um mecanismo que substitui algumas calls do wineserver por file descriptor calls. Para quem tem conhecimentos em programação é algo bem familiar. Clique no link a seguir para aprender mais: Limites de Recurso do Sistema e o Comando ulimit

O que ele faz, na prática, dentro de contexto de jogos é reduzir drasticamente a carga sobre o wineserver, especialmente jogos que utilizam todos os núcleos de processadores Multicore. Este recurso reduz cerca de 80% de carga a incríveis 10% ou menos, fazendo com o que jogo ganhe em desempenho, subindo cerca de 50 frames por segundo, dependendo das configurações do computador. Interessante, não? E como eu tenho acesso a este recurso? Veja a seguir:

1 – Verificando quantos files descriptors você possui:

$ ulimit -Hn
4096

Este é um valor muito baixo. Vamos aumentar para 1048576 e mitigar este “gargalo”. Para isso:

2 – Altere o arquivo/etc/security/limits.confadicionando ao final a opção * hard nofile 1048576 (use o editor da sua preferência)

$ sudo gvim /etc/security/limits.conf
* hard nofile 1048576

3 – Em distros que usam systemd, edite os arquivos /etc/systemd/system.conf/etc/systemd/user.conf adicionando ao final dos arquivos a opção DefaultLimitNOFILE=1024:1048576. Depois, execute o comando sudo systemctl daemon-reexec e então, reinicie a sua sessão de usuário. Verifique usando o comando ulimit -Hn para certificar que o valor foi alterado:

$ sudo gvim /etc/systemd/system.conf
DefaultLimitNOFILE=1024:1048576
$ sudo gvim /etc/systemd/user.conf
DefaultLimitNOFILE=1024:1048576
$ sudo systemctl daemon-reexec

Após reiniciar a sessão:

$ ulimit -Hn
1048576

4 – Desativando o Esync em um jogo rodando via Steam Play, caso você necessite:

a) Clique com o botão direito do mouse sobre o nome do jogo e acesse proprieades:

b) Na guia Geral, clique em Definir opções de inicialização…

c) Na caixa a seguir, utilize a opção PROTON_NO_ESYNC=1 %command%, confirme e o recurso estará desativado:

Referências:

https://github.com/zfigura/wine/blob/esync/README.esync

https://github.com/lutris/lutris/wiki/How-to:-Esync

https://www.ibm.com/support/knowledgecenter/pt-br/SSYKE2_7.0.0/com.ibm.java.lnx.70.doc/user/ulimits.html