Uma implementação da função memchr foi proposta para o kernel Linux, rodando até 4 vezes mais rápido

Um conjunto de patches com uma implementação otimizada da função memchr(), usada para procurar um símbolo em um array, foi proposto para inclusão no kernel Linux. Ao contrário da versão antiga, que utilizava comparação byte a byte, a implementação proposta é construída levando em consideração o uso total dos registradores da CPU de 64 e 32 bits. Em vez de bytes, a comparação é realizada por meio de palavras de máquina, o que permite comparar pelo menos 4 bytes por vez.

Ao pesquisar em strings grandes, a nova opção acabou sendo cerca de 4 vezes mais rápida que a antiga (por exemplo, para strings de 1000 caracteres). Para strings pequenas, a eficiência da nova implementação não é tão significativa, mas ainda é maior em comparação à versão original. No kernel Linux, o tamanho das strings processadas em memchr() chega a 512 bytes. O ganho de desempenho para strings de 512 bytes, numa situação em que o caracter pesquisado está no final da string, é de 20%.

Testar o kernel 5.18 com a nova opção "memchr()" para arquiteturas de 32 e 64 bits não revelou nenhum problema. O ganho geral de desempenho dos subsistemas do kernel ao usar a versão otimizada do “memchr()” ainda não foi avaliado, nem a viabilidade de substituição da implementação foi analisada (no código do kernel, chamadas para a função memchr() ocorrem 129 vezes , inclusive no código de drivers e sistemas de arquivos).

Fonte: opennet.ru

Adicionar um comentário