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;
- O 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
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.
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