Lighttpd, nginx y otros utilizan una variedad de técnicas para proporcionar el máximo rendimiento de la aplicación, como AIO, sendfile, MMIO, caché y epoll y bloquear las estructuras de datos libres.Técnicas para mejorar la tasa de transacción
Mi colega y yo hemos escrito un pequeño servidor de aplicaciones que utiliza muchas de estas técnicas y también puede server archivos estáticos. Así que lo probamos con apache bench y comparamos el nuestro con lighttpd y nginx y al menos hemos igualado el rendimiento del contenido estático para archivos de 100 bytes a 1K.
Sin embargo, cuando comparamos la tasa de transacción sobre los mismos archivos estáticos con la de G-WAN, G-WAN está muy adelante.
Sé que esta pregunta puede ser un poco subjetiva, pero ¿qué técnicas, aparte de las obvias que he mencionado, podrían usar Pierre Gauthier en GWAN que le permitirían lograr un rendimiento tan asombroso?
El diseño es el más obvio. Sin embargo, las pruebas posteriores muestran que la carga de mi CPU es de alrededor del 30%. El cuello de botella parece ser la tarjeta de red o kernel. GWAN todavía está superando lo que tenemos.¿Hay algún truco especial de inicialización involucrado en la actualización de los paquetes a través de la tarjeta de red? – Matt
Si el cuello de botella era el kernel, G-WAN no podría ser más rápido que otros. La carga de la CPU de G-WAN es menor porque su código * de modo de usuario es (mucho) más rápido. El servlet ** hello.c ** no toca el disco, por lo que el kernel no está involucrado para cargar un archivo, y aquí también G-WAN es más rápido que un módulo nginx (que, a diferencia de los servlets G-WAN, NO se carga dinámicamente) entonces debería tener una ventaja). Código más rápido, más simple y mejor arquitectura de programa. De eso se trata G-WAN. – Gil