Oracle ha publicado DTrace para Linux 2.0.0-1.14

Se presenta una versión experimental del kit de herramientas de depuración dinámica DTrace para Linux 2.0.0-1.14, implementado como un proceso de espacio de usuario que utiliza el subsistema eBPF y los mecanismos de seguimiento estándar proporcionados por el kernel de Linux. En términos de funcionalidad, la implementación de DTrace basada en eBPF está cerca de la primera implementación de DTrace para Linux, implementada en forma de módulo de kernel. El código del proyecto se distribuye bajo la licencia GPLv2.

El kit de herramientas se puede utilizar con kernels de Linux estándar que admitan BPF. Para trabajar, necesita la biblioteca libctf con implementación de soporte para el formato de depuración CTF (Compact Type Format), que se incluye en el paquete binutils a partir de la versión 2.40, o la biblioteca libdtrace-ctf portada desde Solaris. Opcionalmente, se ofrecen dos parches para el kernel 6.7, que le permiten utilizar funciones avanzadas para obtener datos adicionales sobre los módulos y el kernel.

La tecnología DTrace fue desarrollada para resolver los problemas de seguimiento dinámico del kernel y las aplicaciones finales en el sistema operativo Solaris. DTrace brinda al usuario la capacidad de monitorear el comportamiento del sistema en detalle y diagnosticar problemas en tiempo real. Durante el proceso de depuración, DTrace no afecta el funcionamiento de las aplicaciones en estudio y de ninguna manera afecta su rendimiento, lo que le permite organizar el análisis de los sistemas en ejecución sobre la marcha. Uno de los puntos fuertes de DTrace es el lenguaje D de alto nivel, similar a AWK, en el que es mucho más fácil crear scripts de seguimiento que utilizar las herramientas ofrecidas para escribir controladores eBPF en C, Python y Lua con bibliotecas externas.

Características principales:

  • Proveedores disponibles:
    • cpc (Contador de rendimiento de la CPU): obtención de información sobre el rendimiento.
    • dtrace: los controladores BEGIN, END y ERROR se ejecutan antes o después de otras comprobaciones, así como cuando se producen errores.
    • fbt (Seguimiento de límites de funciones): seguimiento de llamadas a funciones del kernel.
    • lockstat: seguimiento del estado de las cerraduras.
    • pid: realiza un seguimiento de las llamadas a funciones en procesos que se ejecutan en el espacio del usuario.
    • proc: monitorea la actividad relacionada con el proceso, como el inicio y el apagado (bifurcación, ejecución, salida, falla).
    • perfil: guardar estadísticas de rendimiento en intervalos específicos.
    • sdt, rawtp: seguimiento estático del kernel (SDT: seguimiento definido estáticamente).
    • usdt: seguimiento de aplicaciones estáticas (USDT - Seguimiento definido estáticamente en el espacio de usuario)
    • sched: monitorea la asignación de recursos de la CPU.
    • sycall: rastrea la entrada y salida de llamadas al sistema.
  • Agregación de datos recopilados: la capacidad de utilizar funciones agregadas (avg, count, llquantize, lquantize, max, min, quantize, stddev y sum) y acciones agregadas (clear, normalize, normalize, printa). Soporte para almacenar los resultados de la aplicación de funciones agregadas en matrices regulares y asociativas.
  • Soporte para rastreo especulativo, que le permite monitorear datos efímeramente, decidiendo cuáles de ellos deben capturarse en el búfer de rastreo y cuáles deben descartarse. Las funciones disponibles son especular, especular, comprometer y descartar.
  • Soporte para variables globales y locales, TLS (Thread-Local Storage), matrices y cadenas asociativas.
  • Proporcionar variables integradas: arg0 - arg9, args[], caller, curcpu, curthread, epid, errno, execname, gid, id, pid, ppid, probefunc, probemod, probename, probeprov, stack Depth, tid, timestamp, ucaller, uid, uregs[], ustack Depth, walltimestamp.
  • Acciones soportadas: exit, freopen, ftruncate, mod, printa, printf, rise, setopt, stack, sym, system, trace, tracemem, uaddr, umod, ustack y usym.
  • Disponibilidad de funciones integradas: alloca, basename, bcopy, copyin, copyinstr, copyinto, copyout, copyoutstr, dirname, getmajor, getminor, htonl, htonll, htons, index, inet_ntoa, lltostr, mutex_owned, mutex_owner, mutex_type_adaptive, mutex_type_spin, ntohl , ntohll, ntohs, progenyof, rand, rindex, rw_iswriter, rw_read_held, rw_write_held, strchr, strjoin, strlen, strrchr, strstr, strtok, substr.
  • Presencia de contadores de datos que no están incluidos en los buffers de seguimiento.
  • Soporte para compilar scripts de rastreo D en formato de programa BPF.
  • Precompilación de funciones BPF para llamadas a bibliotecas.
  • Opción bpflog para obtener un registro de verificación de los programas BPF cargados.
  • Generación dinámica de código y precompilación de código para su reutilización en programas BPF.

Cambios en la nueva versión:

  • El proveedor pid, utilizado para rastrear procesos en el espacio del usuario, ha agregado soporte para rastrear la ejecución de instrucciones según su desplazamiento en el código.
  • Se agregó soporte para usar las funciones stack() y ustack() para agregar datos recopilados.
  • La capacidad de eliminar elementos de cualquier tipo de matrices asociativas asignando el literal 0.
  • Se agregó una acción de impresión para generar datos estructurados con anotaciones de tipo.
  • Se agregaron nuevas funciones integradas cleanpath(), d_path() y link_ntop().
  • Se agregó el parámetro "-xcpu", que le permite vincular comprobaciones a CPU específicas.
  • Se agregó la opción "-xlockmem" para limitar el tamaño de la memoria.
  • Se proporcionó la capacidad de guardar datos de seguimiento del proceso (USDT) entre reinicios de dtprobed.
  • Soporte para el mecanismo BTF (BPF Type Format), que proporciona información de verificación de tipos en pseudocódigo BPF.
  • Posibilidad de utilizar el script de configuración para construir.

Fuente: opennet.ru

Añadir un comentario