Rendimiento de un solo núcleo frente a varios núcleos para diferentes cargas de trabajo

Rendimiento de un solo núcleo frente a varios núcleos para diferentes cargas de trabajo hero

La hoja de especificaciones indica 16 núcleos. Tu aplicación es lenta. Estos dos hechos no siempre están tan desvinculados como podrías pensar. La mayoría de las cargas de trabajo web no utilizan todos sus núcleos simultáneamente. Algunas nunca utilizan más de uno a la vez para la operación que realmente supone un cuello de botella. Es importante comprender en qué categoría se encuentra tu aplicación antes de elegir un...

La diferencia fundamental

Una CPU con una alta velocidad de reloj de un solo núcleo procesa cada tarea individual más rápidamente. Una CPU con más núcleos procesa más tareas simultáneamente. Son cosas diferentes, y cuál de ellas es más importante depende totalmente de si tu software se puede paralelizar.

Una sola solicitud PHP-FPM para renderizar una WordPress es en gran medida de un solo subproceso. Se ejecuta de forma secuencial: analiza la solicitud, consulta la base de datos, ejecuta la lógica de la plantilla PHP y devuelve HTML. Una velocidad de reloj más rápida hace que cada uno de estos pasos se complete antes. Un mayor número de núcleos te permite gestionar más solicitudes simultáneas, pero no hace que ninguna solicitud individual sea más rápida.

Compáralo con un trabajo de transcodificación de vídeo, que FFmpeg paraleliza en tantos núcleos como asignes. Un servidor de 16 núcleos codificará vídeo aproximadamente entre 10 y 12 veces más rápido que un servidor de 2 núcleos a la misma velocidad de reloj, suponiendo que haya suficiente ancho de banda de memoria.

Cargas de trabajo que favorecen la velocidad de un solo núcleo

Sitios PHP y CMS dinámicos

WordPress, Drupal y Magento la generación de páginas principalmente en un solo subproceso. PHP-FPM genera procesos de trabajo independientes para gestionar visitantes simultáneos, pero cada proceso se ejecuta de forma independiente. La implicación práctica: un servidor con menos núcleos y más rápidos sirve el tráfico PHP simultáneo de forma más eficiente que un servidor con muchos núcleos más lentos.

PHP 8.x introdujo la compilación JIT, que se beneficia del rendimiento de un solo núcleo. Las consultas a bases de datos dentro de la ejecución de PHP son donde la naturaleza de un solo subproceso se muestra con mayor claridad. Cada consulta debe completarse antes de que se ejecute la siguiente línea de PHP.

Ejecución de consultas de un solo subproceso en MySQL

Las consultas SQL individuales se ejecutan en un solo subproceso. Las consultas complejas, especialmente aquellas que implican escaneos de tablas, ordenaciones o uniones de varias tablas, solo se ejecutan a la velocidad que permite un solo núcleo. Un mayor número de núcleos ayuda a MySQL a gestionar más consultas simultáneas de múltiples conexiones, pero no acelera ninguna consulta individual.

Por eso, los servidores de bases de datos sometidos a una gran carga de consultas únicas se benefician más de la velocidad del reloj que del número de núcleos, y por eso, indexar correctamente las tablas suele ser más importante que cualquiera de los dos.

Código de aplicación heredado

Aplicaciones heredadas de un solo subproceso escritas antes de que los procesadores multinúcleo se convirtieran en estándar. Muchos sistemas de contabilidad empresarial, ERP y CRM entran en esta categoría y simplemente no pueden utilizar núcleos adicionales para su ruta de ejecución principal. Ejecutarlos en un servidor de 32 núcleos supone un desperdicio de 31 núcleos del presupuesto.

Cargas de trabajo que favorecen el número de núcleos múltiples

Servidor web que gestiona solicitudes simultáneas

Nginx Apache gestionan las conexiones simultáneas con procesos o subprocesos independientes. Un servidor de 16 núcleos puede procesar realmente 16 solicitudes en paralelo. A gran escala, el número de núcleos determina directamente la capacidad máxima simultánea antes de que comience la cola de solicitudes.

El AMD EPYC 4545P que alimenta el servidor dedicado Extreme de InMotion ofrece 16 núcleos con 32 subprocesos mediante multithreading simultáneo. Para un servicio web de alta concurrencia, esta arquitectura significa que un servidor de un solo socket puede ejecutar 32 contextos de ejecución simultáneos, suficientes para volúmenes de tráfico sustanciales antes de que sea necesario el escalado vertical.

Arquitecturas contenedorizadas y de microservicios

A los contenedores Docker y a los pods de Kubernetes se les asignan límites de CPU en la capa de orquestación. Un servidor de 16 núcleos que ejecuta 8 contenedores, cada uno con 2 límites de CPU, está utilizando los núcleos de manera eficiente. Las mismas aplicaciones en un servidor de 4 núcleos tendrían limitaciones de recursos o competirían por el tiempo de CPU.

Sistemas de compilación y construcción

Las canalizaciones de compilación CI/CD, especialmente aquellas que compilan C++, Go o Rust en la fase de compilación, se benefician enormemente del número de núcleos. make -j16 en un servidor de 16 núcleos compila 16 unidades de traducción simultáneamente. Los tiempos de compilación que tardan 20 minutos en 4 núcleos se reducen habitualmente a entre 5 y 7 minutos en 16 núcleos.

Inferencia del aprendizaje automático

Los marcos de ML de Python, incluidos PyTorch y TensorFlow, distribuyen las cargas de trabajo de inferencia entre los núcleos de CPU disponibles de forma predeterminada. Para las cargas de trabajo de inferencia vinculadas a la CPU (aparte de la inferencia de GPU), un mayor número de núcleos aumenta directamente el rendimiento.

Procesamiento de vídeo y codificación multimedia

La bandera -threads de FFmpeg se establece por defecto en el número de núcleos de CPU disponibles. La transcodificación en tiempo real para plataformas de vídeo, procesos de procesamiento de podcasts o sistemas de gestión de medios se escala de forma casi lineal con el número de núcleos hasta el punto en que intervienen otros cuellos de botella (E/S, ancho de banda de memoria).

Cómo AMD EPYC 4545P equilibra ambas dimensiones

El AMD EPYC 4545P es un procesador con arquitectura Zen 5. Su diseño refleja el enfoque de AMD en equilibrar la velocidad de reloj de un solo subproceso con el número de núcleos para las cargas de trabajo de los servidores en el mundo real.

Las frecuencias de reloj aceleradas del 4545P permiten que los núcleos individuales funcionen a la máxima velocidad cuando solo hay unos pocos subprocesos activos, lo cual es relevante para los escenarios de un solo subproceso de PHP y MySQL descritos anteriormente. Bajo una carga multihilo, se activan todos los núcleos. Esta arquitectura evita el problema de «muchos núcleos lentos» que afectaba a los procesadores de servidor con un número elevado de núcleos anteriores.

El ancho de banda de la memoria DDR5 también es importante en este caso. El ancho de banda de la memoria es una limitación que a menudo se pasa por alto en las cargas de trabajo multihilo: los núcleos solo pueden funcionar a la velocidad a la que llegan los datos desde la RAM. El mayor ancho de banda por canal de la DDR5 significa que la RAM ECC DDR5 de 192 GB no es solo capacidad, sino también rendimiento.

Marco práctico para la toma de decisiones

Antes de evaluar cualquier servidor dedicado para la configuración de la CPU, responde a estas preguntas:

¿El cuello de botella es la concurrencia de solicitudes o la velocidad de las solicitudes individuales?

Si gestionas 10 000 usuarios simultáneos con solicitudes sencillas, la concurrencia es la limitación, por lo que los núcleos son más importantes. Si gestionas 100 usuarios que realizan operaciones complejas, la velocidad de cada operación es más importante, por lo que la velocidad del reloj tiene prioridad.

¿Tu código de aplicación es multihilo?

Consulta la documentación. PHP no es multihilo a nivel de solicitud. Node.js tiene un bucle de eventos que gestiona la concurrencia, pero solo puede utilizar varios núcleos mediante clústeres o subprocesos de trabajo. Las goroutines de Go son genuinamente paralelas entre núcleos.

¿Qué muestra tu perfil de CPU real?

Si ya estás ejecutando cargas de trabajo de producción en algún lugar, la clasificación superior por CPU mostrará si un único proceso está fijado en ~100 % (cuello de botella de un solo subproceso) o si varios procesos están consumiendo una cantidad significativa de CPU (utilización multinúcleo).

La mayoría de las aplicaciones web de producción se benefician en realidad de ambas cosas: un rendimiento rápido de un solo núcleo para la ejecución de consultas de bases de datos y la representación PHP, además de un número suficiente de núcleos para gestionar visitantes simultáneos. La arquitectura del AMD EPYC 4545P ofrece este equilibrio, por lo que se adapta mejor a las cargas de trabajo generales que los procesadores optimizados para una dimensión a expensas de la otra.

Comparte este artículo

Deja una respuesta

Tu dirección de correo electrónico no se publicará. Los campos obligatorios están marcados con *.