· Gabriel Krisman Bertazi, André Almeida

Gabriel Krisman Bertazi, André Almeida e o futex do Proton

As engine de jogos do windows vive de WaitForMultipleObjects, uma thread espera varios eventos ao mesmo tempo e acorda quando qualquer um dispara. No linux o futex espera um endereço por chamada mas o wine emulava isso com eventfd, um file descriptor por objeto de sincronização, milhares de reads, writes e polls por segundo.

Gabriel Krisman Bertazi. Kernel Developer na SUSE. Brasileiro. Em 30 de julho de 2019 pela Collabora mandou pra lkml o patch que criava o FUTEX_WAIT_MULTIPLE. No Signed-off-by: dois engenheiros da Valve e quem tinha escrito o fsync do Wine. O patch deu +4% de performance em Beat Saber e +1,5% em Shadow of the Tomb Raider rodando no Proton com isso a Valve colocou o fsync no Proton 4.11 exigindo kernel patchado. Zen, Liquorix, o kernel da própria SteamOS.

Os mantenedores do futex barraram a interface. futex() já era uma syscall multiplexada mas em 2020 André Almeida criou o futex2 com uma syscall por operação. Brasileiro da Igalia. Portou a glibc, o systemd e o Wine do Proton pra interface nova, e iterou o patchset na lista por mais de um ano. O futex.c, um monólito com quase duas décadas de acúmulo, foi quebrado em módulos. Em 9 de janeiro de 2022, o kernel 5.16 saiu com futex_waitv(). Uma thread, até 128 futexes, uma chamada. O texto do patch declara o caso de uso: emular o WaitForMultipleObjects do Windows.

Em 25 de fevereiro de 2022, a Valve entregou os primeiros Steam Deck. Todo jogo de Windows num SteamDeck ou qnd você joga pelo Linux passa pelo Proton. Todo lock que esses jogos esperaram passou por uma syscall desenhada por brasileiros.

#Linux #SteamDeck #kernel #Proton #opensource #BrazilianTech