intro to dtrace

Download Intro to DTrace

If you can't read please download the document

Upload: iban-nieto-castillero

Post on 13-Jun-2015

1.589 views

Category:

Technology


0 download

DESCRIPTION

Introduccion a DTrace (2007)

TRANSCRIPT

  • 1. Introduccin a DTrace Iban Nieto Castillero Comunidad OpenSolaris OpenJavaDay - Mayo de 2007 z www.aulaunix.org

2. dtrace:::BEGIN sta presentacin es una introduccin a DTrace y forma parte de la documentacin de AulaUnix (http://www.aulaunix.org). BIENVENIDOS A TOD@S !! 3. dtrace:::BEGIN { trace(De qu vamos a hablar?); exit(0); } - Qu es DTrace - A quien est dirigido - Como funciona - Probes, providers, modules... - CHIME, un interfaz grfico para DTrace - Preguntas iniciales - Referencias 4. Qu es DTrace? - DTrace es una herramienta de depuracin introducida en los sistemas operativos Solaris 10 y OpenSolaris que nos puede ayudar a depurar problemas sistemticos y/o difciles de diagnosticar con las herramientas y mecanismos tradicionales.- Instrumentacin dinmica que examina la actividad de espacio de usuario (user-level) y del kernel de Solaris (kernel-level), ofrecindonos una vista comprensible del comportamiento del sistema operativo y de las aplicaciones que se ejecutan sobre l.- Permite varios cientos de miles de puntos de instrumentacin ( probes ), contando ya con ms de 30000 . - Poderoso lenguaje de programacin D (similar a C y awk, interpretado) que nos permite instanciarprobes - Considerada actualmente como la nica herramienta disponible que es lo suficientemente segura para utilizar en sistemas de produccin, adems con un insignificante impacto en el rendimiento (0% cuando no se emplea). 5. Qu es DTrace? - Integra en una nica herramienta funciones similares a las de truss, apptrace, prex y mdb (entre otros): 6. Qu es DTrace? - Nos sirve para buscar errores en el software, probando qu es problema y qu no - Nos sirve para medir la magnitud del problema - Observacin detallada: dispositivos como discos actividad de red - Observacin de aplicaciones, tanto del sistema como de terceros - Captura de datos de profiling para anlisis de rendimiento - Si existe un problema de latencia en algn lado, DTrace puede ayudar a encontrarlo 7. Qu es DTrace? - Ejemplo #1 - Probando nuevos procesos que se ejecutan en el sistema: 8. Qu es DTrace? - Ejemplo syscall con truss - truss slo examina 1 proceso a la vez y adems ralentiza el objetivo a probar 9. Qu es DTrace? - Ejemplo syscall con DTrace - DTrace permite probar todos los procesos y adems NO ralentiza! 10. Dtrace es, en pocas palabras: - Una herramienta - Un intrprete de lenguaje de programacin - Un framework de instrumentacin 11. A quin est dirigido? - Cualquiera puede emplear DTrace desde el principio utilizando la documentacin de los scripts ya escritos deDTraceToolkit los scripts de una nica lnea documentados enSolaris Performance and Tools . Al principio no necesitaremos escribir nuestros propios scripts, pero a medida que vayan surgiendo necesidades, encontraremos que pueden probar una mayor eficacia a la hora de resolver problemas en nuestros entornos. - No es necesario tener conocimientos del kernel para estudiar el cdigo a nivel de usuario.- Existen muchosprovidersde alto nivel que pueden ser diseados a medida para proveernos de una documentada abstraccin del kernel. Dichosprovidershacentracingal kernel mucho mejor y ms fcilmente de lo que se podamos creer inicialmente.- Comprender el kernel de Solaris es necesario para escribir scripts DTrace avanzados para los que de momento no existe unproviderde alto nivel. Por ejemplo,para examinar la actividad TCP/IP en detalle. 12. A quin est dirigido? - Desarrolladores de kernel: DTrace recoge datos de casi cualquier funcin de kernel, en cuestin de nanosegundos, incluyendotimestamp . Tambin pueden analizar problemas de drivers, incluso en tiempo de arranque del sistema. - Administradores de sistemas: con DTrace pueden buscar y analizar problemticas que antes eran imposibles muy difciles de encontrar - Administradores de bases de datos: pueden analizar el rendimiento ythroughputentre todos los componentes del sistema - Administradores de Seguridad: pueden auditar casi cualquier parte del sistema, as como descifrar problemas demalware 13. Cmo funciona? - El lenguaje de programacin D est basado en el lenguaje C, as que algnconocimiento inicial de ste lenguaje puede ayudar a su entendimiento.- D es bastante ms fcil que C ya que slohay que aprender un pequeo nmero de funciones y tipo de variables para ser capaz de escribir poderosos scripts. Adems los programas en D tambin son similares a los programas escritos en awk, lo cual puede resultar de ayuda - En D no existen estructuras de control ( if o bucles como while, for...), aunque de todas maneras los predicados nos permiten poner condiciones para ejecutar cdigo. 14. Cmo funciona? - Ejemplo script en D Imprimir por pantalla las llamadas al sistema que realiza la shell bash (bash.d): #!/usr/sbin/dtrace -s syscall:::entry /execname==?bash?/ { printf(?%s llamada ?,probefunc); } Descripcin del cdigo: syscall:::entrydescripcin del probe / predicado / { printf(?%s llamada ?,probefunc);acciones } Cuando un probe comienza la accin es ejecutado si el predicado se evala como true 15. Cmo funciona? En sta figura se ilustra el funcionamiento de DTrace: el comando dtrace(1M) utiliza una librera llamada libdtrace como punto de entrada de varios proveedores ( providers ) dentro del kernel de Solaris; cada uno de ellos nos ofrece una vista lgica de algunos subsistemas del kernel. 16. Cmo funciona? - Cuando se ejecutan los programas escritos en D son compilados al vuelo enbytecodesque pueden ser interpretados dentro del kernel.- La mquina virtual de DTrace ejecutalosbytecodespara garantizar que sean seguros.- Si el cdigo es seguro y tenemos los suficientes privilegios, el cdigo se parchea dentro del kernel dinmicamente yes ejecutado como cdigo de kernel .- ste es el por qu los probes que no estn activos no pueden crear ninguna sobrecarga. 17. Qu son losprobesyproviders ? - Unprobees un punto de instrumentacin que puede ser seguido por DTrace.Por ejemplo, llamamos el probe "syscall:read:entry" cuando invocamos la llamada del sistema (syscall) read(2) y se llama a "syscall::read::return" cuando se completa la syscall read(2).Algunos ejemplo de probes: -syscall::read::entry Comienzo de llamada al sistema read() -proc:::exec-success Un proceso ha sido creado correctamente -io:::start Se ha producido una E/S -io:::done Se ha terminado una E/S - Ejecutando la instruccindtrace -lpodremos ver la lista deprobes . - Condtrace -ntomamos el nombre de la prueba y comienza a realizar el trace: dtrace -n syscall::exece:return 18. Qu son losprobesyproviders ? (continuacin) - Existen 4 componentes para el nombre delprobe :provider:module:function:name(proveedor:mdulo:funcin:nombre), de manera que posteriormente podamos reconocer fcilmente losprobesque puedan ser de nuestro inters. - Elprovider proveedor es una coleccin de ciertosprobes , muy similar a una coleccin de funciones. Por ejemplo, elprovidersyscall nos ofrece una seriedeprobespara la entrada y retorno de todas las llamadas al sistema.- Los mdulos corresponden a los mdulos de kernel de Solaris. En caso de crear nuestros propiosprobesdentro de las aplicaciones, el mdulo puede ser la clase el cdigo del mdulo en el que definimos elprobe . Si elprobecorresponde a una ubicacin especfica, el nombre del mdulo es donde se localiza. - Las funciones son los nombres de las funciones del cdigo en las que estn situados losprobes .- El nombre es el componente final del probe nos da una idea de cuando se ejecuta elprobe , como por ejemplo BEGIN END 19. Es seguro DTrace? Principios de diseo: - Slo se pueden realizar probes seguros - No hay recursividad para los probes - Mquina virtual en kernel - Previene almacenar en memoria arbitraria del kernel - No hay loops en el kernel - No se permite ejecutar instrucciones ilegales mientras se est en kernel - No hay divisin por cero - Proteccin E/S de espacio de memoria - Previene cargas desde memoria sin mapear 20. Es seguro DTrace? (continuacin) Para poder emplear DTrace tenemos que tener al menos uno de los siguientesprivilegios (slo ciertos grupos de privilegios permiten funcionar a Dtrace) : -dtrace_kernelpermite acceso a nivel de kernel - dtrace_procpermite realizarprobesen los procesos en los que el usuario tiene permisos. -dtrace_userpermite a un usuario tener acceso a llamadas al sistema ( syscall ) y a ciertos perfiles de proveedores ( providers ) Si no ests seguro de los privilegios que tienes actualmente, ejecutando el comando 'ppriv $$', obtendrs los privilegios que te ha proporcionado tushell . Una forma de obtener permisos DTrace es aadir la siguiente lnea a /etc/user_attr (reemplaza con tu usuario): iban::::defaultpriv=basic,dtrace_proc,dtrace_kernel 21. Ejemplos - La mejor coleccin de ejemplos la podemos encontrar en DTraceToolkit.Brendan Gregg, -su autor- ha documentado la mayor coleccin de scripts hasta el momento. - Si tienes instalado Solaris Express Developer Edition, en el directorio /usr/demo/dtrace encontrars ms scripts.- Tambin puedes usar tu navegador web para verlos todos, escribiendo la URL:file:///usr/demo/dtrace/index.htmlen la barra de direccin. NOTA: Al final de la ponencia podremos ver algunos ejemplos con DtraceToolkit, pues es la mayor coleccin a todos los niveles de scripts DTrace 22. CHIME Un interfaz grfico para DTrace CHIMEes una herramienta grfica que nos permite revisar visualmente lo que hace DTrace. Es una alternativa a las utilidades de lnea de comandos (como por ejemplo intrstat) CHIME es ms intuitivo y potencialmente ms til que la interfaz de comandos; en particular, la habilidad de visualizar los datos en tiempo real (de forma visual) aade una dimensin que nos faltaba para la observacin del sistema: 23. CHIME Un interfaz grfico para DTrace 24. CHIME Un interfaz grfico para DTrace - Para ejecutar CHIME es necesario tener al menos el build 35 de Solaris Nevada. - La ubicacin de los binarios de CHIME es/opt/OSOL0chime/bin/chime - Debemos tener suficientes privilegios DTrace. sto no es problema si somos root, sin embargo quizs necesitemos ejecutar la instruccinxhost +apara que la aplicacin Java de CHIME puede funcionar sobre nuestro DISPLAY. Una mejor forma de obtener permisos DTrace es aadir la siguiente lnea a/etc/user_attr(reemplaza con tu usuario): iban::::defaultpriv=basic,dtrace_proc,dtrace_kernel El privilegiodtrace_kernelnos dar acceso de slo lectura a la mquina. Necesitaremos volver a logearnos en el sistema si queremos que los efectos se apliquen. 25. CHIME Un interfaz grfico para DTrace Una caracterstica importante de CHIME es la habilidad de aadir nuevosdisplays(vistas) sin tener que recompilar (las vistas se describen en ficheros XML). Su sintaxis nos permite que los valores de cada programa DTrace puedan ser sustituidos detrs de cada escenario, permitiendo al usuario de CHIME seleccionar de una gama descrita las modificaciones del programa sin tener que saber nada sobre DTrace.CHIME se puede bajar desde lapgina del proyecto chime-project .Si creas una vista til para CHIME, por favor comprtela endtrace-discussjunto con cualquier ancdota relacionada y as podrn agregarla a la pgina del proyecto para que otros puedan usarla :-) 26. CHIME Un interfaz grfico para DTrace Ejemplos de llamadas al sistema y E/S de dispositivos: 27. Preguntas iniciales - Existe DTrace para otros sistemas operativos? No, de momento no. DTrace fue inventado por los ingenieros de Sun MicrosystemsBryan Cantrill ,Mike ShapiroyAdam Leventhalnicamente para Solaris 10 y OpenSolaris. Hay un proyecto en va de desarrollo para portar DTrace a FreeBSD, que adems ya est a un nivel avanzado, ejecutando algunas de las principales caractersticas. A muchos de los ingenieros de DTrace les gustara verlo en funcionamiento en otros sistemas operativos, de hecho apoyan que DTrace sea portado a otras plataformas.De todas maneras, Apple yaanuncique DTrace tendr mucha influencia en las herramientas de desarrollo para Mac OS X 10.5, ms conocido como "Leopard", previsto para Otoo del 2007. Dtrace NO est disponible para Solaris 9 y no hay planes de que lo est en el futuro 28. Preguntas iniciales - No se haba inventado ya algo similar hace 20 aos para los mainframes? No, DTrace puede probar dinmicamente cualquier funcin de entrada/retorno en un kernel en funcionamiento (unos 36.000 probes); incluso cualquier funcin en el cdigo de espacio de usuario y libreras (por ejemplo, mozilla y sus libreras suman unas 100.000 probes); instrucciones a nivel de usuario (sobre los 200.000 probes solo para la shell Bourne) y sin perder rendimiento. - Existen libros sobre DTrace? S, existen de momento dos libros excelentes sobre Dtrace: The DTrace Guide es la mejor referencia para DTrace que cubre el lenguaje, providers y montones de ejemplos ms. Fue escrito por los ingenieros de DTrace y es una referencia obligada. Solaris Performance and Tools demuestra el uso de DTrace para la observacin y el depurado del rendimiento. Fu escrito por Brendan Gregg (autor del DTraceToolkit), Richard McDougall y Jim Mauro (autor de Solaris Internals) . 29. Referencias Puedes encontrar extensa informacin sobre DTrace en los siguientes enlaces: Comunidad OpenSolaris - DTrace http://www.opensolaris.org/os/community/dtrace/ Sun BigAdmin http://www.sun.com/bigadmin/content/dtrace/ DTraceToolkit http://www.opensolaris.org/os/community/dtrace/FAQ/dtracetoolkit 30. dtrace:::END Muchas gracias por asistir a sta presentacin