“Algumas pessoas relaxam com uma boa bebida à beira da piscina, eu relaxo brincando com [código de montagem] embutido”, como uma bela citação do dia, como Linus Torvalds explicou depois que 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. Linus Torvalds afirma que relaxa brincando de desenvolver patches.
Conforme escrito há cerca de um mês, houve 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 é usada de sistemas de arquivos para redes para somas 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.
Linus Torvalds afirma que relaxa brincando de desenvolver patches
Esse patch de otimização de desempenho para csum_partial foi enviado hoje por meio da solicitação pull 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 e 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” eo apenas um que realmente importa é provavelmente o de 40 bytes.Sim, sim, 64 bytes é o tamanho normal do cacheline e é “tradicional” para desenrolar. Mas não há nada realmente mágico nisso aqui. Resultado final: nãoteria foi bom fazer apenas pedaços de 40 bytes, e faça com que os “dois blocos de 32 bytes sobrepostos” de 64 bytes sejam dois dos 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 com o que eu esperava, mas pode ser um lixo completo.Eu adicionei algumas coisas “prováveis ()” apenas porque fez o asm 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. Euvou agora volte para minha caverna e continue puxando coisas, eu só tive que fazer outra coisa por um tempo. Algumas pessoas relaxam com uma boa bebida na piscina, eu relaxo brincando com asma inline.
Linus Torvalds acabou fundindo o patch de otimização csum_partial original enquanto sua versão passa por mais comentários/discussões.
O engenheiro do AMD Linux Borislav Petkov, que gerenciou a solicitação pull x86/misc, respondeu à mensagem de Linus Torvalds com:
E há um terceiro tipo que relaxa à beira da piscina com uma boa bebida, *enquanto* brinca com asm em linha. ;-P