GNU Coreutils 9.1 promete melhorar eficiência

GNU Coreutils 9.1 promete melhorar eficiência
GNU Coreutils 9.1 promete melhorar eficiência

O GNU Coreutils 9.1 foi lançado neste fim de semana como a atualização de recurso mais recente para esses utilitários importantes amplamente usados no Linux e em outras plataformas. Assim, o GNU Coreutils 9.1 promete melhorar eficiência ao fornecer cp, cat, ls e outros comandos comuns.

O GNU Coreutils 9.1 apresenta uma ampla variedade de correções, melhorias e outras alterações. Empolgando-me com o GNU Coreutils 9.1 são várias melhorias de eficiência, como cat agora usando a chamada de sistema copy_file_range para outros comandos usando syscalls mais adequados para uma maior eficiência.

Alguns dos destaques do Coreutils 9.1 incluem:

O comando cat agora usa o copy_file_rangechamada de sistema quando disponível ao fazer cópias simples entre arquivos regulares. Por sua vez, isso deve ser mais eficiente com possível descarregamento/reflinking de cópia. A syscall copy_file_range é usada para copiar um intervalo de dados de um arquivo para outro — entre dois descritores de arquivo sem ter que passar pelo espaço do usuário;

  • Os comandos cp , mv e install agora usam as chamadas de sistema do tipo openat ao copiar para um diretório, o que evitará algumas condições de corrida e será mais eficiente;
  • O comando ls não colore mais arquivos com recursos por padrão, pois raramente são usados e aumenta o tempo de processamento em cerca de 30% por arquivo;
  • ls e statcomandos não tentarão mais montar arquivos automaticamente por padrão, revertendo para o comportamento anterior;
  • O chmod’ing recursivo com chmod -R não sairá mais com um status de erro se encontrar links simbólicos;
  • Correção do comportamento de cópia (cp) no macOS que pode levar a um problema de cópia incorreta ao copiar de um sistema de arquivos Apple APFS para outro sistema de arquivos. Também existem outras correções do macOS, bem como o cp agora criando um clone de cópia na gravação quando a origem e o destino são arquivos regulares no APFS.

Mais detalhes sobre todas as mudanças do Coreutils 9.1 via GNU.org.

Biblioteca GNU C descarta vários caminhos de código otimizados SSSE3

GNU Coreutils 9.1 promete melhorar eficiência. A série Xeon 5100 introduziu o suporte SSSE3. Imagem do teste Linux 5100 “Woodcrest” em 2006.

O código de desenvolvimento mais recente da GNU C Library (Glibc) desta semana começou a descartar vários caminhos de código otimizados para SSSE3.

O Supplemental Streaming SIMD Extensions 3 (SSSE3) remonta a mais de uma década ao Intel Xeon 5100/Core 2 days ou AMD Bobcat/Bulldozer como uma iteração do SSE. No entanto, com a Glibc também carregando caminhos de código otimizados para SSE2 ou SSE4.1 mais antigos da mesma época que SSSE3, além de caminhos de código AVX2 e EVEX para CPUs Intel/AMD mais recentes, os caminhos de código SSSE3 estão sendo eliminados.

Os desenvolvedores da Glibc determinaram que não vale mais a pena enviar caminhos de código otimizados para SSSE3, dados os caminhos de código SSE2/SSE4.1/AVX2/EVEX também existentes, que poucas CPUs Intel/AMD são deixadas para a rota SSSE3. O custo do tamanho do código para carregar o SSSE3 é mensurável e, a partir desta semana, os desenvolvedores começaram a removê-lo.

Entre as remoções do SSSE3 estão descartando mem{move|cpy}-ssse3-back, str{p}{n}cpy-ssse3, str{n}cat-ssse3, str{n}{case}cmp-ssse3 e {w } caminhos de código memcmp-ssse3.

A série Xeon 5100 introduziu o suporte SSSE3. Imagem do meu teste Linux 5100 "Woodcrest" em 2006.
O SSSE3 foi útil nos dias do Core 2, mas para CPUs dos últimos anos, os caminhos de código Glibc AVX2 são mais benéficos.


Há também uma redução no código SSSE3 em torno de memmove/mempcpy/memcpy. 

O commit explica:

O objetivo é remover a maioria das funções SSSE3, pois SSE4, AVX2 e EVEX são geralmente preferíveis. memcpy/memmove é uma exceção onde evitar cargas desalinhadas com `palignr` é importante para alguns alvos.Este commit substitui o memmove-ssse3 por uma versão melhor otimizada de menor pegada de código. Também alias memcpy para memmove.Além desta função, todas as outras funções SSSE3 devem ser removidas com segurança.O desempenho não é alterado drasticamente, embora mostre melhorias gerais sem grandes regressões ou ganhos.bench-memcpy geometric_mean(N=50) Novo / Original: 0,957bench-memcpy-random geometric_mean(N=50) Novo / Original: 0,912bench-memcpy-large geometric_mean(N=50) Novo / Original: 0,892Benchmarks onde executado ZhaoxinKX-6840@2000MHz

Esta eliminação progressiva dos caminhos de código SSSE3 onde relevante está acontecendo para a versão Glibc 2.36.

Via Phoronix