Deixando minha build de debug 100x mais rápida: SIMD e silício dedicado ao resgate

2025-02-18

Ao desenvolver um aplicativo torrent baseado em C, o autor encontrou um tempo de inicialização de build de debug lento (20-30 segundos). Isso se devia principalmente à verificação de valores de hash SHA1 para cada parte do arquivo baixado na inicialização do programa, significativamente reduzida pelo Address Sanitizer no modo de depuração. O artigo explora várias técnicas de otimização, incluindo o uso de instruções SIMD e do hardware de aceleração SHA dedicado da CPU. Em última análise, usando o conjunto de instruções de extensão SHA da Intel, o tempo de inicialização foi reduzido para 866,9 milissegundos, obtendo uma melhoria de desempenho de 100 vezes. O artigo detalha a implementação e a comparação de desempenho de várias abordagens de otimização, discutindo a otimização do compilador e o impacto da E/S de disco.

Leia mais
Desenvolvimento

A API de Temporizador Multiplataforma Elusive: Uma Jornada Através das APIs do Sistema Operacional

2025-02-06

Este artigo explora os desafios das APIs de temporizador multiplataforma na programação C. O autor descobre que diferentes sistemas Unix (incluindo Linux, FreeBSD, NetBSD, etc.) lidam com temporizadores de maneiras muito diferentes. A função POSIX timer_create, baseada em sinais, apresenta vários problemas, como interoperabilidade ruim com outros primitivos do SO e interferência na máscara de sinal. O artigo examina os prós e contras de várias soluções, incluindo timerfd_create, kqueue, port_create e io_uring, concluindo que, para aplicativos multiplataforma, implementar temporizadores no espaço do usuário, como o libuv faz, é uma abordagem mais eficiente e confiável. O libuv usa uma estrutura de dados de heap mínimo para gerenciar temporizadores e usa chamadas de sistema como poll/epoll/kqueue para multiplexação.

Leia mais