Cómo comprobar si un punto de seguimiento (tracepoint) del kernel está activo en Linux

LinuxLinuxBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, exploraremos cómo comprobar si un punto de seguimiento del kernel (tracepoint) está activo en Linux. Los puntos de seguimiento son esenciales para observar eventos del kernel y son inestimables para la depuración y el análisis de rendimiento. Comenzaremos enumerando los puntos de seguimiento disponibles en su sistema utilizando el sistema de archivos /sys/kernel/debug/tracing.

Después de la exploración inicial, aprenderemos cómo comprobar el estado de puntos de seguimiento específicos utilizando la utilidad trace-cmd y, finalmente, verificaremos los puntos de seguimiento examinando el archivo /proc/kallsyms.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/PackagesandSoftwaresGroup(["Packages and Softwares"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/PackagesandSoftwaresGroup -.-> linux/apt("Package Handling") subgraph Lab Skills linux/ls -.-> lab-558726{{"Cómo comprobar si un punto de seguimiento (tracepoint) del kernel está activo en Linux"}} linux/cat -.-> lab-558726{{"Cómo comprobar si un punto de seguimiento (tracepoint) del kernel está activo en Linux"}} linux/grep -.-> lab-558726{{"Cómo comprobar si un punto de seguimiento (tracepoint) del kernel está activo en Linux"}} linux/apt -.-> lab-558726{{"Cómo comprobar si un punto de seguimiento (tracepoint) del kernel está activo en Linux"}} end

Listar puntos de seguimiento (tracepoints) con ls /sys/kernel/debug/tracing

En este paso, comenzaremos a explorar los puntos de seguimiento (tracepoints) de Linux. Los puntos de seguimiento son ganchos (hooks) colocados en el código fuente del kernel que te permiten observar eventos específicos que ocurren dentro del kernel. Son inestimables para la depuración y el análisis de rendimiento.

El kernel de Linux proporciona un marco de seguimiento (tracing framework), que a menudo se accede a través del directorio /sys/kernel/debug/tracing. Este directorio contiene varios archivos que controlan y proporcionan información sobre el seguimiento.

Para ver los puntos de seguimiento disponibles en su sistema, puede listar el contenido del directorio events dentro del sistema de archivos de seguimiento.

Abra su terminal si aún no está abierta. Recuerde, puede encontrar el icono de Xfce Terminal en el lado izquierdo de su escritorio.

Ahora, escriba el siguiente comando y presione Enter:

ls /sys/kernel/debug/tracing/events

Este comando utiliza ls para listar el contenido del directorio /sys/kernel/debug/tracing/events. El directorio events es donde el kernel expone los puntos de seguimiento disponibles, organizados por subsistema.

Verá una lista de directorios, cada uno de los cuales representa un subsistema del kernel (como syscalls, sched, ext4, etc.). Dentro de estos directorios se encuentran los nombres reales de los puntos de seguimiento.

Por ejemplo, es posible que vea una salida similar a esta (la salida exacta variará según la versión y configuración de su kernel):

block/      ext4/       kmem/       net/        pci/        random/     sock/       task/       workqueue/
bpf/        fib/        kvm/        nfs/        power/      raw_syscalls/ signal/     timer/      xfs/
compaction/ ftrace/     libata/     nipi/       printk/     regmap/     skb/        udp/        xen/
cpu-freq/   gpio/       mdio/       oom/        qdisc/      rpm/        snd/        vmscan/
cgroup/     header_event  header_page  irq/        migrate/    pagemap/    ras/        scsi/       spi/        writeback/
dma_fence/  i2c/        kcsan/      module/     perf_events/  rcu/        sfc/        syscalls/   xhci-hcd/
enable      iommu/      kprobe/     mpx/        powerpc/    regulator/  signal/     tcp/        xilinx-vsec/
exceptions/ iov/        kscan/      napi/       probe/      rpm/        skb/        timer/      xfs/

Esta salida muestra las diferentes categorías de eventos que puede seguir. En los siguientes pasos, aprenderemos cómo comprobar el estado de estos puntos de seguimiento.

Haga clic en Continuar para continuar.

Comprobar el estado de los puntos de seguimiento (tracepoints) con trace-cmd

En el paso anterior, listamos los puntos de seguimiento disponibles explorando el directorio /sys/kernel/debug/tracing/events. Ahora, usemos la utilidad trace-cmd para obtener información más detallada sobre los puntos de seguimiento, específicamente su estado (si están habilitados o deshabilitados).

El comando trace-cmd es una herramienta poderosa para interactuar con el marco de seguimiento (tracing framework) de Linux. Si trace-cmd no está instalado, puede instalarlo utilizando apt.

Primero, actualice la lista de paquetes:

sudo apt update

Luego, instale trace-cmd:

sudo apt install trace-cmd

Es posible que vea una salida que indique que trace-cmd ya está instalado, lo cual está bien.

Ahora, para listar todos los puntos de seguimiento disponibles y su estado, use el comando trace-cmd list -e. La opción -e le dice a trace-cmd que liste los eventos (puntos de seguimiento).

Escriba el siguiente comando y presione Enter:

trace-cmd list -e

Este comando generará una larga lista de puntos de seguimiento, mostrando su subsistema y nombre, seguidos de su estado actual entre corchetes ([enabled] o [disabled]).

Verá una salida similar a esta (nuevamente, la lista exacta variará):

  block:block_bio_backmerge [disabled]
  block:block_bio_bounce [disabled]
  block:block_bio_complete [disabled]
  block:block_bio_frontmerge [disabled]
  block:block_bio_queue [disabled]
  block:block_bio_remap [disabled]
  block:block_dirty_buffer [disabled]
  block:block_getrq [disabled]
  block:block_plug [disabled]
  block:block_rq_complete [disabled]
  block:block_rq_insert [disabled]
  block:block_rq_issue [disabled]
  block:block_rq_remap [disabled]
  block:block_rq_requeue [disabled]
  block:block_sync_buffer [disabled]
  block:block_touch_buffer [disabled]
  block:block_unplug [disabled]
  bpf:bpf_trace_printk [disabled]
  bpf:bpf_trace_vprintk [disabled]
  ... (muchos más puntos de seguimiento)

Como puede ver, la mayoría de los puntos de seguimiento están deshabilitados por defecto para evitar una sobrecarga de rendimiento. Por lo general, habilitaría puntos de seguimiento específicos cuando necesite seguir eventos particulares del kernel.

Usar trace-cmd list -e es una forma conveniente de ver la lista completa de puntos de seguimiento y su estado actual sin navegar manualmente por el sistema de archivos /sys/kernel/debug/tracing.

Haga clic en Continuar para pasar al siguiente paso.

Verificar los puntos de seguimiento (tracepoints) en /proc/kallsyms

En los pasos anteriores, aprendimos cómo listar los puntos de seguimiento utilizando el sistema de archivos de seguimiento (tracing filesystem) y la utilidad trace-cmd. Ahora, exploremos otra forma de ver información sobre los puntos de seguimiento: el archivo /proc/kallsyms.

El archivo /proc/kallsyms contiene las direcciones y nombres de todos los símbolos del kernel exportados, incluyendo funciones y variables. Los puntos de seguimiento también se representan como símbolos en este archivo.

Puedes usar comandos como cat y grep para buscar símbolos de puntos de seguimiento dentro de /proc/kallsyms. Los símbolos de puntos de seguimiento suelen seguir una convención de nomenclatura, a menudo incluyendo tracepoint o _tracepoint.

Intentemos encontrar símbolos relacionados con puntos de seguimiento en /proc/kallsyms. Usaremos cat para leer el archivo y redirigiremos la salida a grep para buscar líneas que contengan la palabra "tracepoint".

Escribe el siguiente comando y presiona Enter:

cat /proc/kallsyms | grep tracepoint

Este comando mostrará las líneas de /proc/kallsyms que contengan la cadena "tracepoint". Verás una salida similar a esta:

...
ffffffffXXXXXXXX R __tracepoint_module_load
ffffffffXXXXXXXX R __tracepoint_module_free
ffffffffXXXXXXXX R __tracepoint_module_get
ffffffffXXXXXXXX R __tracepoint_module_put
ffffffffXXXXXXXX R __tracepoint_module_request_module
ffffffffXXXXXXXX R __tracepoint_module_module_init
ffffffffXXXXXXXX R __tracepoint_module_module_exit
ffffffffXXXXXXXX R __tracepoint_module_module_request
ffffffffXXXXXXXX R __tracepoint_module_module_autoload
ffffffffXXXXXXXX R __tracepoint_module_module_kset_reg
ffffffffXXXXXXXX R __tracepoint_module_module_kset_unreg
...

XXXXXXXX representa direcciones hexadecimales, que serán diferentes en tu sistema. La parte importante es el nombre del símbolo, que a menudo comienza con __tracepoint_ seguido del nombre del subsistema y del evento.

Esto confirma que los puntos de seguimiento se representan efectivamente como símbolos dentro de la tabla de símbolos del kernel, accesibles a través de /proc/kallsyms. Si bien /sys/kernel/debug/tracing y trace-cmd proporcionan una interfaz más amigable para administrar y ver los puntos de seguimiento, entender que existen como símbolos del kernel es fundamental para conceptos avanzados de seguimiento del kernel.

Ahora has aprendido tres formas diferentes de identificar e inspeccionar los puntos de seguimiento en un sistema Linux.

Haz clic en Continuar para completar este laboratorio.

Resumen

En este laboratorio, comenzamos explorando los puntos de seguimiento (tracepoints) de Linux, que son cruciales para la depuración del kernel y el análisis de rendimiento. Aprendimos que el directorio /sys/kernel/debug/tracing proporciona acceso al marco de seguimiento (tracing framework) del kernel. En particular, usamos el comando ls /sys/kernel/debug/tracing/events para listar los puntos de seguimiento disponibles, que se organizan por subsistema del kernel dentro del directorio events. Este primer paso demostró cómo identificar los diversos eventos del kernel que se pueden seguir en un sistema.