Nova otimização da função memset() no glibc

O engenheiro da Intel, Noah Goldstein, otimizou a função memset() na biblioteca glibc. Essa otimização proporciona um ganho de desempenho de cerca de 7,5% nas versões desktop dos processadores das arquiteturas Skylake-X e Ice Lake. Para as versões de servidor, o ganho de desempenho é um pouco menor, principalmente devido à menor performance geral de um único núcleo.

Na implementação anterior da função memset(), era utilizada a instrução assembly rep stosb. Até recentemente, essa instrução funcionava bastante rápido, graças à otimização interna de escrita zero-over-zero. No entanto, foi encontrada uma vulnerabilidade potencial nessa otimização, que poderia levar a um ataque de canal lateral. Como resultado, a otimização zero-over-zero writeback foi descontinuada, o que causou a degradação do desempenho do rep stosb. Na nova versão do memset(), a instrução rep stosb ainda é utilizada, mas sob condições mais rigorosas.

O que exatamente mudou pode ser entendido pela alteração do seguinte comentário no código, que descreve os detalhes da implementação do memset()

Versão anterior da descrição:

/* memset is implemented as: 1. Use overlapping store to avoid branch. 2. If size is less than VEC, use integer register stores. 3. If size is from VEC_SIZE to 2 * VEC_SIZE, use 2 VEC stores. 4. If size is from 2 * VEC_SIZE to 4 * VEC_SIZE, use 4 VEC stores. 5. On machines ERMS feature, if size is greater or equal than __x86_rep_stosb_threshold then REP STOSB will be used. 6. If size is more to 4 * VEC_SIZE, align to 4 * VEC_SIZE with 4 VEC stores and store 4 * VEC at a time until done. */

Nova versão da descrição:

/* memset is implemented as: 1. Use overlapping store to avoid branch. 2. If size is less than VEC, use integer register stores. 3. If size is from VEC_SIZE to 2 * VEC_SIZE, use 2 VEC stores. 4. If size is from 2 * VEC_SIZE to 4 * VEC_SIZE, use 4 VEC stores. 5. If size is more to 4 * VEC_SIZE, align to 1 * VEC_SIZE with 4 VEC stores and store 4 * VEC at a time until done. 6. On machines ERMS feature, if size is range [__x86_rep_stosb_threshold, __x86_memset_non_temporal_threshold) then REP STOSB will be used. 7. If size >= __x86_memset_non_temporal_threshold, use a non-temporal stores. */

Fonte: linux.org.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster