Debugging & Time v Linuxovém kernelu David Majda prezentace na předmět Linux Kernel (SW075) na MFF UK 12. 12. 2005 všechny.

Slides:



Advertisements
Podobné prezentace
CIT Paměti Díl X.
Advertisements

Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
Přednáška 11 Jiří Šebesta
D03 - ORiNOCO RG-based Wireless LANs - Technology
Módy bezdrátového připojení
13AMT Procesory I. Lecture 2 Ing. Martin Molhanec, CSc.
Komunikace periférii.
Panasonic Electric Works Czech s.r.o. Slide 1 Přehled PLC Software splňující normu IEC
ALTERA Cyclone II 4608 – LE až 1152 Kbitů RAM konfigurace pomocí sériového rozhraní podpora více I/O standardů až 4 PLL až 16 globálních hodin podpora.
PROGRAM PRO VÝUKU T ČLÁNKU
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Algoritmizace a programování
Kontakty Webpage přednášky: – Slajdy (MS PowerPoint): –ftp://ulita.ms.mff.cuni.cz/predn/PRG017 Technické.
Téma:II-I/1 Dat.komun.-ovládání
Vzdělávací materiál / DUMVY_32_INOVACE_02B14 Příkazový řádek: obsah souborů PŘÍKLADY AutorIng. Petr Haman Období vytvořeníLeden 2013 Ročník / věková kategorie3.
SmartPhone start - Apple iPhone
Tomáš Lín Tomáš Lín, SCADA Servis s.r.o.

Přístupová práva, maska přístupových práv Jiří Hořejší.
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Seminář 8 VLAN routing Srovnání směrování tradičního a VLAN routingu
Operační systémy Přednášky pro výuku předmětu Operační systémy Ing. Antonín Vaněk, CSc. DFJP, Univerzita Pardubice září 2003.
Load Balancer RNDr. Václav Petříček Lukáš Hlůže Václav Nidrle Přemysl Volf Stanislav Živný
Druhé laboratorní cvičení
© 2006 Cisco Systems, Inc. All rights reserved.Cisco PublicITE I Chapter 6 1 Inter-VLAN Routing LAN Switching and Wireless – Chapter 6.
Síťové programování Informační technologie - praxe SPŠE V úžlabině Jan Klepal, Mgr. Radka Müllerová Verze 2.
1 © 2004, Cisco Systems, Inc. All rights reserved. CCNA 2 v3.1 Module 2 Introduction to Routers.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
13AMP 2. přednáška Ing. Martin Molhanec, CSc.. Stav procesu (kontext) Stav procesu je úplná informace, kterou je nutné uschovat při přerušení procesu,
Signály, jejich význam a použití Jan Kolařík. Co to je Signály fungují jako softwarová přerušení Po přijetí signálu může proces nebo skript provést nějakou.
1 © 2004, Cisco Systems, Inc. All rights reserved. CCNA 2 v3.1 Module 3 Configuring a Router.
Tento výukový materiál vznikl v rámci Operačního programu Vzdělávání pro konkurenceschopnost Číslo projektu: CZ.1.07/1.5.00/ Číslo materiálu: VY_32_INOVACE_PSK-4-09.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
OSNOVA: a) Příkazy pro větvení b) Příkazy pro cykly c) Příkazy pro řízení přenosu d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Kontakty Webpage přednášky: – Slajdy (MS PowerPoint): –ftp://ulita.ms.mff.cuni.cz/predn/PRG017 Technické.
LINUX - UBUNTU Roman Danel VŠB TU Ostrava, HGF. Informace $ man příkaz $ info příkaz $ apropos subject.
UNIX Shell skripty Roman Danel VŠB TU Ostrava, Hornicko – geologická fakulta.
Dynamic SQL P. Částek. Dynamic SQL Embedded SQL je překládaný preprocesorem => za běhu nelze nechat uživatele rozhodovat o vzhledu samotných SQL příkazů.
ECMAScript 5 – Strict mode
Seminář
Procesor Renesas H8S/2633F.
Pracovní list - pro tisk Vloženo z stress.pptx Začátek.
Kontakty Webpage přednášky: – Slajdy (MS PowerPoint): –ftp://ulita.ms.mff.cuni.cz/predn/PRG017 Technické.
1/28 PB153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ Vlákna 06.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Seminář - routing Směrování Pojmy IP adresa
Základy operačních systémů Meziprocesová komunikace a synchronizace Jakub Yaghob.
Obchodní akademie a Střední odborná škola, gen. F. Fajtla, Louny, p.o. Osvoboditelů 380, Louny Číslo projektu CZ.1.07/1.5.00/ Číslo sady 03Číslo.
Kontakty Webpage přednášky: – Slajdy (MS PowerPoint): –ftp://ulita.ms.mff.cuni.cz/predn/PRG017 Technické.
Operační systém GNU Linux Příkazy pro práci se soubory.
Kontakty Webpage přednášky: – Slajdy (MS PowerPoint): –ftp://ulita.ms.mff.cuni.cz/predn/PRG017 Technické.
Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr. Jan Rozsíval. Slezské gymnázium, Opava, příspěvková organizace. Vzdělávací materiál.
B AT SOUBORY Jednoduché skripty ve Windows. O PAKOVÁNÍ PŘÍKAZU OPAKUJ. off for /L %i in ( ) do ( echo *** echo %i echo *** ) Zápis: Opakuj.
Počítačová bezpečnost Cvičení 1: Zabezpečení startu PC © Milan Keršláger
Unix a Internet 9. Samba © Milan Keršlágerhttp:// Obsah: ●
Uvedení autoři, není-li uvedeno jinak, jsou autory tohoto výukového materiálu a všech jeho částí. Tento projekt je spolufinancován ESF a státním rozpočtem.
Počítačová bezpečnost Cvičení 1: Start počítače IBM PC © Milan Keršláger
Programování mikropočítačů Platforma Arduino
Soubor Soubor v informatice označuje pojmenovanou sadu dat uloženou na nějakém datovém médiu, se kterou lze pracovat nástroji operačního systému jako.
Seminář - routing Směrování Pojmy IP adresa
Výukový materiál zpracován v rámci projektu
Programování mikropočítačů
Operační systémy 9. Spolupráce mezi procesy
Segmentace Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
přerušení (instrukční cyklus, obsluha) vztahy mezi tématy
Práce s procesy Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí Autor:
Application Layer Functionality and Protocols
Transkript prezentace:

Debugging & Time v Linuxovém kernelu David Majda prezentace na předmět Linux Kernel (SW075) na MFF UK všechny informace v prezentaci se týkají jádra

Debugging

3 Kernel Debugging Kdy je třeba ladit kernel? –jsem kernelový vývojář –píšu driver –kernel mi padá a nevím proč –chci vědět, jak to funguje uvnitř Kdy není třeba ladit kernel? –jsem-li normální programátor a kernel považuju za fungující černou skříňku implementující ±UNIXové API

4 printk() výpis hlášení a chyb do konzole, dmesg a syslogu analogie printf() – stejné použití, obdobná syntaxe formátovacího řetězce lze používat i v interrupt kontextu 1kB buffer – přetečení je problém uživatele zápis do /dev/kmesg způsobí printk() parametry jádra –earlyprintk=vga|serial[,ttySn[,baudra te]] –time – prefixuje výpisy časem „You will know when you are a real kernel hacker when you start typoing printf as printk in your user programs :)“ /usr/src/linux/Documentation/kernel-hacking.tmpl

5 printk() nastavení úrovně výpisu: použití: /* system is unusable */ #defineKERN_EMERG" " /* action must be taken immediately */ #defineKERN_ALERT" " /* critical conditions */ #defineKERN_CRIT" " /* error conditions*/ #defineKERN_ERR" " /* warning conditions */ #defineKERN_WARNING" " /* normal but significant condition */ #defineKERN_NOTICE" " /* informational */ #defineKERN_INFO" " /* debug-level messages */ #defineKERN_DEBUG" " printk(KERN_ERR "%s%d: adapter kernel panic.\n", dev->name, instance);

6 Velké schéma logování dmesg /dev/kmsg VGA printk() /proc/kmsg /dev/log /var/log/messages sys_syslog() syslog() klogd ksymoops syslogd sériový port kernel ring buffer (16 kB) soubor konzole

7 Oops! „segfault v kernelu“ – přístup k paměti, kam se přistupovat nesmí segfault je pro program fatální, pro kernel nikoliv –např. Oops v ovladači může nechat kernel ve stabilním stavu –ale obecně oopsnutý kernel nelze považovat za nadále stabilní způsobí výpis ladicích informací (registry procesoru, umístění tabulek deskriptorů stránek, call trace…) klogd odchytává Oops, mění na logy, případně automaticky (pomocí ksymoops ) nahrazuje adresy za názvy funkcí dle System.map

8 Oops – příklad příklad Oops: Unable to handle kernel paging request at virtual address 211e2018 c *pde = Oops: 0000 CPU: 0 EIP: 0010:[ ] Not tainted Using defaults from ksymoops -t elf32-i386 -a i386 EFLAGS: eax: d7ee5000 ebx: b420e080 ecx: c164e000 edx: c1615d04 esi: c16073d0 edi: ebp: f0 esp: d7c5de84 ds: 0018 es: 0018 ss: 0018 Process mount (pid: 25, stackpage=d7c5d000) Stack: c0309c f c01fadb7 c16073d f0 c1615a40 c c1615a40 c01fa f c022f793 c1615a f0 d7b6fde0 d7c5df e bfffec0c Call Trace: [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] Code: 8b f8 ff 75 1d 8b b

9 System.map /boot/System.map-x.y.z tabulka symbolů (zejm. globální proměnné a funkce) použití: –při kernel Oops –debugger vytvořen při kompilaci kernelu (skript scripts/mksysmap ) příklad –formát: adresa typ jméno –podrobnosti: man nm c b pirq_table c b pirq_router c034420c b pirq_router_dev c b ascii_buffer c b ascii_buf_bytes

10 klogd čte zprávy od kernelu –z /proc/kmsg, je-li namountován proc FS –jinak voláním sys_syslog() –lze ovlivnit parametrem předá zprávy dál –syslogd –do souboru (lze nastavit) –na konzoli (lze filtrovat prioritu) odchytává Oopsy Oopsy lze prohnat přes ksymoops – náhrada adres za symboly

11 syslogd standardní UNIXový logovací démon zápsis přes UNIX socket ( /dev/log ) nebo internet sockety (remote debugging) konfigurace v /etc/syslog.conf zápis knihovními funkcemi: void openlog(const char *ident, int option, int facility); void syslog(int priority, const char *format,...); void vsyslog(int priority, const char *format, va_list ap); void closelog(void); int setlogmask(int mask);

12 Když chci ohlásit chybu… BUG () –obecně (v include/asm- generic/bugs.h ): –na různých architekturách předefinováno BUG_ON () –přibližně: #define BUG_ON(condition) \ if ((condition) != 0) BUG(); #define BUG() do { \ printk("kernel BUG at %s:%d!\n", \ __FILE__, __LINE__); \ panic("BUG!"); \ } while (0)

13 Kernel a gdb Linus nemá debuggery rád: jen „read-only“ režim –žádné změny hodnot proměnných –žádné breakpointy zkompilovat kernel s ladícími informacemi ( -g ) a proc FS ( CONFIG_PROC_FS, CONFIG_PROC_KCORE ) pak stačí jen… … a dál normální práce s gdb gdb vmlinux /proc/kcore „'Use the Source, Luke, use the Source. Be one with the code.'. Think of Luke Skywalker discarding the automatic firing system when closing on the deathstar, and firing the proton torpedo (or whatever) manually. Then do you have the right mindset for fixing kernel bugs.“ „I'm afraid that I've seen too many people fix bugs by looking at debugger output, and that almost inevitably leads to fixing the symptoms rather than the underlying problems.“ Linus Torvalds

14 kgdb kgdb – běžné ladění (breakpointy, watches…) kernelu pomocí gdb potřeba 2 stroje (jeden testovaný, druhý monitorovací), propojené sériovým kabelem architektury i386, x86_64, ppc, s390 nutný patch do kernelu (gdb_stub, fault hndlery, komunikace po kabelu), a modifikovaná verze GDB spustit testovaný stroj s modifikovným kernelem, pak spustit monitorovací stroj: přenáší se konzolové výpisy ladí se jako v obyčejném gdb (gdb) target remote /dev/ttyS1 Remote debugging using /dev/ttyS1 breakpoint () at gdbstub.c: } (gdb) c Continuing. …

15 Problémy s atomicitou a  in_interrupt() –jsme v interrupt kontextu? in_atomic() –jsme v atomickém kontextu? –atomický kontext = když určitě nebudeme přeplánováni (spinlock, interrupt handler,…) might_sleep() –„anotace“ funkcí, které se mohou uspat –pokud je zavoláno v atomickém kontextu, vypíše stack trace, jinak nedělá nic might_sleep_if(cond) –přibližně: #define might_sleep_if(cond) \ if (cond) might_sleep();

16 Magic SysRq „magická“ kombinace kláves, pomocí níž lze poslat několik základních příkazů kernelu hodí se, když se kernal nějak „poškodí“, zasekne apod. x86: Alt+SysRq+cmd, kde cmd je: –o = shutdown –b = reboot (bez sync/umount) –e = všem kromě init pošle SIGTERM –i = všem kromě init pošle SIGKILL –h = nápověda … zneužitelné, na produkčních strojích nepoužívat! –zkompilovat kernel bez podpory Magic SysRq ( CONFIG_MAGIC_SYSRQ ) –vypnout v konfiguraci ( sysctl -w kernel.sysrq=0, nebo /etc/sysctl.conf )

17 User Mode Linux spustí Linux jako uživatelský proces v Linuxu jen na x86 na co mi to je? –non-root může ke kernelu –snadné ladění, gprof, gcov,… –lze zkoušet cokoliv bez obav ze shození systému – „sandbox“ –rychlejší než „klasická“ simulace/virtualizace (max. 20% zpomalení) –hezká hračka :-) Linux Kernel Proces 1Proces 2 Linux Kernel Proces 1 Proces 2 User Mode Linux

18 User Mode Linux technicky: patch ke kernelu definující novou architekturu „um“ po kompilaci binárka linux –lze spustit jako každý jiný soubor –namountuje filesystém ze souboru root_fs či nějakého jiného, předpřipravené soubory se dají stáhnout linux.sourceforge.net/UserModeLinux- HOWTO.htmlhttp://user-mode- linux.sourceforge.net/UserModeLinux- HOWTO.html –více informací –jak ladit UML –sdílení souborů mezi více user-mode Linuxy –sdílení souborů s hostitelským strojem (hostfs) –řešení běžných i méně běžných problémů

Time

20 HZ makro, určující frekvenci generování přerušení od časovače (IRQ 0) hodnota ovlivňuje: –přesnost timerů –granularitu timeslice při plánování (a tedy latenci procesů) –výkonnost poll() a select() (interně využívají timer) granularita × overhead nastavitelné v konfiguraci při kompilaci kernelu ( CONFIG_HZ ), default = 250 dříve HZ=100 mimo kernel ( /proc, times(),…) HZ=100 (kvůli kompatibilitě)

21 jiffies jiffy = moment, okamžik, minutka globální proměnná kernelu při každém tiku časovače inkrementována = počet tiků hodin nyní 64bitová vezre ( jiffies_64 ), na většině architektur je 32bitová verze spodních 32 bitů z 64bitové –přístup k 64 bitům není atomický => používat zámek xtime_lock resp. get_jiffies_64() inicializována na INITIAL_JIFFIES ~ -5 minut (aby wrapnula a projevily se bugy)

22 RTC Real Time Clock hodiny, vestavěné v počítači (typicky v chipsetu) běží, i když je počítač vypnutý generují přerušení (IRQ 8) s nastavitelnou frekvencí –2 Hz–8192 Hz, jen mocniny 2 lze též generovat signál při každém updatu hodin (každou sekundu) a alarmy přerušení se předávají do /dev/rtc –znakové zařízení, jen pro čtení –unsigned longs, vždy informace o typu přerušení a o počtu přerušení daného typu od posledního čtení stavové informace v /proc/driver/rtc

23 RTC – použití z user-space #include \ nastavení frekvence, času, alarmů a další funkcí přes ioctl() –frekvenci nad 64 Hz může nastavit jen root –konzervativní omezení – 486/33 MHz začne nestíhat až při 1024 Hz proces pak typicky zavolá read() / select() na /dev/rtc, spí dokud nenastane přerušení a přečte informace o něm při externí synchronizaci času stroje (např. přes NTP) se každých 11 minut přerušení na chvilku zablokuje => nutno s tím počítat

24 Obsluha přerušení časovače timer_interrupt() –voláno se zakázanými přerušeními –skutečná práce se odvede v dalších volaných funkcích broadcast přerušení ostatním procesorům v případě SMP inkrementace jiffies update systémového loadu update časů u procesů spuštění timerů …

25 Kernel timers timeout –jednou, netřeba přesně, hodně expiruje timer –víckrát, potřeba přesně, zřídka expiruje přesnost: podle HZ API: extern void add_timer_on(struct timer_list *timer, int cpu); static inline void add_timer(struct timer_list * timer) extern int del_timer(struct timer_list * timer); extern int mod_timer(struct timer_list *timer, unsigned long expires); struct timer_list { … unsigned long expires; void (*function)(unsigned long); unsigned long data; … };

26 Jak si kernel eviduje timery?

27 BogoMIPS Bogus Millions of Instructions per Second „the number of million times per second a processor can do absolutely nothing“ :-) velmi hrubý odhad rychlosti procesoru používá se pro kalibraci délky interních smyček (busy loops) hodnota se měří a vypisuje při startu (fce calibrate_delay) –příklad na mém PC (Pentium M, 1.8 MHz, Linux ve VMWare): –lpj = loops per jiffy BogoMips mini-howto: /]$ dmesg | grep BogoMIPS Calibrating delay loop… BogoMIPS (lpj= )

28 Odkud jsem čerpal /usr/src/linux & grep :-) Google, Google, Google –příliš mnoho zdrojů, abych je zde vyjmenoval –spousta stránek zastaralých, neoznačují popisovanou verzi jádra, často protiřečící si informace –na druhou stranu se toho dá najít překvapivě hodně –dobrý zdroj: archivy různých mailing-listů, komentáře v mailech k patchům