- Tras desplegar una nueva capa de caché, la latencia promedio empeoró de 112 ms a 122 ms, pero la mediana mejoró de 99 ms a 54 ms y el p99 empeoró de 309 ms a 678 ms, por lo que es difícil juzgar el éxito o fracaso con un solo valor estadístico
- Después del despliegue, la distribución de latencia pasó de tener un solo pico a dividirse en dos, y al superponer la función de distribución acumulada (CDF) se ve que alrededor de 140 ms las solicitudes rápidas mejoran y las lentas empeoran
- La función de desplazamiento que muestra el cambio por percentil, junto con un gráfico ridgeline diario y un mapa de calor, revela la magnitud de las mejoras y regresiones, y cómo el grupo de solicitudes lentas crece mientras la tasa de despliegue sube de 0% a 100%
- Al dividir los datos por resultado de caché y tamaño de respuesta, se pudo confirmar la causa de la distribución bimodal: los aciertos de caché en respuestas pequeñas se aceleraron, mientras que los fallos de caché en respuestas grandes se volvieron más lentos por el salto adicional
- Si se elige solo el promedio o un percentil específico, se pueden justificar conclusiones opuestas, por lo que hay que observar la distribución completa y los subgrupos para llegar a medidas como aumentar el tamaño máximo de objeto en caché o dividir respuestas grandes
Una mejora de rendimiento que no se veía en producción
- Las mejoras de rendimiento relacionadas con
lldaparecían en los benchmarks, pero en los dashboards de producción era difícil encontrar cambios claros debido al ruido en los datos - La velocidad de compilación puede variar mucho según múltiples factores como caché fría, compilaciones incrementales, ejecución local o remota, estado del sistema y carga de trabajo
- A partir de un caso en el que se evaluó el rendimiento de compilación con una función de distribución acumulada (CDF), surgió la necesidad de observar los datos mismos de varias formas, en lugar de depender de una sola imagen o estadística
- Todos los ejemplos se generaron a partir de un único dataset sintético con semilla fija, y el script completo, que incluye un shebang de
nix-shell, permite reproducir cada figura tal cual en un entorno Nix - Se utilizó IA para los datos narrativos y la generación de gráficos
Un despliegue de caché que parecía un fracaso según el promedio
- Se desplegó durante una semana una nueva capa de caché para reducir la latencia de las solicitudes de un servicio web, pero la latencia promedio subió de 112 ms a 122 ms, un aumento de 9%
- Si se mira solo el promedio, es fácil juzgarlo como una regresión que amerita revertir el cambio e iniciar respuesta a incidentes y análisis posterior
Cuatro conclusiones distintas a partir de los mismos datos
- Las estadísticas antes y después del despliegue apuntan en direcciones diferentes
- Promedio: 112 ms → 122 ms, 9% peor
- Mediana p50: 99 ms → 54 ms, 46% mejor
- p95: 224 ms → 454 ms, 103% peor
- p99: 309 ms → 678 ms, 119% peor
- El promedio muestra una regresión leve, pero la mediana sugiere que la solicitud típica se volvió casi el doble de rápida, mientras que el p99 muestra un problema grave en el que las peores solicitudes son más del doble de lentas
- Como el promedio y la mediana calculados sobre los mismos datos apuntan en direcciones opuestas, es fácil escoger solo la estadística que respalde la conclusión que uno quiere
La forma de la distribución reveló dos grupos de solicitudes
- En el gráfico de densidad, la distribución previa al despliegue tenía un solo pico, pero después del despliegue se dividió en dos picos
- Esta forma explica la contradicción entre estadísticas, pero el gráfico de densidad también tiene limitaciones
- La forma cambia según el parámetro de suavizado elegido
- Si las áreas rellenas de dos distribuciones se superponen, se vuelve difícil de leer
- Se puede ver la existencia de dos grupos, pero no es fácil ubicar de inmediato percentiles como la mediana
Comparar todos los percentiles con CDF
- La función de distribución acumulada (CDF) muestra, para cada latencia
x, la proporción de solicitudes que terminaron en x milisegundos o menos - Si se superponen en un mismo gráfico las CDF antes y después del despliegue, se puede ver cómo se movió cada percentil en el conjunto completo de solicitudes
- La curva posterior al despliegue se desplazó hacia la izquierda por debajo de 140 ms, por lo que más solicitudes se volvieron más rápidas que antes, pero después de 140 ms más solicitudes se volvieron más lentas
- El punto donde las dos curvas se cruzan, alrededor de 140 ms, es el límite en el que el efecto del cambio pasa de mejora a empeoramiento
- Cuando dos CDF se cruzan, la dirección del efecto depende del percentil elegido, por lo que ningún percentil aislado puede resumir todo el cambio
Medir el cambio en cada percentil
- La CDF muestra si cada tramo se volvió más rápido o más lento, pero no indica directamente la magnitud del cambio
- La función de desplazamiento (shift function) calcula, para cada percentil
p, la diferencia entre la latencia posterior y la anterior al despliegue- Por debajo de 0 está la zona que mejoró
- Por encima de 0 está la zona que se volvió más lenta
- Con esto se puede ver no solo la dirección del cambio, sino también su magnitud en cada punto de la distribución
Una regresión que creció durante el despliegue
- La nueva capa de caché se fue expandiendo gradualmente de 0% a 100% del tráfico durante una semana, y si solo se comparan dos momentos, antes y después del despliegue, se pierden los cambios intermedios
- En el gráfico ridgeline con distribuciones diarias apiladas, a medida que avanzaba el despliegue el pico principal de las solicitudes rápidas se movía hacia la izquierda y un segundo pico de solicitudes lentas aparecía hacia la derecha
- Al mismo tiempo que bajaba la mediana, la cantidad de solicitudes lentas y su latencia crecían silenciosamente
- Como la latencia sigue aproximadamente una distribución log-normal, se usa una escala logarítmica en el eje x
- En una escala lineal, el pico de las solicitudes rápidas se dispara hacia arriba y las lentas quedan dispersas y débiles, lo que dificulta leer ambos picos juntos
- En el mapa de calor que usa color para mostrar el volumen de tráfico por día y por latencia, también aparece tenuemente un nuevo grupo de solicitudes
- Si se junta toda la semana en un solo valor agregado, desaparecen las siete distribuciones diarias distintas y la tendencia del cambio
La distribución bimodal descompuesta en aciertos y fallos de caché
- En el análisis real de
lld, solo al dividir los datos por tamaño binario, por ejemplo más de 50 MiB o no, se pudo identificar la distribución bimodal de latencia - En la nueva capa del caso sintético, las solicitudes se separan entre aciertos (hit) resueltos en caché y fallos (miss) que se envían al backend y pasan por un salto adicional
- Si la CDF de las solicitudes posteriores al despliegue se separa por resultado de caché, cada grupo vuelve a tener un solo pico
- Los aciertos de caché se desplazan hacia la izquierda respecto a la línea base anterior y se vuelven más rápidos
- Los fallos de caché quedan mucho más a la derecha debido al costo del salto adicional
La causa y la acción encontradas en el tamaño de respuesta
- El fallo de caché es solo el mecanismo; para entender qué solicitudes y por qué están provocando fallos, también hay que observar el tamaño de respuesta
- La caché mantiene objetos pequeños y de uso frecuente, pero los objetos grandes son expulsados o ni siquiera entran desde el inicio
- En el jointplot que combina la relación entre latencia y tamaño de respuesta, diferenciando por color entre aciertos y fallos de caché y sumando la distribución de densidad en cada eje, se distinguen claramente dos grupos
- El grupo de respuestas pequeñas y baja latencia corresponde a aciertos de caché
- El grupo de respuestas grandes y alta latencia corresponde a fallos de caché
- La distribución bimodal de la latencia proviene de la bimodalidad en la distribución del tamaño de respuesta, y se puede responder aumentando el tamaño máximo de objeto en caché o dividiendo las respuestas grandes
Mirar la distribución completa, no solo un gráfico
- Un solo panel o gráfico no basta para capturar toda la situación y, según el caso, puede llevar a conclusiones equivocadas
- Hay que observar los mismos datos de varias maneras para entender a la vez la forma de la distribución, el efecto por percentil, los cambios a lo largo del tiempo, los subgrupos y sus causas
- En particular, la CDF es útil para comparar varios grupos de solicitudes y mostrar la distribución completa en un solo gráfico
Aún no hay comentarios.