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 | ||