Como ya saben, siempre me han interesado sobremanera los temas relacionados con la escalabilidad y el funcionamiento interno de los sistemas Unix. Es asi que encontré un artículo muy interesante donde el autor expone los resultados de un benchmark donde se miden cuellos de botella específicos que limitan la escalabilidad para brindar servicios de red en Linux y *BSD.
El objetivo del artículo original es analizar la escalabilidad en system calls específicas que afectan principalmente el funcionamiento de servidores web o proxys, bajo la hipótesis ¿qué sucede si preciso atender 10.000 clientes concurrentes? Si bien se trata de un trabajo algo viejo (octubre 2003) y el kernel 2.6.0 todavía estaba en pre-release, la mayoría de su contenido sigue aplicándose hoy en día.
Les recomiendo comenzar leyendo el documento pdf con la presentación que Felix von Leitner, autor del benchmark, hizo en Linux-Kongress 2003. Es un documento de lectura fácil y rápida, un poco liviano al principio pero divertido, interesante, y muy informativo. Lo único que puede ser discutible (desactualizado?) del artículo original es la parte donde analiza async IO; Linux ofrece async IO a nivel del kernel (aunque no POSIX), y existen proyectos para implementar POSIX async IO en el kernel que posiblemente ingresen en la futura versión de desarrollo (2.7?). La glibc provee también POSIX async IO desde hace bastante tiempo, pero con una performance bastante baja.
Luego de leer la presentación pueden ir a la página donde el autor explica el benchmark. Como le falta el contexto de la presentación original resulta un poco más pesada de leer, pero a quienes leyeron la presentación les permitirá ampliar dudas y ver un análisis más detallado. Esta página está un poco más actualizada, y se incorporan nuevas pruebas a partir del feedback que generó el artículo original. Quienes deseen algo un poco más genérico y orientado al desarrollo, tienen aquí un artículo muy completo en este sitio.






