03.06.2013 Views

Un modello integrato control-flow e data-flow per il rilevamento ...

Un modello integrato control-flow e data-flow per il rilevamento ...

Un modello integrato control-flow e data-flow per il rilevamento ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

4.2. Introduzione a DTrace 55<br />

1 static int<br />

2 walk(const dtrace_agg<strong>data</strong>_t *<strong>data</strong>, void *arg)<br />

3 {<br />

4 dtrace_aggdesc_t *aggdesc = <strong>data</strong>->dtada_desc;<br />

5 dtrace_recdesc_t *ustackrec, *<strong>data</strong>rec, *namerec, *argrec;<br />

6 uint64_t *ustack, *pc, timestamp;<br />

7 char *name;<br />

8<br />

9 /* [...] */<br />

10<br />

11 /* Nome system call */<br />

12 namerec = &aggdesc->dtagd_rec[1];<br />

13 name = <strong>data</strong>->dtada_<strong>data</strong> + namerec->dtrd_offset;<br />

14<br />

15 /* Stack */<br />

16 ustackrec = &aggdesc->dtagd_rec[2];<br />

17 if (ustackrec->dtrd_action != DTRACEACT_USTACK)<br />

18 fatal("aggregation key is not a ustack\n");<br />

19 ustack = (uint64_t *)(<strong>data</strong>->dtada_<strong>data</strong> + ustackrec->dtrd_offset);<br />

20<br />

21 /* [...] */<br />

22 }<br />

Figura 4.6: Snippet di walk().<br />

ustack(), si procederà come in Figura 4.6. A questo punto è possib<strong>il</strong>e processarli<br />

in qualsiasi modo si voglia.<br />

4.2.2 Note riguardo a DTrace<br />

I primi es<strong>per</strong>imenti con i consumer custom sono stati fatti in ambiente Mac OS X,<br />

fino a quando non è emerso che, <strong>per</strong> motivi ancora non del tutto chiari, la funzione<br />

ustack() “<strong>per</strong>deva <strong>per</strong> strada” dei frame. Non solo, i frame <strong>per</strong>si non erano gli<br />

stessi su piattaforma Intel e su piattaforma PowerPC. Inizialmente si è sospettato<br />

che questo accadesse a causa di ottimizzazioni introdotte dal comp<strong>il</strong>atore (del tipo<br />

di -fomit-frame-pointer), ma andando a guardare <strong>il</strong> codice macchina generato<br />

si è visto che non era questo <strong>il</strong> caso. Si è dunque spostato lo sv<strong>il</strong>uppo su Solaris<br />

(OpenIndiana 151a), dove nessun stack frame viene <strong>per</strong>so. Questo comportamento<br />

verrà discusso a breve con gli sv<strong>il</strong>uppatori di DTrace.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!