Rendimiento de Linux
(brendangregg.com)- La página Linux Performance de Brendan Gregg es un hub de enlaces que reúne en un solo lugar recursos de observabilidad, análisis, benchmarking y tuning necesarios para empezar a investigar el rendimiento de Linux
- El flujo de herramientas clave pasa por perf, eBPF, bcc, bpftrace y Flame Graphs, con acceso directo desde ejemplos de comandos hasta herramientas de tracing y visualización
- La documentación se amplía con el artículo de análisis de rendimiento de Netflix de 2015, tuning de EC2, Linux load averages, frame pointers, ejemplos de gdb y dos libros sobre rendimiento
- La lista de charlas ofrece rutas de aprendizaje según el contexto, como una introducción de 40 minutos, un tutorial de herramientas de 90 minutos, análisis de rendimiento de contenedores y una checklist para SRE
- En cada mapa de herramientas hay que verificar qué tan actualizado está mirando el año en la esquina inferior derecha de la imagen; el diagrama integrado no es tan completo como los demás diagramas individuales
Hub de recursos de rendimiento y mapas de herramientas
- Esta página es un hub de enlaces que reúne recursos de Linux performance creados por Brendan Gregg
- La imagen del mapa de herramientas de la derecha fue creada con una tipografía grande para adaptarse a decks de diapositivas, y tiene un formato que también permite imprimirla y pegarla en la pared de una oficina
- Los mapas de herramientas dividen el trabajo de rendimiento en Linux en las siguientes áreas
- Para saber qué tan actualizada está cada imagen, hay que revisar el año en la esquina inferior derecha
- También se ofrece por separado un diagrama de alta resolución que combina observabilidad, tuning estático de rendimiento y perf-tools/bcc
Principales herramientas con acceso directo
- perf: perf one-liners, ejemplos y material de visualización
- eBPF tools: herramientas de tracing BPF/bcc y ejemplos
- perf-tools: conjunto de herramientas perf basadas en Ftrace
- bcc: conjunto de herramientas de rendimiento BPF/bcc
- bpftrace: conjunto de herramientas de rendimiento BPF/bpftrace
- Flame Graphs: cómo usar Flame Graphs con perf y otros profilers
Documentación y materiales de aprendizaje
- Linux Performance Analysis in 60,000 Milliseconds es un material de Netflix de 2015 que resume los primeros 10 comandos usados al iniciar una investigación de rendimiento
- Performance Tuning Linux Instances on EC2 incluye los valores de tuning de EC2 Linux usados en Netflix
- Linux Load Averages: Solving the Mystery trata el significado del load average de Linux y por qué se incluye el estado de uninterruptible sleep
- The Return of the Frame Pointers explica el rol de los frame pointers, por qué están volviendo en las principales distribuciones de Linux y otros métodos de stack walking
- gdb Debugging Full Example es un tutorial de gdb que incluye el uso de herramientas de perf/debugging
- Systems Performance: Enterprise and the Cloud, 2nd Edition trata metodologías de análisis de rendimiento y herramientas de Linux, e incluye perf, Ftrace y eBPF
- BPF Performance Tools cubre más de 100 herramientas de análisis de rendimiento eBPF junto con breves resúmenes de herramientas tradicionales
- Si Systems Performance 2nd Edition es el volumen 1, este libro tiene el carácter de volumen 2
- También se ofrecen por separado materiales para crear Flame Graphs con perf y eBPF en Linux
Lecturas avanzadas sobre eBPF, ftrace y perf
- Los artículos sobre eBPF, bcc y bpftrace se publicaron de forma continua entre 2015 y 2023
- Ftrace: The Hidden Light Switch es un artículo de lwn.net que aborda casos de uso de Linux ftrace
- Los artículos sobre perf-tools basados en ftrace se publicaron entre 2014 y 2015, e incluyen temas relacionados con iosnoop, opensnoop, execsnoop, tcpretrans, Page Cache Hit Ratio, uprobe y USDT
- Los recursos basados en perf abarcan perf_events y CPU sampling, static tracepoints, heat maps, counting, kernel line tracing, off-CPU flame graphs, profiling de Linux en Netflix, Java mixed-mode flame graphs, perf sched y otros temas
- Working Set Size Estimation es un recurso sobre la estimación del working set size para Linux
- KPTI/KAISER Meltdown Initial Performance Regressions trata las regresiones de rendimiento relacionadas con Meltdown en 2018
- CPU Utilization is Wrong aborda el problema creciente de que los memory stall cycles dominan la métrica %CPU
- USE Method: Linux Performance Checklist y Off-CPU Analysis Method son recursos sobre metodologías de análisis de rendimiento en Linux
Charlas recomendadas según la situación
-
Linux Systems Performance, USENIX LISA 2019
-
Linux Performance 2018, PerconaLive 2018
- Resume los cambios y funciones recientes de Linux performance en 2018 en una keynote de 20 minutos
- youtube, slideshare, PDF
-
Linux Performance Tools, Velocity 2015
- Tutorial de 90 minutos que cubre observabilidad de rendimiento, benchmarking, tuning, tuning estático de rendimiento, herramientas y metodologías de tracing, y demos en vivo
- youtube playlist, slideshare, PDF
-
How Netflix Tunes EC2 Instances for Performance, AWS re:Invent 2017
- Se centra en el tuning más que en la observabilidad del rendimiento, y cubre el contexto de Netflix, los tipos y funciones de instancias AWS EC2, los Linux kernel tunables y la observabilidad
- youtube, slideshare
-
Container Performance Analysis, DockerCon 2017
- Cubre cómo encontrar dónde está el cuello de botella entre el host y el contenedor, perfilar apps en contenedores y profundizar hasta el kernel
- youtube, slideshare
-
Broken Linux Performance Tools, SCaLE14x 2016
- Cubre problemas frecuentes en herramientas de sistemas Linux, métricas, estadísticas, visualizaciones, overhead de medición y benchmarks, junto con consejos de “What You Can Do”
- youtube, slideshare, PDF
-
Using Linux perf at Netflix, Kernel Recipes 2017
- Se centra en el profiling de CPU y en cómo funcionan los Flame Graphs, e incluye problemas de stack traces y symbols al perfilar Java, Node.js, VMs y contenedores con las propiedades de perf_events
- youtube, slideshare
-
Give me 15 minutes and I'll change your view of Linux tracing, LISA 2016
- Es una demo que muestra ftrace, perf y bcc/BPF
- youtube, full talk video, slides
-
Performance analysis superpowers with Linux eBPF, O’Reilly Velocity 2017
- Cubre cómo usar enhanced BPF, es decir eBPF, agregado en la serie Linux 4.x, para análisis de rendimiento, observabilidad y depuración
- El frontend es bcc, un proyecto open source que ofrece interfaces y herramientas BPF
- youtube, slideshare, PDF
-
Linux Performance Analysis: New Tools and Old Secrets, LISA 2014
- Cubre las herramientas ftrace y perf_events, además de perf-tools, que usa principalmente ftrace
- ftrace se presenta como un tracer integrado en el kernel Linux durante muchos años, pero casi no descubierto
- youtube, slideshare, PDF
-
Performance Checklists for SREs, SREcon 2016
- Incluye en la parte final una checklist para responder a incidentes de rendimiento en Linux, y también puede ser útil para análisis urgentes de rendimiento en Linux
- youtube, usenix, slideshare, PDF
Recursos externos recomendados
- RHEL Performance Guide incluye muchas herramientas CLI y tunables
- Performance analysis & tuning of Red Hat Enterprise Linux - 2015 Red Hat Summit es un video de 2 horas que aborda en profundidad el Linux performance tuning y es aplicable a la mayoría de las distribuciones de Linux
- Linux Instrumentation son las diapositivas de una charla de Ian Munsie de junio de 2010 y resumen varios Linux tracers
- Julia Evans blog ofrece artículos sobre varios temas, incluidas herramientas de rendimiento
- Publicaciones de Davidlohr Bueso sobre rendimiento de Linux también se incluyen entre los recursos recomendados
1 comentarios
Opiniones de Hacker News
Estoy usando tuned en un VPS Debian/Ubuntu donde corro apps en tiempo real, y funciona bastante bien
Es más simple que cambiar directamente los parámetros del kernel, es decir, la configuración de sysctl o los tunables del kernel
https://access.redhat.com/documentation/en-us/red_hat_enterp...
sudo apt install tunedNo sabía que Brendan Gregg ahora estaba en Intel
https://en.wikipedia.org/wiki/Brendan_Gregg
También es el protagonista del video viral Shouting in the Data Center
https://www.youtube.com/watch?v=tDacjrSCeq4
Es un verdadero genio
Vale la pena señalar que casi todo lo que trata el artículo original no tiene que ver con la latencia, sino con el rendimiento/ancho de banda de red, disco, otras E/S y CPU
Para mucha gente, rendimiento significa throughput, así que se entiende. Pero también hay casos en los que la latencia es mucho más importante que el throughput, y para ajustar la latencia en Linux se necesita otro conjunto de herramientas
Otro eje que la gente puede optimizar es el rendimiento por watt, pero no me voy a extender sobre eso aquí
A veces optimizar el throughput también optimiza la latencia. Por ejemplo, si puedes meter más procesos en una misma máquina, se reduce la distancia promedio entre los procesos y sus interlocutores, y también baja la latencia promedio
Algo muy obvio al optimizar la latencia es aumentar el throughput lo suficiente para que no se convierta en cuello de botella
Si se optimiza la latencia de forma agresiva, siento que no hay tanto tuning de Linux en sí. Podría estar equivocado, pero en general parece centrarse en fijar cores, ejecución tickless, networking en espacio de usuario y ajustes del lado del hardware como tamaño de página, SMT, configuración de ahorro de energía y elección de hardware
[1] https://pdfs.semanticscholar.org/bce7/5f78d340cac32dccd8631f...
A veces se pueden mejorar ambos, pero normalmente hay un trade-off
Esperar también es una buena estrategia
Desde Linux 6.5, el scheduler entiende que, cuando un “core” SMT está ocupado, colocar algo en otro “core” no necesariamente es lo mejor. En la práctica, se parece más a un solo core con un costo de cambio de contexto muy bajo
Gracias a esto, las tareas muy paralelas se volvieron perceptiblemente más ágiles, y también se nota en los gráficos de uso de CPU
Los resultados pueden variar por temas de coherencia de caché y NUMA
Artículos relacionados:
Linux Performance - https://news.ycombinator.com/item?id=13498485 - enero de 2017, 64 comentarios
Linux Performance - https://news.ycombinator.com/item?id=8205057 - agosto de 2014, 22 comentarios
Si alguien quiere cambiar algún parámetro tunable pero no puede explicar por qué ese cambio produciría el efecto deseado, ni por qué está configurado con ese valor en primer lugar, no le dejaría cambiarlo en producción
Se podría llamar “el parámetro tunable de Chesterton”
Pensando en el trabajo de Brendan con eBPF, tomo este material como una forma de monitorear y evaluar más fácilmente distintas situaciones de rendimiento
En los ajustes y el tuning hay trade-offs, y normalmente cuando se optimiza una cosa, otra se ve perjudicada
Como extra, btop me resultó muy útil como visor TUI todo en uno de rendimiento y carga del sistema, en reemplazo de glances. Me pregunto cuánto lo están aprovechando los desarrolladores y si hay motivación para crear mejores herramientas TUI de monitoreo
Cuando entro a un servidor, lo primero que hago es abrir tmux y asignar una ventana a btop
Para mí, el “tuning” de rendimiento en Linux equivale a desactivar las mitigaciones de Spectre/Meltdown
En este caso, los nodos de cómputo corren dentro de una VPC sin acceso a Internet, así que el riesgo parece bastante bajo
Parece que ese crash específico ya fue corregido, pero aun así no lo recomiendo. Las CPU modernas de AMD e Intel están diseñadas para ejecutarse al menos con las mitigaciones básicas activadas
Lo dejé en favoritos. Creo que pronto me va a servir para algo en lo que estoy trabajando.
Todavía no leí todas las diapositivas, pero me da curiosidad si alguien ha visto mejoras de rendimiento significativas con opciones de compilación del kernel.
Antes, cuando usaba Gentoo y ajustaba flags de compilación, solía modificar el Makefile del kernel para usar
-O3y aplicar un parche de-march=native. Viéndolo en retrospectiva, según los benchmarks de Phoronix parece ser más bien perjudicial para varias cargas de trabajo, así que me pregunto si alguien ha visto casos opuestos.Es un buen sitio. Como tiende a resumir el rendimiento de Linux, ya sea para tuning o monitoreo, hace que uno respire hondo.
Este tema es profundo, y también hay muchísimos tipos de herramientas de observación. Como mínimo hay que conocer a fondo uptime, dmesg e iostat. Estas herramientas dan una mirada general a varios aspectos del sistema, como carga, memoria y CPU, y ofrecen las primeras pistas para diagnosticar el estado. Es la página 1 de 100 de mi checklist de “a ver, echemos un vistazo”.
En metodología de análisis de rendimiento, se recomiendan benchmarks cuidadosos para evaluar de forma integral el comportamiento del sistema y las características de la carga de trabajo. Hay que comparar escenarios antes y después de los cambios, hacer primero cambios pequeños y luego combinar gradualmente aquellos que parezcan aportar beneficios. El laboratorio y el entorno de producción nunca se comportan exactamente igual.
A partir de aquí se pone complicado. El perfilado de CPU con herramientas como
perfy visualizaciones como flame graphs permiten analizar de forma dirigida la actividad de la CPU y, si se suma el seguimiento de eventos de hardware, también se puede optimizar la eficiencia de cómputo. Hay que saber algo más que “es problema de la app, antes del último release del equipo de desarrollo estaba bien”.Como administrador, al hablar con desarrolladores se vuelven necesarias herramientas de Linux como ftrace y BPF. Permiten rastrear en detalle la ejecución de funciones del kernel y llamadas al sistema, por lo que son importantes para resolver problemas y optimizar rendimiento. A la inversa, si eres desarrollador, quizá tengas que verificar la intuición del administrador. Como dice el dicho: confía, pero verifica.
Si es tu propio código, tienes que conocer BPF. BPF no solo permite trazado eficiente dentro del kernel, sino que también impulsa el desarrollo de herramientas avanzadas y personalizadas de perfilado mediante bcc y bpftrace, y permite mirar más a fondo el rendimiento del sistema.
Por último, esto sí que es difícil. El tuning consiste en ajustar numerosos componentes del sistema y parámetros del kernel, desde CPU y memoria hasta la configuración de red, para optimizar el rendimiento y la confiabilidad en diversas cargas de trabajo. O bien puedes echarle la culpa a la red.
En la práctica, se necesita una buena actitud hacia la gestión de cambios. Perseguir cambios en el código o en parámetros del kernel puede abrumar a cualquiera, y cuando se trabaja contra el reloj, la presión aumenta aún más la posibilidad de errores humanos.