Song Baohua: cuando el kernel de Linux se encuentra con un tiburón — kernelshark

Campo de lectura de Linux Song Baohua original 4 de septiembre

El hermano menor ha estado promocionando el mapa de llamas antes, y resulta que los zapatos de muchos niños usan el mapa de llamas en todo. Para ser honesto, el diagrama de llama es particularmente adecuado para analizar puntos calientes en tiempo de ejecución (ya sea en la CPU, fuera de la CPU o en la memoria, etc., la imaginación del diagrama de llama puede ampliarse infinitamente), pero debe analizar uno si se trata de un problema de sincronización, como un sistema. El inicio lento, el inicio lento de un software, el uso de diagramas de llama pueden ayudar un poco, pero la ayuda es ciertamente sutil.

Porque este problema de que cierto proceso sea lento es un problema de tiempo. No es un tema candente en tiempo de ejecución, por lo que lo más importante para usted es dibujar un diagrama de secuencia de su proceso. Puede haber restricciones de E / S, o puede ser la locura de la CPU, y tal vez alguien esté durmiendo estúpidamente.

Existe una herramienta excelente en la industria de Linux para analizar el lento inicio de Linux, llamada bootchart, que en realidad describe el uso de IO y CPU del proceso durante el proceso de inicio. Tenga en cuenta que este tipo de gráfico tiene una característica común, el eje horizontal es el tiempo y el eje vertical es el estado de la CPU, el hilo, etc. (en ejecución, inactivo, IO, etc.).
Song Baohua: cuando el kernel de Linux se encuentra con un tiburón — kernelshark

Bootchart es realmente bueno para analizar el proceso de arranque, pero ¿normalmente inicias cierto software lentamente? O, en términos más generales, ¿es un proceso en particular extremadamente lento? O más ampliamente, ¿cómo se ejecuta el programa que escribo en el sistema y cómo se ejecutan varios subprocesos? Tenemos que describir su diagrama de tiempos.

En este momento, podemos usar el diagrama de tiempo de perf. Por ejemplo, escribamos un código muy simple que contenga 2 ciclos de hilo para hacer cosas y dormir:
Song Baohua: cuando el kernel de Linux se encuentra con un tiburón — kernelshark
ejecutamos el a.out anterior y usamos perf para registrar el estado programado del sistema. :

1    ~$ sudo perf sched record -a
2    ^C[ perf record: Woken up 1 times to write data ]
3    [ perf record: Captured and wrote 1.909 MB perf.data (9039 samples) ]

A continuación, se genera el diagrama de tiempo:

1    ~$ sudo perf timechart
2   Written 6.4 seconds of trace to output.svg.

Usamos firefox para abrir este diagrama de secuencia:

Song Baohua: cuando el kernel de Linux se encuentra con un tiburón — kernelshark

En el gráfico de tiempo, podemos ver el estado de ejecución de mis 8 CPU y el estado de 2 subprocesos en a.out que son azules (en ejecución) y grises (inactivos) durante un tiempo. Podemos ver que el sistema casi está usando CPU2 y CPU7 para ejecutar los 2 subprocesos en nuestro a.out que ocupan más CPU.

Sin embargo, el diagrama de tiempo de rendimiento no es el final en este tipo de herramienta. Para ser honesto, ¡es demasiado tosco! Echemos un vistazo al famoso kernel shark-kernelshark.

A continuación, usamos trace-cmd para registrar los puntos de seguimiento relacionados con sched:

1    ~$ sudo trace-cmd record -e 'sched_wakeup*' -e sched_switch -e 'sched_migrate*'
2    Hit Ctrl^C to stop recording
3    ^CCPU0 data recorded at offset=0x60e000
4               61440 bytes in size
5    CPU1 data recorded at offset=0x61d000
6              184320 bytes in size
7    CPU2 data recorded at offset=0x64a000
8                24576 bytes in size
9    CPU3 data recorded at offset=0x650000
10              12288 bytes in size
11    CPU4 data recorded at offset=0x653000
12              12288 bytes in size
13    CPU5 data recorded at offset=0x656000
14              86016 bytes in size
15   CPU6 data recorded at offset=0x66b000
16             172032 bytes in size
17    CPU7 data recorded at offset=0x695000
 18             28672 bytes in size

Utilice kernelshark para abrir el punto registrado:


1  ~$ kernelshark trace.dat
2   Loading  "trace.dat"

Vea la siguiente interfaz gráfica:
Song Baohua: cuando el kernel de Linux se encuentra con un tiburón — kernelshark
Podemos realizar varias operaciones en la IU. Por ejemplo, si prestamos atención a a.out, elegimos la tarea:
Song Baohua: cuando el kernel de Linux se encuentra con un tiburón — kernelshark
Obtenemos esta vista: Por
Song Baohua: cuando el kernel de Linux se encuentra con un tiburón — kernelshark
ejemplo, en el punto dibujado en mi imagen, aparece el color de a.out El siguiente texto expresa que el motivo del cambio es la programación. El objetivo de la programación es el intercambio. Este punto de programación se produce en CPU4:

Song Baohua: cuando el kernel de Linux se encuentra con un tiburón — kernelshark
Si lo que esperas es un eje horizontal es tiempo y un eje vertical es un gráfico de lo que cada hilo y CPU están haciendo en un cierto período de tiempo, kernelshark, por supuesto que te lo mereces.

Supongo que te gusta

Origin blog.51cto.com/15015138/2554307
Recomendado
Clasificación