Desarrollé un mini servidor HTTP en C++, usando boost :: asio, y ahora estoy cargando la prueba con múltiples clientes y no he podido acercarme a la saturación la CPU. Estoy probando en una instancia de Amazon EC2 y obteniendo aproximadamente el 50% de uso de una CPU, el 20% de otra, y las otras dos están inactivas (según htop).C++ Socket Server - No se pudo saturar la CPU
Detalles:
- Los fuegos de servidor hasta un hilo por núcleo
- solicitudes son recibidos, analizados, procesados, y las respuestas se escriben
- Las peticiones son para los datos, que se lee de memoria (solo lectura para esta prueba)
- Estoy 'cargando' el servidor usando dos máquinas, cada una ejecutando una aplicación java, ejecutando 25 hilos, enviando solicitudes
- Veo unas 230 solicitudes/seg thro ughput (esto es solicitudes de aplicaciones, que se componen de muchas peticiones HTTP)
Por lo tanto, lo que debería mirar a mejorar este resultado? Dado que la CPU está prácticamente inactiva, me gustaría aprovechar esa capacidad adicional para obtener un mayor rendimiento, digamos 800 solicitudes/seg. O lo que sea.
ideas que he tenido:
- Las peticiones son muy pequeños, ya menudo cumplen en pocos ms, podría modificar el cliente para enviar/componer solicitudes más grandes (tal vez usando procesamiento por lotes)
- I podría modificar el servidor HTTP para usar el patrón Seleccionar diseño, ¿es apropiado aquí?
- que podría hacer algunos perfiles para tratar de entender lo que son del cuello de botella/es
¿Es justo asumir que tiene un puerto de 1 Gbps en el servidor? ¿Cuáles son sus tamaños de solicitud y respuesta (en el cable)? – nik
¿Cuál es la utilización del ancho de banda en el puerto de red del servidor (el que supongo que es 1Gbps) – nik
La prueba se está ejecutando en EC2, que creo que usa Gigabit. Bmon informa acerca de la velocidad de TX de 3MiB (megabits, creo), y la tasa de RIB de 2.5Mib. Muchos tamaños de solicitud/respuesta son pequeños (tan poco como 100 bytes), pero algunas respuestas son de hasta 1mb, las solicitudes probablemente hasta de .25mb –