Inesperadamente Lento: Un Benchmark Simple de Sockets Muestra el Retraso de Linux Respecto a OpenBSD

2025-08-16

Un simple programa en C que crea subprocesos y abre 256 sockets revela una sorprendente disparidad de rendimiento entre Linux y OpenBSD. En Linux, los tiempos de ejecución fluctúan entre 17 y 26 milisegundos; en OpenBSD, son solo de 2 a 6 milisegundos. Para aumentar el misterio, OpenBSD inicialmente arrojó un error de "demasiados archivos abiertos", sugiriendo diferencias en la gestión de recursos. El autor observa que la discrepancia no está relacionada con el código de red y desafía a los lectores a encontrar un sistema Linux que supere a OpenBSD en este benchmark.

Leer más
Desarrollo Rendimiento del SO

El Límite de Correo Electrónico de 500 Millas: Un Experimento Curioso

2025-07-09

Una historia divertida sobre un rector universitario incapaz de enviar correos electrónicos a más de 500 millas desencadenó un experimento sobre conectividad de red y distancia de transmisión de correo electrónico. Al escribir un código simple de conexión de red y probar servidores en varias universidades, el autor descubrió que la distancia de conexión real está limitada por la ubicación del servidor y la infraestructura de red, no por la distancia física. El experimento finalmente reveló el impacto de la computación en la nube y la distribución geográfica de los servidores de correo electrónico en la transmisión de correo electrónico, haciendo que el límite de 500 millas sea más una coincidencia que una ley física.

Leer más
Desarrollo conexión de red

Escalado DPI de X11: Desmintiendo el Mito

2025-06-25

El autor desafía la creencia común de que X11 no admite escalado DPI dibujando con éxito un círculo de dos pulgadas en varias pantallas con diferentes tamaños y resoluciones. Usando OpenGL y eventos de configuración del servidor X, el autor ajusta dinámicamente el radio del círculo según las dimensiones físicas de la pantalla obtenidas del servidor X. A pesar de encontrar pequeñas imprecisiones, como una discrepancia en el tamaño informado del televisor, el experimento demuestra que el escalado DPI en X11 es posible. El proceso destaca la importancia de ignorar las limitaciones impuestas por otros y perseguir tareas aparentemente imposibles.

Leer más
Desarrollo escalado DPI

Las trampas del Pipelining: Lecciones de SMTP

2025-06-20

Este artículo explora las dificultades del pipelining en protocolos de red. En protocolos basados en texto como SMTP, los clientes pueden enviar varias solicitudes sin esperar respuestas. Sin embargo, una implementación incorrecta en el lado del servidor puede provocar problemas. Un servidor puede depender de una máquina de estado implícita, causando confusión al manejar varias solicitudes concurrentes, lo que lleva a aceptar o rechazar correos electrónicos incorrectamente. El artículo analiza la causa raíz de este problema potencial y hace referencia a la discusión sobre interbloqueos de pipelining en el RFC 2920, recordando a los desarrolladores que deben manejar cuidadosamente el pipelining para evitar errores debido a una gestión de estado inadecuada o problemas de búfer.

Leer más
Desarrollo Protocolos de Red

Eficiencia de io.Reader en Go: Una batalla con indirección y afirmaciones de tipo

2025-05-19

Muchas funciones en Go usan io.Reader como entrada, permitiendo la transmisión por secuencias y evitando cargar todo en la memoria. Sin embargo, cuando ya tienes los bytes, usarlos directamente es más eficiente. Este artículo describe la experiencia del autor decodificando imágenes con libavif y libheif. Por simplicidad, se usaron las interfaces de memoria simples, pero la función image.Decode de Go comprueba si hay una función Peek en io.Reader, envolviéndola con bufio.Reader si no se encuentra, lo que impide el uso directo de bytes.Reader. El autor usa afirmaciones de tipo y unsafe.Pointer para evitar bufio.Reader y bytes.Reader, logrando copia cero. Sin embargo, el artículo destaca problemas en la comprobación de tipos y en el diseño de interfaces de Go, incluyendo las 'APIs shadow' resultantes.

Leer más
Desarrollo

Escribiendo un controlador ASUS ACPI WMI para el control del ventilador en OpenBSD

2025-05-11

El autor detalla su experiencia escribiendo un controlador ASUS ACPI WMI para OpenBSD con el fin de controlar la velocidad del ventilador de su portátil. El proceso implicó superar desafíos con el orden de bytes de ACPI y WMI, utilizando acpidump e iasl para analizar el código ACPI del sistema, y finalmente lograr el control de la velocidad del ventilador. El autor compara los enfoques de desarrollo de controladores en Linux y FreeBSD, destacando la conveniente organización del código de OpenBSD.

Leer más
Desarrollo

Inmersión Profunda: Trazando la Llamada al Sistema `write()` en OpenBSD

2025-03-29

Este artículo profundiza en la implementación a bajo nivel de la llamada al sistema `write()` en OpenBSD. Comenzando con la llamada `write()` en el espacio de usuario, rastrea el recorrido de los datos a través del kernel, detallando la ruta completa desde la llamada al sistema hasta que los datos se escriben en un disco duro NVMe. El artículo revela una cadena de llamadas a funciones del kernel, incluyendo `mi_syscall`, `sys_write`, `dofilewritev`, `vn_write`, `ffs_write`, `uiomove`, `bdwrite`, `syncer`, `bwrite`, `ufs_strategy`, `spec_strategy`, `sdstrategy` y, finalmente, el controlador NVMe. Ilustra la transformación y transmisión de datos a través de diferentes niveles de abstracción, destacando detalles técnicos clave como los mecanismos de caché y las transferencias DMA.

Leer más
Desarrollo Llamada al Sistema