...

Por qué la caché de la CPU (L1-L3) es más importante que la RAM en el hosting

El alojamiento de la caché de la CPU determina el tiempo de carga y el TTFB en muchas cargas de trabajo reales, ya que los datos L1-L3 se proporcionan directamente en el núcleo en nanosegundos, evitando así el lento acceso a la RAM. Muestro claramente cuándo el tamaño y la jerarquía de la caché dominan el tiempo de cálculo y por qué una mayor cantidad de RAM sin una caché potente apenas tiene efecto.

Puntos centrales

  • L1-L3 Almacena los datos activos más cerca del núcleo y reduce significativamente la latencia.
  • Jerarquía de caché supera a la RAM en consultas dinámicas y alto paralelismo.
  • Caché por núcleo En VPS/DEDI cuenta más que la mera cantidad de RAM.
  • Cargas de trabajo como WordPress, las consultas de bases de datos y PHP se benefician directamente.
  • Elección de tarifa con enfoque en la CPU proporciona respuestas notablemente más rápidas.

Por qué la caché de CPU L1-L3 acelera notablemente el alojamiento

A Cache Se encuentra directamente en el procesador y proporciona instrucciones y datos sin pasar por la placa base. L1 es pequeño, pero extremadamente rápido; L2 amplía el búfer; L3 almacena mucho material de consulta para todos los núcleos. De este modo, el procesador evita los tiempos de espera que se producen al acceder a RAM . Estos tiempos de espera se acumulan en los servidores web, ya que cada solicitud activa varios accesos a la base de datos y al sistema de archivos. En los registros veo una y otra vez cómo los accesos cortos a la caché sustituyen a los accesos largos a la RAM, reduciendo así el TTFB y la carga de la CPU.

Así funcionan L1, L2 y L3 juntos

La caché L1 proporciona instrucciones y datos en pocos ciclos de reloj, lo que Latencia a valores mínimos. Si L1 no acierta, L2 atiende la solicitud con un poco más de tiempo. Si L2 falla, interviene L3, que es relativamente grande y mantiene alta la tasa de aciertos. Solo cuando L3 falla, la CPU recurre a la RAM, lo que ralentiza el ciclo. Por lo tanto, planifico el alojamiento de manera que haya suficiente L3 está disponible, porque es precisamente allí donde muchos procesos web paralelos acceden a conjuntos de datos comunes.

Caché frente a RAM: resumen de cifras

Resumo las magnitudes típicas y las velocidades relativas para que la Clasificación más fácil. Los valores varían según la generación de CPU, pero las relaciones siguen siendo similares. L1 es muy pequeña y extremadamente rápida, L2 se encuentra en el medio, L3 es grande y a menudo se comparte entre núcleos. La RAM aporta capacidad, pero mayor tiempo de acceso y se debilita ante accesos aleatorios. Precisamente estos accesos aleatorios predominan en las pilas de servidores web compuestas por servidor web, PHP y base de datos.

nivel de almacenamiento Tamaño típico Latencia (relativa) Factor frente a RAM ¿Compartido?
L1 (instrucciones/datos) 32-64 KB por núcleo extremadamente bajo hasta ~170 veces más rápido no
L2 256 KB–1 MB por núcleo muy bajo Mucho más rápido no
L3 hasta 40 MB+, compartido bajo hasta ~15 veces más rápido A menudo sí.
RAM (DDR) Área GB alta Línea de base En todo el sistema

Arquitectura de caché en detalle: inclusiva, exclusiva, chiplets

No todos los L3 son iguales: algunas arquitecturas ejecutan un inclusivo L3 (guarda copias de las filas L1/L2), otros apuestan por exclusivo/mayoritariamente exclusivo (L3 contiene líneas adicionales que no se encuentran en L1/L2). La inclusión aumenta la coherencia y la simplicidad, pero ocupa espacio efectivo. La exclusión aprovecha mejor la capacidad, pero requiere una gestión inteligente de las víctimas. En los diseños basados en chiplets, L3 suele ser por agrupadas; las solicitudes que llegan a otro pagan una latencia adicional. Para el alojamiento, esto significa: intento, Cargas de trabajo y sus conjuntos activos por día para que la mayor parte de los accesos permanezcan en el L3 local. Esto reduce la varianza y estabiliza el percentil 95/99.

Cargas de trabajo reales: WordPress, bases de datos, API

Las páginas dinámicas inician muchas pequeñas Accede a: PHP obtiene plantillas, MySQL proporciona filas, el servidor web lee archivos. Si estos patrones se encuentran en la caché, el TTFB disminuye directamente. WordPress lo muestra muy claramente, especialmente con temas vinculados a la CPU y muchos plugins. Si se profundiza más, se encuentran cuellos de botella típicos en WordPress limitado por la CPU descrito. Para ello, tengo previsto utilizar núcleos con mucha L3 por núcleo, porque el conjunto de consultas y los fragmentos de código de bytes permanecen más a menudo en el búfer.

Valores prácticos: el conjunto caliente de un sitio WordPress de tamaño medio suele estar en el rango de los megabytes de un solo dígito (bocadito de Opcache, mapas de autoloader, índices de base de datos frecuentes). Las tiendas de comercio electrónico añaden índices de precios y existencias, así como datos de sesión. Si este paquete cabe en L3, las fluctuaciones en el tiempo de respuesta se reducen significativamente, incluso sin cambios en la aplicación o el tamaño de la RAM.

Núcleos, subprocesos y caché por núcleo

Muchos núcleos solo ayudan si hay suficiente Cache disponible, de lo contrario los subprocesos compiten más entre sí. La tecnología Hyper-Threading no duplica la potencia de cálculo, pero comparte la estructura de la caché. Con más L3 por núcleo, la carga de trabajo se mantiene estable y la variación en los tiempos de respuesta es mínima. Los VPS multitenant se benefician especialmente, ya que los hotsets de varios sitios se mantienen en el L3 común. Por lo tanto, presto atención a la relación entre núcleos y Capacidad L3, no solo en el contador central puro.

Un error frecuente: “Más subprocesos = más rendimiento”. En la práctica, aumentan los conflictos y los cambios de contexto. Limito los trabajadores exactamente de manera que CIP (Instrucciones por ciclo) se mantiene alto y las tasas de error no se disparan. Esto suele proporcionar mejores percentiles en las pruebas de carga que un enfoque de “paralelismo máximo”.

NUMA, acceso a la memoria y trampas de latencia

Los servidores modernos suelen utilizar varios NUMA, lo que puede alargar las rutas en la memoria. Quien distribuye procesos entre varios nodos aumenta la latencia y reduce los aciertos de caché. Yo prefiero vincular los servicios de tal manera que los hotsets permanezcan locales. Una breve descripción general de la Arquitectura NUMA muestra la importancia de la proximidad entre el núcleo, la caché y el banco de RAM. Con una buena ubicación, las solicitudes se aseguran más. Aciertos de caché y excursiones menos costosas a lugares lejanos.

Importante: Tráfico Cross-NUMA No es solo una cuestión de RAM. La coherencia L3 entre nodos también aumenta la latencia. Por eso, bajo carga, compruebo en qué nodo NUMA se encuentran la base de datos activa y los grupos PHP-FPM, y mantengo los procesos web y de base de datos en la misma topología siempre que sea posible. Esto evita que las sesiones, los planes de consulta y el código byte se trasladen constantemente “de un lado a otro”.

La E/S espera a la CPU: por qué la RAM rara vez es el cuello de botella

La capacidad de RAM ayuda con la caché del sistema de archivos, pero la mayor parte tiempo de espera se origina en la ruta de código de la aplicación. Estas rutas se benefician de cachés rápidas de instrucciones y datos, no de más gigabytes. Con accesos aleatorios, el ancho de banda de la RAM se agota rápidamente, mientras que una L3 grande amortigua los saltos. Mido en los perfiladores que las tasas de fallos de caché están estrechamente relacionadas con el TTFB y el percentil 95. Por eso doy más importancia a la caché de la CPU que a la pura Tamaño de la RAM, hasta que disminuya la tasa de errores.

Los SSD también “parecen” más rápidos cuando la CPU espera menos. Menos cambios de contexto y rutas de código más cortas significan que la finalización de E/S se procesa más rápidamente. Las cachés son el catalizador aquí: mantienen calientes las rutas de instrucciones activas y minimizan los bloqueos, mientras que el programador tiene que mover menos subprocesos de un lado a otro.

Comprender los tipos de fallos de caché y reducirlos de forma específica

En la práctica, distingo cuatro causas:

  • Ausencias obligatorias (frío): primeros accesos a datos nuevos; se puede reducir mediante estrategias de calentamiento (precarga de las rutas más frecuentes, calentador para Opcache).
  • Fallos de capacidad: Hotset no encaja completamente en Lx; reduzco el tamaño mediante rutas de código más pequeñas, menos complementos e índices optimizados.
  • Conflict Misses: Demasiadas líneas se asignan a los mismos conjuntos; una mejor localización de los datos y una dispersión reducida ayudan, al igual que unas estructuras de datos “más fluidas”.
  • Faltas de coherencia: Los datos compartidos se escriben con frecuencia; minimizo las variables globales y utilizo cachés locales (APCu) para reducir el tráfico de escritura.

A nivel de aplicación, esto significa: reduzco los accesos aleatorios (por ejemplo, menos scatter-gather en PHP), agrupo las consultas, mantengo la coherencia de las cachés de objetos y me aseguro de que el código activo no se recompile o recargue constantemente.

Criterios prácticos para la compra de tarifas de alojamiento web

En los servidores VPS y dedicados, lo primero que compruebo es la CPU-Generación, luego tamaño de caché por núcleo. Una tarifa con menos RAM, pero con un L3 potente por núcleo, suele superar a un modelo con mucha RAM y una caché débil. También son importantes la frecuencia bajo carga, el comportamiento del turbo y cómo el proveedor asigna los núcleos. Para las tiendas con muchas solicitudes simultáneas, la capacidad L3 resulta muy rentable. Quienes ya utilizan cachés en aplicaciones, bases de datos y CDN se benefician además de una Cache potente CPU, porque los hotsets golpean con más frecuencia.

Pregunto explícitamente: ¿Cuántos? vCPU por núcleo físico ¿Comparte el proveedor? ¿Se mezclan las vCPU más allá de los límites NUMA? ¿Hay garantías de que las vCPU se encuentren dentro del mismo chip? Estos detalles determinan si L3 actúa como acelerador o si se produce el efecto «vecinos ruidosos». diluido ...lo hará.

Optimización: el software utiliza mejor la caché

Mantengo PHP‑Opcache, JIT‑Settings y DB‑Buffer de tal manera que las rutas de acceso frecuentes en L3 y las recompilaciones son poco frecuentes. Un pinning de subprocesos demasiado estricto inhibe las optimizaciones del programador; por qué esto a menudo no sirve de mucho se muestra en Fijación de la CPU. En su lugar, limito los trabajadores para que no saturen la caché. Me aseguro de que las rutas de código sean cortas, haya menos ramificaciones y las cachés de código byte estén calientes. De este modo, se reducen las tasas de error y el procesador dedica más tiempo a trabajo útil en lugar de esperar.

Entregar en pilas PHP Memoria OPcache y cadenas internadas ubicación notablemente mejor. Además, apuesto por un APCu para datos con gran volumen de lectura y un Caché de objetos persistentes (por ejemplo, Redis) con un número manejable de claves, para que las teclas rápidas permanezcan en L3. En la base de datos, reduzco los índices secundarios a lo necesario y optimizo el orden de clasificación para que se creen secuencias en lugar de patrones de salto.

Parámetros: lo que superviso

Observo constantemente Miss-Rates (L1/L2/L3), IPC (instrucciones por ciclo) y ciclo bajo carga. Además, compruebo el TTFB, el percentil 95/99 y los registros de errores durante los cambios de carga. Estos indicadores muestran si la ruta del código encaja en la caché o se desvía. Correlaciono los picos de errores con las implementaciones, los picos de tráfico y los nuevos complementos. De este modo, encuentro rápidamente los puntos en los que hay más Aciertos de caché aportan el mayor beneficio.

Para análisis ad hoc, miro en directo “estado perfecto” como ciclos, instrucciones, ramificaciones, fallos de ramificación y fallos de LLC. Utilizo constantemente registros, la frecuencia bajo carga (turbostat) y los cambios de contexto por segundo. Cuando el IPC cae bajo presión y los fallos de LLC aumentan al mismo tiempo, el cuello de botella es casi siempre la capacidad de la caché o la localidad de los datos, no el rendimiento de la RAM.

Evaluación comparativa y diseño de pruebas: medir respuestas realistas

Estoy probando con rutas representativas en lugar de solo archivos estáticos. Una combinación de página de inicio, detalles del producto, búsqueda y pago cubre diferentes rutas de código. Con niveles de carga escalonados (frío, tibio, caliente), puedo ver qué tan rápido se llena la caché y dónde se desborda. Es importante la Fase de estado estacionario, en la que la frecuencia, el IPC y la tasa de errores funcionan de forma estable. Solo aquí comparo de forma justa las tarifas y las generaciones de CPU.

Señales medibles:

  • La mediana del TTFB cae significativamente tras el calentamiento y se mantiene baja → Las cachés funcionan.
  • El percentil 95/99 solo se desvía ligeramente en la carga máxima → suficiente L3 por núcleo.
  • El IPC aumenta con menos trabajadores → Disminuyen los conflictos y los errores.
  • Las LLC-Misses se correlacionan con nuevos plugins/funciones → Hotset ampliado.

Para cada prueba, documento la frecuencia activa de la CPU, el número de trabajadores, la combinación de rutas y, si procede, la ubicación NUMA. De este modo, las optimizaciones se pueden asignar y reproducir de forma inequívoca.

Virtualización y multitenancy: compartir la caché sin perderla

En entornos VPS, los clientes comparten el mismo L3 físico. Si las vCPU de un invitado se distribuyen ampliamente por toda la máquina, pierde Localidad. Los buenos proveedores agrupan las vCPU de un invitado en el mismo CCX/CCD/Tile. Lo veo en percentiles más estables y con menor varianza. Además, limito los trabajadores para que mi propia pila no sature el L3 y entre en conflicto con los vecinos.

Los contenedores del mismo host compiten de forma similar. Un contenedor básico ligero con Opcache precalentado y la menor carga dinámica automática posible mantiene limpia la L3. Evito los sidecars agresivos en el mismo nodo, que producen grandes áreas de instrucciones (por ejemplo, “registrar todo, en todas partes”). Esto debe realizarse en un nodo separado o fuera de la CPU de ruta caliente.

Prefetcher, TLB y tamaños de página: palancas ocultas

Las CPU modernas tienen prefetcher, que prefieren los patrones lineales. Cuanto más secuenciales estén ordenados el código y los datos, más se beneficia. Por eso prefiero las matrices estructuradas y las estructuras compactas a los diseños con muchos hash y muy ramificados. Además, presto atención a la TLB (Translation Lookaside Buffer): Muchos recorridos de página son costosos y arrastran L1/L2. Las páginas de gran tamaño (Huge Pages) pueden ayudar a cubrir el código byte y los hotsets de la base de datos con menos entradas TLB. Por lo tanto, en las configuraciones InnoDB y JIT, compruebo si las páginas más grandes aportan ventajas medibles, siempre con mediciones A/B, ya que no todas las pilas se benefician por igual.

Lista de comprobación práctica: alojamiento rápido en caché en 10 pasos

  • Generación de CPU y L3 por núcleo Comprueba no solo el número de núcleos y la RAM.
  • Consultar la asignación de vCPU: agrupación pro Die/NUMA en lugar de dispersión.
  • Limitar los trabajadores al punto óptimo del IPC; minimizar la varianza de los percentiles.
  • Dimensionar PHP-Opcache de forma generosa, pero específica; evitar recompilaciones.
  • Utilizar cachés de objetos persistentes, mantener el espacio de claves reducido.
  • Adaptar los índices DB a las consultas más frecuentes; reducir los accesos aleatorios.
  • Garantizar la localidad NUMA: web, PHP y base de datos en el mismo nodo, siempre que sea posible.
  • Rutas de datos compatibles con Prefetcher: secuenciales, menos saltos.
  • Proporcionar calentamiento a las implementaciones; interceptar los fallos fríos antes de los picos de tráfico.
  • Monitorización: IPC, tasa de errores L1/L2/L3, reloj, correlación continua del percentil 95/99.

Brevemente resumido

En el alojamiento, un potente Caché de la CPU L1-L3 cada solicitud dinámica, mientras que la RAM adicional proporciona principalmente capacidad. Por lo tanto, doy prioridad al tamaño de la caché por núcleo, a una colocación limpia de los procesos y a un número adecuado de trabajadores. En las herramientas veo que menos fallos generan tiempos de respuesta mejorables y percentiles estables. Al elegir tarifas, hay que prestar atención a la información sobre la caché y la generación de la CPU, no solo a los GB. Así se saca más partido al mismo software. Actuación sin necesidad de costosas actualizaciones de hardware.

Artículos de actualidad