DTrace | ||
---|---|---|
Información general | ||
Tipo de programa | Tracing | |
Desarrollador | Sun Microsystems | |
Lanzamiento inicial | Enero de 2005 | |
Licencia | Common Development and Distribution License | |
Enlaces | ||
DTrace es un framework de rastreo y monitoreo abarcativo y dinámico creado por Sun Microsystems para diagnosticar problemas de kernel y aplicaciones en sistemas de producción en tiempo real. Originalmente desarrollado para Solaris, ha sido desde entonces lanzado bajo la licencia CDDL y ha sido portado a otros sistemas operativos tipo Unix.
DTrace puede ser utilizado para obtener una mirada global de un sistema que esté activo, brindando información tal como cantidad de memoria, tiempo de procesador, o recursos de red o del sistema de archivos que estén usando los procesos activos. También puede proveer información mucho más detallada, como el registro de los argumentos con los que una función específica está siendo llamada o una lista de los procesos que están accediendo a un archivo determinado.
DTrace está diseñado para proveer vistazos operacionales que le permitan a los usuarios afinar y resolver problemas de aplicaciones y del sistema operativo en sí.
Los programas de rastreo (también conocidos como script) son escritos utilizando lenguaje D no confundir con lenguaje de programación D. Este lenguaje es un subconjunto del lenguaje C, con funciones y variables de rastreo añadidas. Los programas en D son similares en estructura a los programas en AWK; consisten en una lista de una o más pruebas (puntos de instrumentación) y cada prueba está asociada con una acción. Si se cumple la condición para la prueba, se ejecuta la acción asociada (la prueba se "dispara"). Una prueba típica puede dispararse cuando un cierto archivo es abierto, un proceso es iniciado, o una cierta línea de código es ejecutada. Una prueba que se dispara puede analizar la situación de tiempo de ejecución accediendo al conjunto de llamadas y variables de contexto y evaluando expresiones; puede imprimir o registrar alguna información, guardarla en una base de datos o modificar variables de contexto. La lectura y escritura de variables de contexto permite a las pruebas pasarse información entre ellas, permitiéndoles analizar cooperativamente la correlación de distintos eventos.
Consideraciones especiales han sido tenidas en cuenta para hacer a DTrace seguro de usar en un entorno de producción. Por ejemplo, existe un mínimo efecto de prueba cuando el rastreo se está llevando a cabo, y no hay ningún impacto de rendimiento asociado a alguna prueba desactivada; esto es importante porque puede haber decenas de miles de pruebas de DTrace que pueden estar activas. También pueden crearse nuevas pruebas de manera dinámica.
Los scripts de DTrace pueden ser invocados directamente desde la línea de órdenes, proveyendo una o más pruebas y acciones como argumentos. Algunos ejemplos:
# Nuevos procesos con argumentos, dtrace -n 'proc:::exec-success { trace(curpsinfo->pr_psargs); }' # Archivos abiertos por procesos, dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }' # Cantidad de llamadas de sistema por programa, dtrace -n 'syscall:::entry { @num[execname] = count(); }' # Cantidad de llamadas de sistema por tipo de llamada, dtrace -n 'syscall:::entry { @num[probefunc] = count(); }' # Llamadas de sistema por proceso, dtrace -n 'syscall:::entry { @num[pid,execname] = count(); }' # Tamaño en disco por proceso, dtrace -n 'io:::start { printf("%d %s %d",pid,execname,args[0]->b_bcount); }' # Páginas paginadas por proceso, dtrace -n 'vminfo:::pgpgin { @pg[execname] = sum(arg0); }'
DTrace estuvo disponible por primera vez para su uso en noviembre de 2003, y fue formalmente lanzado como parte del sistema operativo de Sun Solaris en enero de 2005. DTrace fue el primer componente del proyecto OpenSolaris en tener su código fuente lanzado bajo la licencia CDDL (Common Development and Distribution License).
DTrace ha sido portado a FreeBSD como un sustituto de la utilidad ktrace.
Apple añadió soporte para DTrace en Mac OS X 10.5 "Leopard", incluyendo una interfaz gráfica de usuario denominada Instruments.
Hasta febrero de 2009, una versión para Linux estaba siendo desarrollada. La versión en desarrollo de DTrace compila y se ejecuta en muchos kernels de Linux, sin cambios al código fuente del kernel. Esto es deseable para asegurar la portabilidad, pero también para evitar conflictos de licencias (CDDL vs GPL). Pruebas de DTrace en el espacio de usuario son soportadas y el rastreo de llamadas de sistema funciona bien. Todavía se está trabajando en ordenar el lanzamiento y comenzar a generar casos de prueba y pruebas de carga.
DTrace fue diseñado e implementado por Bryan Cantrill, Mike Shapiro, y Adam Leventhal.