DTrace es un marco 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. Desarrollado originalmente para Solaris , desde entonces se ha lanzado bajo la licencia de distribución y desarrollo común (CDDL) en OpenSolaris y sus descendientes illumos , y se ha adaptado a varios otros sistemas similares a Unix.
Autor (es) original (es) | Bryan Cantrill , Adam Leventhal , Mike Shapiro ( Sun Microsystems ) |
---|---|
Desarrollador (es) | Oracle , Microsoft |
Versión inicial | Enero de 2005 |
Repositorio | github |
Escrito en | C |
Sistema operativo | Solaris , illumos , macOS , FreeBSD , NetBSD , Linux , [1] Windows [2] |
Tipo | Rastreo |
Licencia | CDDL , GPLv2 , UPL |
Sitio web | dtrace |
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 suspensión de OpenSolaris. Como un esfuerzo de la comunidad de algunos ingenieros centrales de Solaris para crear un Solaris verdaderamente de código abierto, el sistema operativo illumos se anunció a través del seminario web el jueves 3 de agosto de 2010, [3] como una bifurcación en la consolidación de OpenSolaris OS / Net, incluida la tecnología DTrace.
En octubre de 2011, Oracle anunció la migración de DTrace a Linux , [4] y en 2019 DTrace oficial para Fedora está disponible en GitHub . Varios años estuvo disponible una versión no oficial de DTrace para Linux, sin cambios en los términos de la licencia. [5]
En agosto de 2017, Oracle lanzó el código del kernel de DTrace con la licencia GPLv2 + y el código de espacio de usuario con las licencias 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 esfuerzo de OpenDTrace comenzó en github con código y documentación completa de los componentes internos del sistema. El esfuerzo de OpenDTrace mantiene la licencia CDDL original para el código de OpenSolaris con contribuciones de código adicionales que vienen bajo una licencia BSD 2 Cláusula . El objetivo de OpenDTrace es proporcionar una implementación portátil de DTrace independiente del sistema operativo que sea aceptable para todos los consumidores, incluidos macOS, FreeBSD, OpenBSD, NetBSD y Linux, así como los sistemas integrados.
Descripción
Sun Microsystems diseñó DTrace para brindar información operativa que permita a los usuarios ajustar y solucionar problemas de aplicaciones y del propio sistema operativo.
Los evaluadores escriben programas de rastreo (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 adicionales y variables específicas para el rastreo. Los programas D se asemejan 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 con una acción. Estas sondas son comparables a un punto de corte en la programación orientada a aspectos . Siempre que se cumpla la condición de la sonda, se ejecuta la acción asociada (la sonda "dispara"). Una sonda típica puede activarse cuando se abre un archivo determinado, se inicia un proceso o se ejecuta una determinada línea de código. Una sonda que dispara puede analizar la situación en tiempo de ejecución accediendo a la pila de llamadas y las variables de contexto y evaluando expresiones; luego puede imprimir o registrar cierta información, registrarla en una base de datos o modificar 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 cooperativamente la correlación de diferentes eventos.
Se ha tenido especial consideración para hacer que DTrace sea seguro de usar en un entorno de producción. Por ejemplo, hay un efecto de sonda mínimo cuando se está realizando el seguimiento y no hay impacto en el rendimiento asociado con ninguna sonda desactivada; esto es importante ya que hay decenas de miles de sondas de DTrace que se pueden habilitar. También se pueden crear nuevas sondas de forma dinámica.
Ejemplos de línea de comando
Los scripts de DTrace se pueden invocar directamente desde la línea de comandos, proporcionando uno o más sondeos 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 *: entrada {printf ("% s% s", execname, copyinstr (arg0)); } '# Recuento de llamadas al sistema por programa
dtrace -n 'syscall ::: entrada {@num [execname] = count (); } '# Syscall cuenta por syscall
dtrace -n 'syscall ::: entrada {@num [probefunc] = count (); } '# Recuento de llamadas al sistema por proceso
dtrace -n 'syscall ::: entrada {@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 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 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.
Plataformas compatibles
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 en tener su código fuente publicado bajo la Licencia de Desarrollo y Distribución Común (CDDL).
DTrace forma parte integral de las distribuciones de illumos e illumos , siendo OpenSolaris la continuación.
DTrace es una parte estándar de FreeBSD [9] y NetBSD . [10]
Apple agregó compatibilidad con DTrace en Mac OS X 10.5 "Leopard", incluida una GUI llamada Instrumentos . [11] En / usr / bin se incluyen más de 40 scripts de DTrace de DTraceToolkit, [12] incluidas herramientas para examinar la E / S de disco (iosnoop) y la ejecución de procesos (execsnoop). A diferencia de otras plataformas en las que se admite DTrace, Mac OS X tiene un indicador (P_LNOATTACH) que puede establecer un programa que no permite el seguimiento de ese proceso mediante la depuración de utilidades como DTrace y gdb . En la implementación original de Mac OS X DTrace, esto podría afectar el seguimiento de otra información del sistema, ya que las sondas no relacionadas que deberían activarse mientras un programa con este conjunto de indicadores se estaba ejecutando no lo harían. [13] La actualización de OS X 10.5.3 solucionó este problema unos meses más tarde. [14] Sin embargo, desde El Capitan, System Integrity Protection evita que el usuario utilice DTracing binario protegido por defecto.
El puerto de Linux de DTrace está disponible desde 2008; [15] el trabajo continúa activamente para mejorar y solucionar problemas. También hay una implementación activa en github . Hay disponibles proveedores centrales estándar (fbt, syscall, profile), además de un proveedor "instr" especial (algunos de los proveedores de Solaris aún no están disponibles a partir de 2013[actualizar]). La implementación de Linux DTrace es un módulo de kernel cargable , lo que significa que el kernel en sí no requiere modificación y, por lo tanto, permite que DTrace evite conflictos de licencias CDDL frente a GPL (en su forma fuente, al menos). Sin embargo, una vez que se cargue DTrace, la instancia del kernel se marcará como corrupta .
En 2007, un desarrollador de QNX Software Systems anunció en su blog que él y un colega estaban trabajando para incorporar DTrace en el sistema operativo QNX . [dieciséis]
Oracle Corporation agregó soporte beta de DTrace para Oracle Linux en 2011, [1] como un avance tecnológico en la versión 2 de Unbreakable Enterprise Kernel , que está bajo GPLv2 (el módulo del kernel de DTrace Linux 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]
Proveedores de idiomas y aplicaciones
Con un proveedor de idioma compatible , DTrace puede recuperar el contexto del código, incluida la función, el archivo de origen y la ubicación del número de línea. Además, la asignación de memoria dinámica y la recolección de basura pueden estar disponibles si el idioma lo admite. [21] Los proveedores de lenguaje admitidos incluyen lenguaje ensamblador [se necesita aclaración ] , C , C ++ , Java , Erlang , JavaScript , Perl , PHP , Python , Ruby , script de shell y Tcl .
Los proveedores de aplicaciones permiten que DTrace siga el funcionamiento de las aplicaciones a través de llamadas al sistema y dentro del kernel. Las aplicaciones que ofrecen los proveedores de aplicaciones DTrace incluyen MySQL , PostgreSQL , Oracle Database , Oracle Grid Engine y Firefox . [21] [22] [23]
Autores y premios
DTrace fue diseñado e implementado por Bryan Cantrill , Mike Shapiro y Adam Leventhal .
Los autores recibieron el reconocimiento en 2005 por las innovaciones en DTrace de InfoWorld y Technology Review . [24] [25] Dtrace ganaron el primer premio en The Wall Street Journal ' 2006 Premios competencia de innovación tecnológica s. [26] Los autores fueron reconocidos por USENIX con el premio Software Tools User Group (STUG) en 2008. [27]
Ver también
- eBPF : backend de seguimiento del kernel de Linux que proporciona un conjunto de características similares a DTrace [28] desde la versión 4.9 del kernel
- ftrace : un marco de seguimiento para el kernel de Linux, capaz de rastrear eventos de programación, interrupciones, E / S mapeadas en memoria, transiciones de estado de energía de la CPU, etc.
- ktrace : una utilidad BSD Unix y macOS que rastrea las interacciones entre el kernel y el programa
- ltrace : una utilidad de depuración de Linux, muestra las llamadas que hace una aplicación de usuario a bibliotecas compartidas
- strace : una utilidad de depuración para Linux, monitorea las llamadas al sistema utilizadas por un programa y todas las señales recibidas
- SystemTap : un lenguaje de secuencias de comandos y una utilidad que se utiliza para instrumentar las instalaciones de Linux.
- LTTng
- IBM ProbeVue
Referencias
- Cantrill, Bryan (febrero de 2006). "Oculto a plena vista" . Cola de ACM . 4 (1): 26–36. doi : 10.1145 / 1117389.1117401 . Consultado el 19 de diciembre de 2017 .
- Bryan M. Cantrill, Michael W. Shapiro y Adam H. Leventhal (junio de 2004). Instrumentación dinámica de sistemas de producción . Actas de la Conferencia Técnica Anual 2004 de USENIX . Consultado el 8 de septiembre de 2006 .
Notas
- ^ a b Wim Coekaerts (9 de octubre de 2011). "Probar dtrace" . blogs.oracle.com . Consultado el 15 de febrero de 2018 .
- ^ a b "Elementos internos del sistema operativo: análisis técnico profundo de las innovaciones del sistema operativo - BRK3365" . Microsoft Ignite Channel . 2018-10-08.
- ^ D'Amore, Garrett (3 de agosto de 2010). "Illumos - Hope and Light Springs Anew - Presentado por Garrett D'Amore" (PDF) . illumos.org . Consultado el 3 de agosto de 2010 .
- ^ "Oracle para llevar Dtrace a Linux" . Slashdot . 2011-10-04 . Consultado el 11 de noviembre de 2020 .
- ^ [1] "El DTrace original tiene la licencia CDDL de Sun (ahora Oracle). Los derechos de autor originales se dejan intactos. No se incorpora ningún código GPL en la versión para evitar conflictos legales".
- ^ Wielaard, Mark J. (14 de febrero de 2018). "dtrace para linux; Oracle hace lo correcto" . Blog de Mark J. Wielaard . Consultado el 14 de febrero de 2018 .
- ^ "DTraceToolkit" . Brendan Gregg . Consultado el 8 de junio de 2014 .
- ^ DTrace: seguimiento dinámico en Oracle Solaris, Mac OS X y FreeBSD . Libros de Safari . 2011. ISBN 0132091518. Consultado el 3 de enero de 2011 .
- ^ "Anuncio de FreeBSD 7.1-RELEASE" . 2009-01-06 . Consultado el 6 de enero de 2009 .
- ^ "Cambios en la fuente de NetBSD, 21 de febrero de 2010" .
- ^ "Mac OS X Leopard - Herramientas de desarrollo - Instrumentos" . Apple Inc. Archivado desde el original el 24 de octubre de 2007 . Consultado el 19 de octubre de 2007 .
- ^ "Mac OS X DTrace" . Apple Inc. Consultado el 31 de mayo de 2010 .
- ^ "Mac OS X y las sondas que faltan" . Leventhal, Adam H. 18 de enero de 2008 . Consultado el 20 de enero de 2008 .
- ^ "Apple actualiza DTrace" . Leventhal, Adam H. 7 de junio de 2008 . Consultado el 16 de junio de 2008 .
- ^ "Página de descarga de herramientas CRiSP" . Consultado el 2 de marzo de 2011 .
- ^ "¡DTrace en QNX!" . Blog de Oracle The Observation Deck . 8 de noviembre de 2007.
- ^ Zannoni, Elena; Van Hees, Kris (2012). DTrace en Linux (PDF) . Cumbre de colaboración de la Fundación Linux. Archivado desde el original (PDF) el 7 de julio de 2014 . Consultado el 5 de abril de 2012 .
- ^ Koch, Zeynep (12 de diciembre de 2012). "Anuncio: Disponibilidad general de DTrace para Oracle Linux" . Blog de Oracle Linux .
- ^ Código fuente del módulo DTrace para Linux
- ^ Pulapaka, Hari (11 de marzo de 2019). "DTrace en Windows" . Comunidad tecnológica de Microsoft .
- ^ a b DTrace: seguimiento dinámico en Oracle Solaris, Mac OS X y FreeBSD . Prentice Hall . 2011. p. 1152. ISBN 9780132091510.
- ^ "Documentación del programador de cuadrícula abierto / motor de cuadrícula" . Abra el Programador de cuadrícula . Consultado el 30 de diciembre de 2012 .
- ^ "DTrace - MDN" . Mozilla . Consultado el 30 de diciembre de 2012 .
- ^ "Software de rastreo en tiempo real" . Revisión de tecnología . MIT. 2005 . Consultado el 31 de marzo de 2007 .
- ^ McAllister, Neil (agosto de 2005). "La innovación está viva y coleando en 2005" . InfoWorld . IDG. Archivado desde el original el 23 de noviembre de 2005 . Consultado el 31 de marzo de 2007 .
- ^ Totty, Michael (septiembre de 2006). "Los ganadores son ..." The Wall Street Journal . Dow Jones & Company, Inc . Consultado el 31 de marzo de 2007 .
- ^ "Conferencia Técnica Anual de USENIX 2008 (USENIX '08)" . 2008 . Consultado el 26 de noviembre de 2008 .
- ^ "Herramientas de DTrace" . Consultado el 27 de noviembre de 2017 .
enlaces externos
- Herramientas de DTrace: ejemplos de DTrace de Brendan Gregg (2004)
- Página de FreeBSD DTrace: página de inicio de FreeBSD DTrace, incluye un tutorial y frases breves
- Libro de DTrace : incluye cientos de scripts de ejemplo
- Seguimiento dinámico con DTrace y SystemTap : libro gratuito con ejemplos y ejercicios
- Secuencias de comandos de libros de DTrace: secuencias de comandos de libros de DTrace en GitHub
- DTraceToolkit : una colección de scripts de DTrace
- Laboratorio práctico de DTrace : un curso paso a paso para aprender DTrace
- Tutorial de DLight : una utilidad de GUI interactiva para desarrolladores C / C ++ basada en la tecnología DTrace; parte de Oracle Solaris Studio antes de la versión 12.4
- Exploración de Leopard con DTrace : DTrace para depuración y exploración
- Charla técnica sobre DTrace impartida por Bryan Cantrill
- Oculto a plena vista , Sun Microsystems, por Bryan Cantrill
- dtrace.org aloja blogs de desarrolladores de software relacionados con DTrace
- Puerto oficial de Oracle DTrace a Linux:
- Los parches de DTrace se fusionaron con las versiones recientes del kernel de Linux
- Parte del espacio de usuario del puerto de DTrace a Linux
- Biblioteca de formato de tipo compacto utilizada por DTrace en Linux
- DTrace en Fedora