DTrace es un marco de trabajo de seguimiento dinámico integral creado originalmente por Sun Microsystems para solucionar problemas de kernel y aplicaciones en sistemas de producción en tiempo real. Originalmente desarrollado para Solaris , desde entonces se ha publicado bajo la Licencia de desarrollo y distribución común (CDDL) gratuita en OpenSolaris y su descendiente illumos , y se ha adaptado a varios otros sistemas similares a Unix .
DTrace se puede utilizar para obtener una descripción general global de un sistema en ejecución, como la cantidad de memoria, el tiempo de CPU, el sistema de archivos y los recursos de red utilizados por los procesos activos. También puede proporcionar información mucho más detallada, como un registro de los argumentos con los que se llama a una función específica o una lista de los procesos que acceden a un archivo específico.
En 2010, Oracle Corporation adquirió Sun Microsystems y anunció la discontinuación de OpenSolaris. Como parte del esfuerzo comunitario de algunos de los principales ingenieros de Solaris para crear un Solaris verdaderamente de código abierto, el sistema operativo illumos se anunció mediante un seminario web el jueves 3 de agosto de 2010 [3] , como una bifurcación de la consolidación de OpenSolaris OS/Net, que incluye la tecnología DTrace.
En octubre de 2011, Oracle anunció la adaptación de DTrace a Linux [ 4] y en 2019 la versión oficial de DTrace para Fedora está disponible en GitHub . Durante varios años estuvo disponible una versión no oficial de DTrace a Linux, sin cambios en los términos de licencia. [5]
En agosto de 2017, Oracle lanzó el código del kernel de DTrace bajo la licencia GPLv2+ y el código del espacio de usuario bajo la licencia GPLv2 y UPL. [6] En septiembre de 2018, Microsoft anunció que había portado DTrace de FreeBSD a Windows. [2]
En septiembre de 2016, el proyecto OpenDTrace comenzó en Github con código y documentación completa de los componentes internos del sistema. El proyecto OpenDTrace mantiene la licencia CDDL original para el código de OpenSolaris y las contribuciones de código adicionales se realizan bajo una licencia BSD 2 Clause . El objetivo de OpenDTrace es proporcionar una implementación portátil y agnóstica de DTrace que sea aceptable para todos los consumidores, incluidos macOS, FreeBSD, OpenBSD, NetBSD y Linux, así como para los sistemas integrados.
Sun Microsystems diseñó DTrace para brindar información operativa que permita a los usuarios ajustar y solucionar problemas de las aplicaciones y del propio sistema operativo.
Los evaluadores escriben programas de seguimiento (también denominados scripts) utilizando el lenguaje de programación D (que no debe confundirse con otros lenguajes de programación denominados "D" ). El lenguaje, inspirado en C , incluye funciones y variables añadidas específicas para el seguimiento. Los programas D se parecen a los programas AWK en su estructura; consisten en una lista de una o más sondas (puntos de instrumentación), y cada sonda está asociada a una acción. Estas sondas son comparables a un punto de corte en la programación orientada a aspectos . Siempre que se cumple la condición de la sonda, se ejecuta la acción asociada (la sonda se "activa"). Una sonda típica puede activarse cuando se abre un determinado archivo, se inicia un proceso o se ejecuta una determinada línea de código. Una sonda que se activa puede analizar la situación de tiempo de ejecución accediendo a la pila de llamadas y a las variables de contexto y evaluando expresiones; luego puede imprimir o registrar cierta información, registrarla en una base de datos o modificar las variables de contexto. La lectura y escritura de variables de contexto permite que las sondas se pasen información entre sí, lo que les permite analizar de forma cooperativa la correlación de diferentes eventos.
Se ha tenido especial cuidado para que DTrace sea seguro de usar en un entorno de producción. Por ejemplo, el efecto de la sonda es mínimo cuando se realiza el seguimiento y no hay impacto en el rendimiento asociado con ninguna sonda deshabilitada; esto es importante ya que hay decenas de miles de sondas DTrace que se pueden habilitar. También se pueden crear nuevas sondas de forma dinámica.
Los scripts de DTrace se pueden invocar directamente desde la línea de comandos, proporcionando una o más sondas y acciones como argumentos. Algunos ejemplos:
# Nuevos procesos con argumentos
dtrace -n 'proc:::exec-success { trace(curpsinfo->pr_psargs); }' # Archivos abiertos por el proceso
dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }' # Recuento de llamadas al sistema por programa
dtrace -n 'syscall:::entry { @num[execname] = count(); }' # Recuento de llamadas al sistema por syscall
dtrace -n 'syscall:::entry { @num[probefunc] = count(); }' # Recuento de llamadas al sistema por proceso
dtrace -n 'syscall:::entry { @num[pid,execname] = count(); }' # Tamaño del disco por proceso
dtrace -n 'io:::start { printf("%d %s %d",pid,execname,args[0]->b_bcount); }' # Páginas paginadas por el proceso
dtrace -n 'vminfo:::pgpgin { @pg[execname] = sum(arg0); }'
También se pueden escribir scripts que pueden alcanzar cientos de líneas de longitud, aunque normalmente solo se necesitan unas decenas de líneas para la resolución de problemas y el análisis avanzados. Se pueden encontrar más de 200 ejemplos de scripts de DTrace de código abierto en DTraceToolkit, [7] creado por Brendan Gregg (autor del libro DTrace [8] ), que también proporciona documentación y demostraciones de cada uno.
DTrace estuvo disponible para su uso por primera vez en noviembre de 2003 y se lanzó formalmente como parte de Solaris 10 de Sun en enero de 2005. DTrace fue el primer componente del proyecto OpenSolaris cuyo código fuente se publicó bajo la Licencia de Distribución y Desarrollo Común (CDDL).
DTrace es una parte integral de illumos y distribuciones relacionadas.
DTrace es una parte estándar de FreeBSD [9] y NetBSD . [10]
Apple agregó soporte para DTrace en Mac OS X 10.5 "Leopard", incluyendo una GUI llamada Instruments . [11] Más de 40 scripts de DTrace del DTraceToolkit están incluidos en /usr/bin, [12] incluyendo herramientas para examinar la E/S del disco (iosnoop) y la ejecución de procesos (execsnoop). A diferencia de otras plataformas en las que DTrace es compatible, Mac OS X tiene un indicador (P_LNOATTACH) que un programa puede configurar que no permite el seguimiento de ese proceso por parte de utilidades de depuración como DTrace y gdb . En la implementación original de DTrace para Mac OS X, esto podría afectar el seguimiento de otra información del sistema, ya que las sondas no relacionadas que deberían activarse mientras se ejecuta un programa con este indicador configurado no lo harían. [13] La actualización de OS X 10.5.3 abordó este problema unos meses después. [14] Sin embargo, desde El Capitan, la Protección de integridad del sistema impide al usuario realizar el seguimiento de binarios protegidos por DTracing de forma predeterminada.
El puerto Linux de DTrace ha estado disponible desde 2008; [15] el trabajo continúa activamente para mejorar y solucionar problemas. También hay una implementación activa en github. Los proveedores de núcleo estándar están disponibles (fbt, syscall, profile), más un proveedor "instr" especial (algunos de los proveedores Solaris aún no están disponibles a partir de 2013 [actualizar]). La implementación de DTrace para Linux es un módulo de kernel cargable , lo que significa que el kernel en sí no requiere ninguna modificación y, por lo tanto, permite a DTrace evitar conflictos de licencias CDDL vs. GPL (en su forma de código fuente, al menos). Sin embargo, una vez que se carga DTrace, la instancia del kernel se marcará como tainted .
En 2007, un desarrollador de QNX Software Systems anunció en su blog que él y un colega estaban trabajando en la incorporación de DTrace al sistema operativo QNX . [16]
Oracle Corporation agregó soporte beta de DTrace para Oracle Linux en 2011, [1] como una vista previa de la tecnología en la versión 2 de Unbreakable Enterprise Kernel , que se encuentra bajo GPLv2 (el módulo del kernel de Linux DTrace se lanzó originalmente bajo CDDL). [17] La disponibilidad general se anunció en diciembre de 2012. [18] [19]
El 11 de marzo de 2019, Microsoft lanzó su compilación de DTrace para las compilaciones internas de Windows 10. [20]
Con un proveedor de lenguaje compatible , DTrace puede recuperar el contexto del código, incluida la función, el archivo fuente y la ubicación del número de línea. Además, la asignación dinámica de memoria y la recolección de basura pueden estar disponibles si el lenguaje lo admite. [21] Los proveedores de lenguaje compatibles incluyen lenguaje ensamblador [ aclaración necesaria ] , C , C++ , Java , Erlang , JavaScript , Perl , PHP , Python , Ruby , script de shell y Tcl .
Los proveedores de aplicaciones permiten a DTrace seguir el funcionamiento de las aplicaciones a través de llamadas al sistema y en el núcleo. Las aplicaciones que ofrecen proveedores de aplicaciones DTrace incluyen MySQL , PostgreSQL , Oracle Database , Oracle Grid Engine y Firefox . [21] [22] [23]
DTrace fue diseñado e implementado por Bryan Cantrill , Mike Shapiro y Adam Leventhal .
Los autores recibieron reconocimiento en 2005 por las innovaciones en DTrace de InfoWorld y Technology Review . [24] [25] DTrace ganó el primer premio en el concurso Technology Innovation Awards de The Wall Street Journal de 2006. [26] Los autores fueron reconocidos por USENIX con el premio Software Tools User Group (STUG) en 2008. [27]