DTrace en Mac OSX Leopard

20/01/2008

En el post anterior hablábamos del funcionamiento experimental de ZFS en Mac OSX Leopard, hoy lo haremos sobre DTrace, una tecnología de instrumentación / debugging a bajo nivel del sistema que se estrenó en OpenSolaris hace ya casi 3 años. Pero, qué es DTrace y para qué nos sirve?

DTrace es una herramienta introducida en el Sistema Operativo Solaris 10 que nos puede ayudar a depurar problemas sistemáticos y/o difíciles de diagnosticar con las herramientas y mecanismos tradicionales. A través de la linea de comandos y de un lenguaje de scripting llamado “D”, DTrace nos ofrece una vista comprensible del comportamiento del sistema operativo (kernel y librerías del sistema por citar algunas partes del OS) y de las aplicaciones que se ejecutan sobre él.

Realmente realiza funciones similares a otras herramientas mas conocidas en Solaris, como por ejemplo truss, apptrace, prex y mdb. Sin embargo, DTrace integra todas sus funcionalidades en una única y poderosa herramienta, ‘dtrace‘ , que examina la actividad de usuario y del kernel de Solaris.

Hoy en día DTrace está considerada como la única herramienta disponible que es lo suficientemente segura para utilizarla en sistemas de producción (sistemas que funcionan sin reiniciar en mucho tiempo y que necesitan su disponibilidad 24×7) y además con un impacto insignificante en el rendimiento, llegando a un 0% de consumo de CPU cuando no se emplea.

DTrace fue el primer mayor componente del código de Solaris 10 que fue abierto a la comunidad opensource y que posteriormente fué adoptado por Apple para su inclusión en Mac OS X Leopard.

Para saber más, podéis consultar una presentación en castellano sobre DTrace en la página de la comunidad Hispana de OpenSolaris, en la página de Sun sobre DTrace, o en éste estupendo articulo de DTrace en Leopard.

Así pues, si abrimos un Terminal en OSX y nos autenticamos como root (o utilizando sudo, tendremos acceso a dtrace y a todas sus funcionalidades.

Después de consultar algunos post sobre DTrace en Leopard y de jugar un poco con los probes, me dí cuenta (realmente lo habia leído ya) de que había una aplicación que no se mostraba en la lista de procesos. Tenia arrancado Finder (obviamente), Mail, Safari, iTunes (escuchando el podcast del Geek Errante) y Transmission, entre otros procesos. Pero sorprendentemente, iTunes no salía en dicha lista, por mucho que me enganchara al proceso y utilizara otros probes:

sh-3.2# dtrace -n profile-1000'{ @[execname] = count(); }'
dtrace: description 'profile-1000' matched 1 probe
^C

notifyd 1
sshd 1
configd 3
fseventsd 4
GrowlHelperApp 9
DirectoryServic 13
ntpd 19
mds 21
Dock 34
dtrace 37
update 45
Mail 62
SystemUIServer 71
Finder 95
WindowServer 196
Transmission 763
Safari 1254
kernel_task 5090

Realizando un sencillo script para comprobar llamadas al sistema, únicamente Finder, Mail y Transmission sacaron los resultados esperados, sin embargo, aplicando el mismo script a los PID de iTunes o a Safari, no dieron ningún resultado.

Abrimos un editor de textos y escribimos lo siguiente:

pid$1:::entry /* Probamos las funciones del proceso unicamente */
{
@[probefunc]=count();
}

Guardamos el script como prueba.d y ahora vamos a listar los PID de iTunes y Safari:
sh-3.2# ps -aef | grep -i Safari.app
501 2410 109 0 3:26.63 ?? 14:15.25 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_2171410
sh-3.2# ps -aef | grep -i iTunes.app | grep -v iTunesHelper | grep -v grep
501 3704 109 0 0:17.81 ?? 0:58.62 /Applications/iTunes.app/Contents/MacOS/iTunes -psn_0_3060459

Ahora ejecutamos el script sobre los PID de Safari o de iTunes (mientras, cambia de canción o haz algo con la aplicacion iTunes o navega un poco con Safari):

sh-3.2# dtrace -qs prueba.d 109
^C
sh-3.2#

No aparece absolutamente nada. Aplicad el mismo proceso contra el PID de Finder o de otra aplicación y veréis como aparecen literalmente, cientos de llamadas al sistema. Si hacemos la prueba contra Safari, veremos que ocurre lo mismo, solo que encima -al menos en mis pruebas- uno de los cores de la CPU se puso al 100% y Safari tardaba muchísimo en recargar la página que le había ordenado. Supuestamente DTrace no debería producir este comportamiento, aunque también es verdad que la prueba que le hemos ordenado es un poco salvaje.

Consultando ésta entrada de Adam Leventhal, uno de los desarrolladores de DTrace en Sun, nos encontramos con que efectivamente Apple ha neutralizado la capacidad de realizar probes en alguna de sus aplicaciones.

Parece que a Apple no le gusta que miremos como funcionan sus aplicaciones por dentro…

About these ads

6 comentarios hacia “DTrace en Mac OSX Leopard”

  1. dordoka Dice:

    Brutal, me viene al pelo!! ;)

    Ya que estamos, has probado SGBDs sobre ZFS? Tengo curiosidad por ver si aumentaria el rendimiento al montar la BD sobre un pool zfs…

    Bueno, espero que todo te vaya ok :)

  2. Iban Nieto Dice:

    Hola dordoka!

    Pues si que lo he probado y la verdad es que el rendimiento de ZFS todavia no es espectacular con SGBDs, al menos en comparacion con UFS. De todas formas no lo he probado con raidZ, pero todo se andara ;-)

    Cuidate, salu2!!

  3. dordoka Dice:

    Juer que veloz! :)

    Bue, si me dejan las altas esferas, montare un pilotillo con opensolaris y posgres con zfs… y ya que lo mencionas, meto UFS en el bote para comparar.

    Ya te contare…

    Gracias!!

  4. ROXR Dice:

    Pues muchas gracias por la introducción a ZFS Alucard.

    He probado ZFS, en Mac OS 10.5.1. He montado un pool en single disk y por ahora hay cosa espectaculares como descomprimir un rar de 750 megas en 17 sec. mientras que en HFS+ lo mismo tarda mas de 28 sec. ¡Casi lo duplica!!!!. No es oro todo lo que reluce pues copiando grandes ficheros es algo mas lento que HFS, duplicar un file de 750 MB tardó 22 sec. contra 13 de HFS+.

    en fin en principio apunta buenas maneras este nuevo formato.

    saludos

  5. ROXR Dice:

    hola


  6. [...] – Landon Fuller, al rescate – Iban Nieto nos dice cómo hacerlo [...]


Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

%d personas les gusta esto: