This shows you the differences between two versions of the page.
so:laboratoare:resurse:oprofile [2013/01/31 21:57] 127.0.0.1 external edit |
so:laboratoare:resurse:oprofile [2013/02/19 09:10] (current) larisa.grigore |
||
---|---|---|---|
Line 3: | Line 3: | ||
Oprofile este un sistem de profiling disponibil ca modul pentru kernel-ul de Linux (și integrat în variantele mai noi ale acestuia), capabil să analizeze atât kernel-ul, cât și aplicațiile utilizator. Folosește tehnica de sampling și se bazează pe informațiile oferite de contoarele din CPU. | Oprofile este un sistem de profiling disponibil ca modul pentru kernel-ul de Linux (și integrat în variantele mai noi ale acestuia), capabil să analizeze atât kernel-ul, cât și aplicațiile utilizator. Folosește tehnica de sampling și se bazează pe informațiile oferite de contoarele din CPU. | ||
- | *vantaje**: | + | **Avantaje**: |
*overhead redus | *overhead redus | ||
*profiling al întregului sistem (inclusiv secțiuni "delicate" din kernel) | *profiling al întregului sistem (inclusiv secțiuni "delicate" din kernel) | ||
*prezentarea efectelor la nivel de hardware | *prezentarea efectelor la nivel de hardware | ||
- | *ezavantaje**: | + | **Dezavantaje**: |
*necesita drepturi de utilizator privilegiat (root) | *necesita drepturi de utilizator privilegiat (root) | ||
*nu poate fi folosit pentru cod compilat dinamic sau interpretat (Java, Python, etc) | *nu poate fi folosit pentru cod compilat dinamic sau interpretat (Java, Python, etc) | ||
Line 14: | Line 14: | ||
==== Arhitectura și modul de funcționare ==== | ==== Arhitectura și modul de funcționare ==== | ||
- | {{:laboratoare:lab12-oprofile.png|Arhitectura Oprofile}} | + | {{so:laboratoare:lab12-oprofile.png|Arhitectura Oprofile}} |
Procesoarele au niște countere speciale pe care le decrementează de fiecare dată când are loc un eveniment de un anumit tip (cache miss, tlb miss, branch miss-predictions, etc.). Când un astfel de counter se ajunge la valoarea zero, se trimite o întrerupere NMI care este interceptată de modulul de kernel al oprofile. Modulul de kernel resetează counterul la o valoare fixată de utilizator și salvează într-un buffer din kernel date despre locația care a generat întreruperea (proces/kernel, id-ul threadului, instrucținea curentă care a generat decrementarea counterului, etc.). | Procesoarele au niște countere speciale pe care le decrementează de fiecare dată când are loc un eveniment de un anumit tip (cache miss, tlb miss, branch miss-predictions, etc.). Când un astfel de counter se ajunge la valoarea zero, se trimite o întrerupere NMI care este interceptată de modulul de kernel al oprofile. Modulul de kernel resetează counterul la o valoare fixată de utilizator și salvează într-un buffer din kernel date despre locația care a generat întreruperea (proces/kernel, id-ul threadului, instrucținea curentă care a generat decrementarea counterului, etc.). | ||
Line 37: | Line 37: | ||
muttley:~# modprobe oprofile | muttley:~# modprobe oprofile | ||
</code> | </code> | ||
- | *au** | + | **sau** |
<code> | <code> | ||
muttley:~# opcontrol --init | muttley:~# opcontrol --init | ||
Line 55: | Line 55: | ||
student@muttley:~$ opcontrol --list-events | student@muttley:~$ opcontrol --list-events | ||
</code> | </code> | ||
- | *au** | + | **sau** |
<code> | <code> | ||
student@muttley:~$ ophelp | student@muttley:~$ ophelp | ||
Line 110: | Line 110: | ||
muttley:~# opcontrol --reset | muttley:~# opcontrol --reset | ||
</code> | </code> | ||
- | *au** se salvează bufferul curent în sesiunea cu numele ''sesiunea_anterioara'' | + | **sau** se salvează bufferul curent în sesiunea cu numele ''sesiunea_anterioara'' |
<code> | <code> | ||
muttley:~# opcontrol --save=sesiunea_anterioara | muttley:~# opcontrol --save=sesiunea_anterioara |