1 / 16

Investigarea contoarelor de referință de la nivelul nucleului Linux

Investigarea contoarelor de referință de la nivelul nucleului Linux. Emma – Camelia Mirică emma.mirica@gmail.com. As. Dr. Ing. Răzvan Deaconescu Ing. Daniel Băluță. Sesiunea de licenţă - Iulie 2012. Cuprins. Introducere Motivație Structura kref Captură Filtrare Procesare Concluzii

maude
Download Presentation

Investigarea contoarelor de referință de la nivelul nucleului Linux

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Investigarea contoarelor de referință de la nivelul nucleului Linux Emma – Camelia Miricăemma.mirica@gmail.com As. Dr. Ing. Răzvan Deaconescu Ing. Daniel Băluță • Sesiunea de licenţă - Iulie 2012

  2. Cuprins • Introducere • Motivație • Structura kref • Captură • Filtrare • Procesare • Concluzii • Întrebări Sesiunea de Licenţă - Iulie 2012

  3. Introducere • Contor de referință: • Număr ce reține câte referințe sunt către un anumit obiect • Metodă populară pentru administrarea memoriei • Garbage collection (Java, Python, PHP etc.) • Nucleul Linux • Reduce efortul de programare Sesiunea de Licenţă - Iulie 2012

  4. Motivație Sesiunea de Licenţă - Iulie 2012

  5. Structura kref kref_get kref_init kref_put Sesiunea de Licenţă - Iulie 2012

  6. Aplicația în ansamblu Spațiu kernel Spațiu user Modulul kref-count Scriptul ref_leaks Funcții kref și parametrii modulului captură filtrare procesare Statistici (valori, liste, tabele) Sesiunea de Licenţă - Iulie 2012

  7. Captură • Colectare într-un hash table și actualizare de informații utile despre structurile kref din nucleu • Id și nume proces de creare • Numărul de operații get și put • Hash table pentru contexte • În spațiul kernel, implementat în modulul kref-count Sesiunea de Licenţă - Iulie 2012

  8. Captură (2) • Primă fază de control prin parametrii modulului: • nokref • omode • leaks Sesiunea de Licenţă - Iulie 2012

  9. Filtrare • Filtrarea informațiilor colectate anterior după: • Valoare contor • Id proces • În spațiul kernel, implementat în modulul kref-count • Folosește procfs, adăugând un nou folder (/proc/kref_debug) cu intrările: • kref_filter: control filtrare • kref_0x<kref_addr>: rezultatele filtrării Sesiunea de Licenţă - Iulie 2012

  10. Modulul kref-count Funcție kref NU DA kref nou NU Actualizare informații Verifică nokref Ignoră Verifică leaks DA Șterge kref și intrare din /proc, dacă există NU Verifică omode Ignoră NU DA Verifică filtru NU Adaugă noul kref DA Șterge intrare din /proc, dacă există NU Verifică filtru Adaugă noua intrare în /proc/kref_debug Ignoră DA Adaugă noua intrare în /proc/kref_debug Sesiunea de Licenţă - Iulie 2012

  11. Procesare • Oferă statistici pe baza intrărilor din /proc/kref_debug • În user space, implementat în scriptul ref_leaks ref_leaks -h -v -s -w -a -t Intrări din /proc/kref_debug Statistici (valori, liste, tabele) -k -l -d -f -p -g Sesiunea de Licenţă - Iulie 2012

  12. Concluzii • Aplicație complet funcțională • Analiză dinamică a contoarelor • Utilă pentru dezvoltatorii nucleului Linux • Ușor de folosit • Îmbunătățiri pot fi făcute: • Noi opțiuni pentru scriptul ref_leaks • Noi parametri pentru modulul kref-count Sesiunea de Licență- 2012

  13. Cuvinte cheie • nucleul Linux • struct kref • modul de kernel • interceptare • script Python • procfs • captură • filtrare • procesare Vă Mulțumesc! Sesiunea de Licenţă - Iulie 2012

  14. Interceptarea funcțiilor kref • Versiuni mai mici de 3.3 • funcțiile kref sunt externe • kprobes • fără modificări în sursele nucleului • fără necesitatea compilării și instalării unui nou nucleu • ușor de folosit Sesiunea de Comunicări Științifice Studențești - 2012

  15. Interceptarea funcțiilor kref • Versiuni începând cu 3.3 • funcțiile kref sunt inline → kprobes • adăugarea apelurilor funcțiilor de hook în cadrul funcțiilor kref • adăugarea sursei kref_log.c • compilarea și instalarea unui nucleu nou Sesiunea de Licență - 2012

  16. Probleme posibile • Memory leaks: • Contorul nu mai ajunge la 0, deci funcția de eliberare a memoriei nu mai este apelată • Deadlock: • Se încearcă eliberarea unei resurse într-un ciclu infinit • Este posibil ca o altă resursă să fie deținută și să nu poată fi eliberată Sesiunea de Licență - 2012

More Related