Hackeando el Recolector de Basura de Go: Almacenamiento de Punteros desde Ensamblador

2025-06-23
Hackeando el Recolector de Basura de Go: Almacenamiento de Punteros desde Ensamblador

Este artículo profundiza en las complejidades de manipular punteros Go desde código ensamblador, centrándose en la interacción crucial con el recolector de basura de Go. Manipular punteros directamente requiere informar explícitamente al GC mediante funciones como `runtime.gcWriteBarrier2` y `runtime.writeBarrier` para evitar conflictos y posibles fallos. El artículo también aborda el desafío de asignar memoria alineada de 128 bits para un uso óptimo de las instrucciones AVX, presentando una solución ingeniosa. Sin embargo, advierte contra la dependencia de funciones internas de runtime, ya que su disponibilidad puede cambiar en futuras versiones de Go.

Leer más
Desarrollo Ensamblador Go

Llevando al límite las tuberías de Linux: De 3,5 GiB/s a 62,5 GiB/s

2025-06-22
Llevando al límite las tuberías de Linux: De 3,5 GiB/s a 62,5 GiB/s

Esta publicación explora la implementación de tuberías Unix en Linux mediante la optimización iterativa de un programa de prueba que escribe y lee datos a través de una tubería. Comenzando con un programa simple que alcanza un rendimiento de aproximadamente 3,5 GiB/s, el autor mejora su rendimiento veinte veces mediante varias etapas de optimización. Las mejoras clave incluyen el uso de las llamadas al sistema `vmsplice` y `splice` para eliminar la copia de datos, el aprovechamiento de páginas gigantes para reducir la sobrecarga de paginación y el empleo de bucles ocupados para minimizar los costos de sincronización. El proceso se detalla con ejemplos de código y análisis de rendimiento utilizando la herramienta `perf` de Linux.

Leer más
Desarrollo Tuberías