"Algumas pessoas relaxam com uma boa bebida à beira da piscina, eu relaxo brincando com [código de montagem] embutido." Essa bela citação do dia foi explicada por Linus Torvalds depois que ele começou a melhorar um patch de otimização de desempenho que foi proposto para a janela de mesclagem do Linux 6.5 em andamento.
Há um mês atrás, foi lançado um patch para fornecer um grande aumento na taxa de transferência e diminuir a latência para a chamada csum_partial, uma função comumente usada no kernel do Linux para fins de soma de verificação. A função csum_partial é utilizada em sistemas de arquivos e redes para cálculos de soma de verificação. Com o patch proposto, pode haver uma melhoria de 8 a 9% na latência e cerca de 30% na taxa de transferência em certos casos.
Hoje, esse patch de otimização de desempenho para o csum_partial foi enviado por meio da solicitação de pull do x86/misc. Enquanto Linus Torvalds revisava o código, ele comentou na lista de discussão:
"Honestamente, olhando para esse patch, minha reação é 'por que ele foi desenrolado em blocos de 64 bytes, se 40 bytes é o valor mágico?'. Blocos de bytes independentes aumentam o ILP. Portanto, mesmo o caso de 64 bytes não está realmente fazendo um desdobramento de 64 bytes, mas sim dois desdobramentos de 32 bytes em paralelo. Portanto, você tem três valores 'mágicos' e o único que realmente importa é provavelmente o de 40 bytes.
Sim, sim, 64 bytes é o tamanho normal da linha de cache e é 'tradicional' para desenrolar. Mas não há nada realmente mágico nisso aqui. Resultado final: não teria sido bom fazer apenas pedaços de 40 bytes e fazer com que os 'dois blocos de 32 bytes sobrepostos' de 64 bytes sejam dois blocos de 40 bytes.
Algo como o patch anexado (TOTALMENTE NÃO TESTADO!)?
Novamente: isso não foi testado. Dei uma olhada rápida no assembly gerado e parecia mais ou menos o que eu esperava, mas pode ser um lixo completo.
Eu adicionei algumas coisas 'prováveis ()' apenas porque fez o assembly gerado parecer mais natural (ou seja, seguiu a ordem do código-fonte ali), caso contrário, são anotações questionáveis.
Finalmente: eu já mencionei que isso é completamente não testado?"
Depois de enviar essa mensagem, ele percebeu um erro simples em seu código Assembly escrito à mão e acrescentou:
"...Percebi isso olhando o patch mais uma vez. Nenhum teste real aconteceu. Ainda pode ser um lixo com bugs, mesmo com aquele '+r'. É apenas um pouco menos lixo com bugs. Eu vou agora voltar para minha caverna e continuar mexendo nas coisas, eu só precisei fazer outra coisa por um tempo. Algumas pessoas relaxam com uma boa bebida na piscina, eu relaxo brincando com assembly em linha."
Fundindo o patch de otimização csum_partial original enquanto a sua versão passa por mais comentários/discussões.
O engenheiro do Linux da AMD, Borislav Petkov, que gerenciou a solicitação pull x86/misc, respondeu à mensagem de Linus Torvalds com:
"E há um terceiro tipo de pessoa que relaxa à beira da piscina com uma boa bebida, enquanto brinca com assembly em linha. ;-P"
Essa interação entre Linus Torvalds e Borislav Petkov destaca o amor de Linus pela programação e sua dedicação em melhorar o desempenho do kernel Linux. Embora seja uma tarefa desafiadora e exigente, ele encontra prazer em explorar o código de montagem e encontrar maneiras de otimizá-lo. Sua paixão pela programação é evidente em suas palavras e demonstra o compromisso contínuo de melhorar o Sistema Operacional Linux.
Até a próxima !!
Nenhum comentário:
Postar um comentário