Rendimiento por vCPU

¿Por qué es útil un alto rendimiento por core si tengo aplicaciones multi-hilo?

Representación gráfica de la ley de Amdahl. La mejora en la velocidad de ejecución de un programa como resultado de la paralelización está limitada por la porción del programa que no se puede paralelizar. Por ejemplo, si el 10% del programa no puede paralelizarse, el máximo teórico de aceleración utilizando la computación en paralelo sería de 10x no importa cuántos procesadores se utilicen

Representación gráfica de la ley de Amdahl. La mejora en la velocidad de ejecución de un programa como resultado de la paralelización está limitada por la porción del programa que no se puede paralelizar. Por ejemplo, si el 10% del programa no puede paralelizarse, el máximo teórico de aceleración utilizando la computación en paralelo sería de 10x no importa cuántos procesadores se utilicen

Salvo contadas excepciones, cada petición de usuario pasa por una parte secuencial, ya sea porque cada petición se ejecuta en un solo hilo o bien porque en algún momento tenemos que sincronizar los hilos.

Uno de los ejemplos más claros es un stack de una aplicación Web con PHP y MySQL, llega la petición al motor PHP (vía Apache, PHP-FPM, etc…), se asigna un hilo/proceso y lo tendremos ocupado hasta que termine la petición, si el código hace peticiones a MySQL (o Redis, o Memcache, o casi cualquier servicio), a esa petición se le asignará un hilo (uno solo) que mirará en los datos, agregará, filtrará, etc… y volverá a PHP.

Por ejemplo, tanto MySQL como PostgreSQL solo soportan paralelismo en el lado cliente, tienes que abrir varias consultas simultáneas en varios hilos o asíncronas y agregar los datos que interesan mediante código en cliente.

Si el cuello de botella es la CPU, un procesador a 3 GHz entregará el doble de rápido las páginas que un procesador de 1.5 Ghz, aunque si tenemos el doble de cores en uno de 1.5 GHz puede que consigamos el mismo número de peticiones por segundo (throughput) pero con el doble de latencia, así que podríamos dar servicio al mismo número de usuarios pero con una calidad de servicio peor.

En entornos multi-hilo en la misma petición, estilo SQL Server, Hadoop, etc… tenemos que tener en cuenta cuanto tiempo estamos en ejecución secuencial y cuanto en paralelo. Ya que funcionan de forma muy parecida, tenemos algoritmos que se basan en MapReduce, la parte paralela (Map) si que aprovecha la multitud de cores, pero la parte secuencial (Reduce) se ejecuta en uno solo.

Hace ya tiempo (1967), Gene Amdalh propuso la ley que lleva su nombre donde entre otras cosas se puede deducir que la mejora por paralelizar una parte del proceso estará finalmente limitada por la parte secuencial y de aquí no bajaremos

Por todo esto, todos nuestros servidores están usando el máximo de tiempo las opciones de Turbo, los tenemos en modo alto rendimiento y son de la gama que Intel llama «Xeon E5 Frequency Optimized»