Hackeando o Coletor de Lixo do Go: Armazenando Ponteiros de Assembly

2025-06-23
Hackeando o Coletor de Lixo do Go: Armazenando Ponteiros de Assembly

Este artigo mergulha nas complexidades de manipular ponteiros Go a partir de código assembly, focando na interação crucial com o coletor de lixo do Go. Manipular ponteiros diretamente requer informar explicitamente o GC através de funções como `runtime.gcWriteBarrier2` e `runtime.writeBarrier` para evitar conflitos e possíveis travamentos. O artigo também aborda o desafio de alocar memória alinhada de 128 bits para uso ideal de instruções AVX, apresentando uma solução inteligente. No entanto, alerta contra a dependência de funções internas de runtime, pois sua disponibilidade pode mudar em versões futuras do Go.

Leia mais
Desenvolvimento Assembly Go

Empurrando os Limites dos Pipes do Linux: De 3,5 GiB/s para 62,5 GiB/s

2025-06-22
Empurrando os Limites dos Pipes do Linux: De 3,5 GiB/s para 62,5 GiB/s

Este artigo explora a implementação de pipes Unix no Linux, otimizando iterativamente um programa de teste que escreve e lê dados através de um pipe. Começando com um programa simples com uma taxa de transferência de cerca de 3,5 GiB/s, o autor melhora seu desempenho em vinte vezes através de várias etapas de otimização. As melhorias principais incluem o uso das chamadas de sistema `vmsplice` e `splice` para eliminar a cópia de dados, o uso de páginas gigantes para reduzir a sobrecarga de paginação e o uso de loop ocupado para minimizar os custos de sincronização. A jornada é detalhada com exemplos de código e análise de desempenho usando a ferramenta `perf` do Linux.

Leia mais
Desenvolvimento