Oracle ha publicado DTrace para Linux 2.0.0-1.14.

Se ha presentado una versión experimental de la herramienta de depuración dinámica DTrace para Linux 2.0.0-1.14, implementada como un proceso que opera en espacio de usuario, utilizando la subestructura eBPF y los mecanismos de trazado proporcionados por el núcleo de Linux. La funcionalidad de la implementación de DTrace basada en eBPF es similar a la primera implementación de DTrace para Linux, realizada en forma de un módulo del núcleo. El código del proyecto se distribuye bajo la licencia GPLv2.

La herramienta puede utilizarse con núcleos de Linux estándar que soportan BPF. Se requiere la biblioteca libctf con implementación del soporte al formato de depuración CTF (Compact Type Format), que forma parte del paquete binutils desde la versión 2.40, o la biblioteca libdtrace-ctf, portada desde Solaris. Se ofrecen opcionalmente dos parches para el núcleo 6.7 que permiten activar capacidades adicionales para obtener más datos sobre módulos y el núcleo.

La tecnología DTrace fue desarrollada para abordar problemas de trazado dinámico del núcleo y de aplicaciones finales en el sistema operativo Solaris. DTrace permite al usuario monitorear en detalle el comportamiento del sistema y realizar diagnósticos en tiempo real. Durante la depuración, DTrace no afecta el funcionamiento de las aplicaciones investigadas ni tiene impacto en su rendimiento, lo que permite realizar análisis en sistemas en funcionamiento al instante. Entre las fortalezas de DTrace se destaca el lenguaje de alto nivel D, similar a AWK, que facilita significativamente la creación de scripts de trazado en comparación con las herramientas ofrecidas para eBPF para escribir manejadores en lenguajes como C, Python y Lua con bibliotecas externas.

Principales características:

  • Proveedores disponibles:
    • cpc (Contador de Rendimiento de CPU) — obtención de información sobre el rendimiento.
    • dtrace — manejadores BEGIN, END y ERROR, que se ejecutan antes o después de otras verificaciones, así como al ocurrir errores.
    • fbt (Trazado de Límites de Funciones) — seguimiento de llamadas a funciones del núcleo.
    • lockstat — seguimiento del estado de los bloqueos.
    • pid — seguimiento de llamadas a funciones en procesos que operan en espacio de usuario.
    • proc — seguimiento de la actividad relacionada con los procesos, como inicio y finalización (fork, exec, exit, fault).
    • profile — almacenamiento de estadísticas de rendimiento a través de intervalos de tiempo especificados.
    • sdt, rawtp — trazado estático del núcleo (SDT — Statically Defined Tracing).
    • usdt: trazado estático de aplicaciones (USDT — Userspace Statically Defined Tracing)
    • sched — seguimiento de la distribución de recursos CPU.
    • sycall — seguimiento de las entradas y salidas de las llamadas al sistema.
  • Agregación de datos recolectados: posibilidad de aplicar funciones agregadas (avg, count, llquantize, lquantize, max, min, quantize, stddev y sum) y acciones agregadas (clear, normalize, printa). Soporte para guardar los resultados de las funciones agregadas en arreglos ordinarios y asociativos.
  • Soporte para el trazado especulativo, que permite rastrear efímeramente datos, decidiendo cuáles deben fijarse en el búfer de trazado y cuáles descartar. Funciones disponibles: speculation, speculate, commit y discard.
  • Soporte para variables globales y locales, TLS (Thread-Local Storage), arreglos asociativos y cadenas.
  • Provisión de variables integradas: arg0 — arg9, args[], caller, curcpu, curthread, epid, errno, execname, gid, id, pid, ppid, probefunc, probemod, probename, probeprov, stackdepth, tid, timestamp, ucaller, uid, uregs[], ustackdepth, walltimestamp.
  • Soporte para acciones: exit, freopen, ftruncate, mod, printa, printf, raise, 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.
  • Disponibilidad de contadores de datos que no llegan a los búferes de trazado.
  • Soporte para la compilación de scripts de trazado en el lenguaje D en forma de programas BPF.
  • Precompilación de funciones BPF para llamadas a bibliotecas.
  • Opción bpflog para obtener un registro de la verificación de los programas BPF cargados.
  • Generación dinámica de código y precompilación de código para reutilización en programas BPF.

Cambios en la nueva versión:

  • En el proveedor pid, que se aplica para rastrear procesos en el espacio de usuario, se ha añadido soporte para el seguimiento de la ejecución de instrucciones según su desplazamiento en el código.
  • Se ha añadido soporte para el uso de funciones stack() y ustack() para agregar datos recolectados.
  • Posibilidad de eliminar elementos de cualquier tipo en arreglos asociativos asignando un literal 0.
  • Se ha agregado la acción print para la salida de datos estructurados con anotaciones de tipos.
  • Se han añadido nuevas funciones integradas cleanpath(), d_path() y link_ntop().
  • Se agregó el parámetro «-xcpu», que permite vincular las comprobaciones a CPUs específicos.
  • Se añadió el parámetro «-xlockmem» para limitar el tamaño de la memoria.
  • Se ha asegurado la posibilidad de guardar los datos de trazado de procesos (USDT) entre reinicios de dtprobed.
  • Soporte para el mecanismo BTF (BPF Type Format), que proporciona información para la verificación de tipos en pseudocódigo BPF.
  • Posibilidad de usar el script configure para la compilación.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster