Kernel Fsync no Fedora

Contextualizando:

Em 2018, o Steam, da proprietária Valve lançou a nova versão do Steam Play, de codinome Proton, que nada mais é que uma versão empacotada e customizada do Wine, somadada a outras ferramentas. A nota de lançamento pode ser conferida neste post e proporcionou aos gamers Linuxers uma nova alternativa de rodar jogos que as empresas desenvolvedoras não publicavam um port, argumentando a falta de interessados e o market share baixo do Linux em desktops. A Valve, juntamente com a Codeweavers e a comunidade de usuários interessados em adicionar melhorias ao código, vêm desenvolvendo desde então uma maneira de executar os games nos mais variados tipos de hardwares, apoiando-se em APIs como Vulkan, sendo utilizados através do DXVK e D9VK, onde este ultimo já encontra-se incorporado ao primeiro. Ainda assim, todo o esforço ainda não foi suficiente, e outros recursos extras foram sendo criados, como o Esync, prometendo reduzir o overhead e aumentar a performance dos jogos. Ainda assim, os experimentos foram além e é neste ponto que chegamos ao patch Fsync, que é implementado a nível de kernel.

Afinal, o que é o Fsync?

É um recurso que tem como objetivo otimizar a forma de como a gravação de arquivos no disco é realizada, buscando aumentar a performance. Exemplo:

Quando você usa um arquivo de texto ou documento do office, quando o programa grava dados, muitos desses dados são mantidos nos buffers do computador (ram). Quando você salva ou grava parte desse arquivo ou documento, a transferência de volta para o disco é colocada em uma fila de gravações de arquivos a serem feitas. É enviado em lote por razões de desempenho. O sistema pode não gravar os dados por um longo período de tempo e até que a gravação ocorra, os dados a serem gravados ainda estão localizados nos buffers. Pode ser perdido se houver uma falha de energia ou se um lote de dados não for concluído.

Para um arquivo baseado em disco, as gravações são feitas em lotes de solicitações. A função fsync informa ao Linux que 1) seu arquivo deve ir para a frente da fila e 2) não espere para acumular um lote, mas anote todos os dados desse arquivo agora e libere os buffers.

Por que lotes de gravações? Resposta: O sistema operacional pode reordenar os dados a serem gravados para otimizar a atividade do disco.

No caso dos games o raciocínio é o mesmo, como exemplificado aqui https://steamcommunity.com/games/221410/announcements/detail/2957094910196249305

Mais informações podem ser encontradas também aqui nesta thread

https://steamcommunity.com/app/221410/discussions/0/3158631000006906163/

Instalando o Kernel Fsync no Fedora:

a) Adicionando o repositório:

$ sudo dnf copr enable gloriouseggroll/kernel

b) Para que você não receba o kernel mainline, adicione ao repositório o parâmetro priority=1 assim:

# echo Priority=1 >> /etc/yum.repos.d/_copr\:copr.fedorainfracloud.org\:gloriouseggroll\:kernel.repo 

c) Instalando o kernel

$ sudo dnf update --refresh
$ sudo dnf distro-sync

Reinicie o computador, abra o steam via terminal e acompanhe as mensagens no prompt. Ao abrir um game, você deve ver a mensagem fsync up and running o que significa que ocorreu tudo bem.

Comente se esta dica ajudou e se o desempenho em algum game específico foi melhorado.

Referências:

https://copr.fedorainfracloud.org/coprs/gloriouseggroll/kernel/

https://steamcommunity.com/games/221410/announcements/detail/2957094910196249305

https://steamcommunity.com/app/221410/discussions/0/3158631000006906163/