Una colección variada de herramientas de análisis de rendimiento en desarrollo y no compatibles para Linux ftrace y perf_events (también conocido como el comando "perf"). Tanto ftrace como perf son herramientas centrales de seguimiento de Linux, incluidas en el código fuente del kernel. Probablemente su sistema ya tenga ftrace y, a menudo, perf es solo un paquete agregado (consulte Requisitos previos).
Estas herramientas están diseñadas para ser fáciles de instalar (menos dependencias), proporcionar observabilidad avanzada del rendimiento y ser fáciles de usar: haga una cosa y hágala bien. Esta colección fue creada por Brendan Gregg (autor de DTraceToolkit).
Muchas de estas herramientas emplean soluciones para que la funcionalidad sea posible en los kernels de Linux existentes. Debido a esto, muchas herramientas tienen advertencias (consulte las páginas de manual) y su implementación debe considerarse como un marcador de posición hasta que se agreguen funciones futuras del kernel o nuevos subsistemas de seguimiento.
Están destinados a Linux 3.2 y kernels más recientes. Para Linux 2.6.x, consulte Advertencias.
Estas herramientas se presentaron en la presentación de USENIX LISA 2014: Análisis de rendimiento de Linux: nuevas herramientas y viejos secretos
Usando ftrace:
Usando perf_events:
Usando eBPF:
Mostrando nuevos procesos y argumentos:
# ./execsnoop Seguimiento de ejecutivos. Ctrl-C para finalizar. ARGUMENTOS PID PPID 22898 22004 hombre ls 22905 22898 preconv -e UTF-8 22908 22898 buscapersonas -s 22907 22898 nroff -mandoc -rLL=164n -rLT=164n -Tutf8 22906 22898 tbl 22911 22910 mapa de encanto local 22912 22907 groff -mtty-char -Tutf8 -mandoc -rLL=164n -rLT=164n 22913 22912 troff -mtty-char -mandoc -rLL=164n -rLT=164n -Tutf8 22914 22912 sucio
Medición de la latencia de E/S del dispositivo de bloque desde la inserción de la cola hasta su finalización:
# ./iolatencia -Q E/S del bloque de rastreo. Salida cada 1 segundo. Ctrl-C para finalizar. >=(ms) .. <(ms) : E/S |Distribución | 0 -> 1 : 1913 |######################################| 1 -> 2 : 438 |######### | 2 -> 4 : 100 |## | 4 -> 8 : 145 |### | 8 -> 16 : 43 |# | 16 -> 32 : 43 |# | 32 -> 64: 1 |# | [...]
Seguimiento del bloque: block_rq_insert tracepoint, con seguimientos de la pila del kernel y solo para lecturas:
# ./tpoint -s block:block_rq_insert 'rwbs ~ "*R*"' cksum-11908 [000] d... 7269839.919098: block_rq_insert: 202,1 R 0 () 736560 + 136 [cksum] cksum-11908 [000] d... 7269839.919107: => __elv_add_request => blk_flush_plug_list => blk_finish_plug => __do_page_cache_readahead => ondemand_readahead => page_cache_async_readahead => generic_file_read_iter => nueva_sincronización_lectura => vfs_read => SyS_read => system_call_fastpath [...]
Cuente las llamadas a funciones del kernel que comienzan con "bio_", resuma cada segundo:
# ./funccount -i 1 'bio_*' Rastreando "bio_*"... Ctrl-C para finalizar. CUENTA DE FUNCIONES bio_intento_back_merge 26 bio_get_nr_vecs 361 bio_alloc 536 bio_alloc_bioset 536 bio_endio 536 bio_libre 536 bio_fs_destructor 536 bio_inicio 536 bio_integridad_enabled 536 bio_put 729 bio_add_page 1004 [...]
Hay muchos más ejemplos en el directorio de ejemplos. Consulte también las páginas de manual.
La intención es que sean los menos posibles. Por ejemplo, un servidor Linux 3.2 sin información de depuración. Consulte la página de manual de la herramienta para obtener detalles.
FTRACE configurado en el kernel. Es posible que ya tenga esto configurado y disponible en su versión de kernel, ya que FTRACE se agregó por primera vez en 2.6.27. Esto requiere CONFIG_FTRACE y otras opciones de FTRACE según la herramienta. Algunas herramientas (por ejemplo, funccount) requieren CONFIG_FUNCTION_PROFILER.
Requiere la instalación del comando "perf". Esto está en el paquete linux-tools-common. Después de instalarlo, perf puede indicarle que instale un paquete de herramientas de Linux adicional (linux-tools -kernel_version ). perf también se puede compilar en tools/perf en el código fuente del kernel. Consulte Requisitos previos de perf_events para obtener más detalles sobre cómo hacer que perf_events funcione completamente.
Requiere un kernel con la opción CONFIG_DEBUG_FS habilitada. Al igual que con FTRACE, es posible que esto ya esté habilitado (debugfs se agregó en 2.6.10-rc3). También es necesario montar los debugfs:
# mount -t debugfs none /sys/kernel/debug
Muchos de los scripts usan awk e intentarán usar mawk o gawk según el comportamiento deseado: mawk para salida almacenada en búfer (debido a su velocidad) y gawk para salida sincrónica (como funciona fflush(), lo que permite una agrupación más eficiente de escribe).
Estos son sólo guiones. O toma todo:
git clone --depth 1 https://github.com/brendangregg/perf-tools
O utilice los enlaces sin formato en github para descargar scripts individuales. P.ej:
wget https://raw.githubusercontent.com/brendangregg/perf-tools/master/iosnoop
Esto conserva las pestañas (que copiar y pegar pueden estropear).
Ftrace se agregó por primera vez a Linux 2.6.27 y perf_events a Linux 2.6.31. Estas primeras versiones tenían errores en el kernel y se han reportado bloqueos y pánicos en los kernels de la serie 2.6.32. Esto incluye CentOS 6.x. Si debe analizar núcleos más antiguos, es posible que estas herramientas solo sean útiles en un entorno tolerante a fallas, como un laboratorio con problemas simulados. Estas herramientas se han desarrollado principalmente en Linux 3.2 y kernels posteriores.
Dependiendo de la herramienta, también pueden producirse gastos generales. Consulte la siguiente sección.
perf_events está evolucionando. Esta colección comenzó a desarrollarse alrededor de Linux 3.16, con servidores Linux 3.2 como objetivo principal, en un momento en que perf_events carece de ciertas capacidades programáticas (por ejemplo, agregaciones personalizadas en el kernel). Es posible que se agreguen en una próxima versión del kernel. Hasta entonces, muchas de estas herramientas emplean soluciones, trucos y trucos para funcionar. Algunas de estas herramientas pasan datos de eventos al espacio del usuario para su posprocesamiento, lo que cuesta mucho más que las agregaciones internas del kernel. La sobrecarga de cada herramienta se describe en su página de manual.
ADVERTENCIA : En casos extremos , su aplicación de destino puede ejecutarse 5 veces más lento al utilizar estas herramientas. Dependiendo de la herramienta y la versión del kernel, también puede existir el riesgo de que se produzcan pánicos en el kernel. Lea el encabezado del programa para ver las advertencias y pruébelo antes de usarlo.
Si los gastos generales son un problema, estas herramientas se pueden mejorar. Si una herramienta aún no lo hace, podría reescribirse en C para usar perf_events_open() y mmap() para el búfer de seguimiento. También podría implementar recuentos de frecuencia en C y operar en mmap() directamente, en lugar de usar awk/Perl/Python. Es posible realizar mejoras adicionales para las herramientas basadas en ftrace, como el uso de instantáneas y búferes por instancia.
Algunas de estas herramientas están pensadas como soluciones a corto plazo hasta que existan más capacidades del kernel, momento en el que se pueden reescribir sustancialmente. Las versiones anteriores de estas herramientas se conservarán en este repositorio, para versiones anteriores del kernel.
Como mi objetivo principal es una flota de servidores Linux 3.2 que no tienen información de depuración, estas herramientas intentan no requerirla. A veces, esto hace que la herramienta sea más frágil de lo necesario, ya que estoy empleando soluciones alternativas (que pueden ser específicas de la versión del kernel y de la plataforma) en lugar de usar información de depuración (que puede ser genérica). Consulte la página de manual para conocer los requisitos previos detallados para cada herramienta.
Intenté usar perf_events ("perf") siempre que fue posible, ya que esa interfaz se desarrolló para uso multiusuario. Por varias razones, a menudo he necesitado usar ftrace en su lugar. ftrace es sorprendentemente poderoso (¡gracias Steven Rostedt!) y no todas sus características están expuestas a través de perf o en el uso común. Esta colección de herramientas es de alguna manera una demostración de las características ocultas de Linux usando ftrace.
Dado que las cosas están cambiando, es muy posible que algunas herramientas no funcionen en su versión del kernel de Linux. Se necesitará algo de experiencia y ensamblaje para arreglarlos.
Un estudio de caso y un resumen:
Artículos relacionados: