Por que Dtrace no afecta la performance del sistema

Dtrace posee sondas (probes en ingles) que pueden ser usadas en cualquier aplicativo "C" y "Java" (desde el nuevo componente DTRACE incluido en la JVM) para monitorear la ejecución de los mismos. Lentamente, un sinfin de servidores de software con Solaris están integrando las sondas de dtrace en su core funcional. El miedo inicial de un usuario nuevo, es que Dtrace, como cualquier otra herramienta de monitorización, impacte en la performance del sistema. Dtrace reemplaza las sondas con instrucciones "nop"  (instruccciones nulas que no consumen tiempo de ejecución ni otro recurso) cuando no está en uso. Cuando los usuarios usan típicamente las sondas, estas tienen un impacto mínimo sobre la performance. Un simple test para ver que pasa mientras se corre un proceso, es el siguiente:

(testapp.c)

#include <stdio.h>
#include <unistd.h>
#include <sys/sdt.h>

void func()
{
    DTRACE_PROBE(firsttestapp, query__func);
}
int main()
{
    int i = 0;
    for(i = 0; i < 100; ++i)
    {
        func();
        sleep(2);
        printf("returned from func call\\n");
        fflush(stdout);
    }
}

Y un simple proveedor de la sonda:

(mytestapp.d)

provider firsttestapp {
probe query__func();
};

En esta prueba. func será llamado cada 2 segundos. func tiene una sonda de dtrace que no hace nada. Esto se compila en Solaris de la siguiente manera:

$ cc -c -xarch=generic -g testapp.c

$ dtrace -G -32 -s mytestapp.d testapp.o

$ cc -xarch=generic -g mytestapp.o testapp.o -o testapp

Ahora corremos el aplicativo, sin dtrace, y analizamos lo que ocurre:

$ dbx ./testapp
(dbx) dis func
0x00011410: func       :        save     %sp, -96, %sp
0x00011414: func+0x0004:        nop
0x00011418: func+0x0008:        nop
0x0001141c: func+0x000c:        ret

Notar que la función "func" no tiene ninguna instrucción interna. Tiene solo 2 instrucciones nop. Si corremos la aplicación y el programa dtrace desde otra terminal que usa esta sonda, para ver que le pasa a la aplicación durante el runtime

bash-3.00# dtrace -l | grep testapp
61026 firsttestapp26498           testapp                              func query-func
# dtrace -n 'firsttestapp\*::func:query-func { @[probefunc] = count(); }'
dtrace: description 'firsttestapp\*::func:query-func ' matched 1 probe

(dbx) dis func
0x00011410: func       :        save     %sp, -96, %sp
0x00011414: func+0x0004:        nop
0x00011418: func+0x0008:        ta       %icc,0x00000038
0x0001141c: func+0x000c:        ret
0x00011420: func+0x0010:        restore
Ahora 1 de las instrucciones nop es reemplazada con la trap instruction "ta %icc,".
Esto demuestra que cuando las sondas son utilizadas, las instrucciones "nop" son reemplazadas con instrucciones trap (que permiten la monitorización). Cuando las sondas no están en uso, simplemente son instrucciones "nop". Esta es la razón por la cual las sondas no tienen impacto durante el runtime cuando no están en uso.
Esta demostración la encuentrán en Ingles en el siguiente link:

http://blogs.sun.com/basant/entry/performance_impact_of_dtrace_probes

Por último les dejo un par de links para que puedan interiorizarme más sobre DTRACE

http://es.opensolaris.org/Categorias/Dtrace/

http://blog.davidsm.com/2005/12/17/introduccion-a-dtrace-para-tontos-como-tu-y-como-yo-i/

Comentarios:

Pero como funciona en un procesador de intel/amd?

Enviado por cauco en octubre 11, 2008 a las 09:13 AM GMT-03:00 #

Cauco, a que te referis de como trabaja en un procesador intel/amd? Tanto la linea de intel/amd como los procesadores sparc (y no soy un experto en la materia, pero creo la mayoría de los procesadores) poseen instrucciones de tipo NOP, con lo cual lo dicho aca de dtrace aplica tanto para sparc como para intel/amd

Enviado por Ezequiel en octubre 11, 2008 a las 01:56 PM GMT-03:00 #

Me refiero a que no hay trap instruction en intel/amd.

Enviado por cauco en octubre 11, 2008 a las 02:15 PM GMT-03:00 #

No estaba al tanto que la arquitectura INTEL no posee instrucciones TRAP, siempre creí que si las tenía, sino, como maneja las ejecuciones TRAP de los unix?

Si tenes información para compartir al respecto, es bienvenida

Enviado por Ezequiel en octubre 11, 2008 a las 02:43 PM GMT-03:00 #

por otro lado, el codigo mostrado a modo de ejemplo se puede correr tanto en x86 como en sparc

Enviado por Ezequiel en octubre 11, 2008 a las 02:44 PM GMT-03:00 #

Claro, pero no tengo un opensolaris a mano para probar.

Enviado por cauco en octubre 12, 2008 a las 08:47 AM GMT-03:00 #

Enviar un comentario:
Los comentarios han sido deshabilitados.
About

Blog del programa Campus Ambassadors de Sun Microsystems para las universidades de Argentina.

Search

Archives
« abril 2014
lunmarmiéjueviesábdom
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    
       
Hoy