Toegepaste informatica, reeks 5 4 maart 2010 Besturingssystemen 2 Processes, threads and system calls in Linux Student:Nils Heyvaert & Ward de Rick
1
Excercises on /proc
Which processor does this machine have? cat /proc/cpuinfo | grep "model name" |
cut -d ’ ’ -f 3-7
Dit commando geeft als resultaat op debbie: Intel(R) Pentium(R) 4 CPU 3.00GHz In de cpuinfo file vinden we allerlei informatie over de cpu van de machine. Zo staat er onder andere in wat voor cpu je machine bevat, tot welke family deze hoort, hoe groot de cache ervan is. . . . How many context switches have occurred yet? And how many processes and interrupts? Is the number of context switches higher than the number of processes? Explain thoroughly! And why is the number of interrupts even bigger?
cat /proc/stat | egrep "ctxt |processes |intr"| cut -d ’ ’ f 1,2 Met dit commando krijgen we het aantal context switches te zien, het aantal processen en het totaal aantal interrupts dat zich heeft voorgedaan sinds dat er geboot is. ctxt staat voor het aantal context switches. Het aantal context switches is hoger dan het aantal processen, wat logisch is. Dit komt doordat de kernel meermaals van proces switched. De kernel gaat het lopende proces even opschorten, de context er van opslaan in een register en dan de context ophalen van een ander proces en deze uitvoeren. Als dit gedaan is gaat hij terug switchen naar het andere proces. Aangezien er regelmatig geswitched wordt tijdens de uitvoering van processen / threads is het dus een logisch gevolg dat het aantal switches hoger is dan het werkelijk aantal processen. intr staat voor interrupts. Het aantal interrupts is het eerste cijfer dat we te zien krijgen op de intr lijn als we gaan kijken in /proc/stat, dit is het totaal aantal interrupts dat zich heeft voorgedaan. De andere cijfers geven het aantal interrupts weer per type interrupt. Ook het aantal interrupts is hoger dan het aantal processen, ook dit is logisch aangezien tijdens n proces meerdere interrupts zich kunnen voordoen / kunnen worden aangeroepen. Dit kan gaan van I/O interrupts tot bv. Local Time interrupts. Er zijn zowel hardware interrupts als software interrupts. Besturingssystemen 2
pg. 1 van 6
KHLeuven, dept. G&T, 2Ti
Interrupts worden vooral gebruikt voor multitasking. In /proc/stat kan je verschillende statistieken bekijken die bijgehouden worden sinds de start van het systeem. De tijden die erin staan zijn weergegeven in jiffies, 1 jiffie is 1/100ste van een seconde. How many Non Maskable interrupts have occurred yet? What does this mean??
cat /proc/interrupts | egrep "NMI" De interrupts file in /proc bevat geeft per IRQ weer hoeveel interrupts zich er hebben voorgedaan, van welke type en welk apparaat bij deze IRQ hoort. Er hebben zich op debbie geen NMI’s voorgedaan dit wil zeggen dat er geen non-recoverable errors hebben voorgedaan. Een non maskable interrupt is een interrupt die niet genegeerd kan worden door de standaard interrupt masking technieken van het systeem. Een NMI wordt typisch gebruikt wanneer de response time critical is of om aan te duiden dat een non-recoverable error zich heeft voorgedaan en dat deze onmiddelijk aandacht nodig heeft en dus niet mag gemasked worden. Dit soort interrupts wordt vooral gebruikt om aan te geven dat er niet-herstelbare hardwareproblemen hebben voorgedaan, fouten in het geheugen zoals ECC of pariteitsbit fouten. What type of interrupt has occurred the most since the start of our operating system?
cat /proc/interrupts | sort -nr -k2 | head -n 1 Door in de interrupts file te gaan kijke en te sorten van hoog naar laag op de 2 kolom kunnen we zien welke interrupt zich het meest heeft voorgedaan. Het soort interrupts dat het meeste voorkomt op debbie zijn de Local timer interrupts. Deze interrupt wordt onder andere gebruikt door de scheduler om prioriteiten te herverdelen over de lopende processen. Where does the command free gets its data from? Interpret the output.
cat /proc/meminfo Free is in feite een programma dat delen van de meminfo file uitleest en toont op het scherm. Deze file bevat volgende info: • MemTotal: 507172 kB : het totaal fysieke geheugen,RAM, in het systeem in KB • MemFree: 77444 kB : totaal vrije geheugen, dit is HighFree + LowFree • Buffers: 158784 kB : het aantal geheugen dat gebruikt wordt voor file buffers • Cached: 87492 kB : grootte van het gecached geheugen • SwapCached: 56 kB : geheugen dat geswapped was, maar nog steeds in de swapfile bevindt, als er geheugen nodig is moet dit zo niet nog eens geswapped worden. DIt levert tijdswinst op. • Active: 183272 kB : geheugen dat onlangs gebruikt is maar nog niet beschikbaar is. Besturingssystemen 2
pg. 2 van 6
KHLeuven, dept. G&T, 2Ti
• Inactive: 104548 kB : geheugen dat minder recent gebruikt is en dus sneller herbruikt kan worden. • HighTotal: 0 kB : het totaal aantal geheugen in de high region • HighFree: 0 kB : het geheugen dat gebruiker wordt voor userspace programmas of voor de pagecache. Dit geheugen is minder snel toegangkelijk dan het Low geheugen. • LowTotal: 507172 kB : het totaal niet-high geheugen • LowFree: 77444 kB : kan voor zelfde doel gebruikt worden als HighFree enkel kan de kernel dit ook gebruiken voor zijn eigen data sctructuren. • SwapTotal: 1477940 kB : het totaal van swap ruimte dat beschikbaar is • SwapFree: 1477852 kB : dit is het geheugen dat uit het RAM is geleend en tijdelijken op de disk staat. • Dirty: 0 kB : gebruikt geheugen dat wacht om teruggeschreven te worden • Writeback: 0 kB : het geheugen dat op het moment teruggeschreven wordt • AnonPages: 41488 kB • Mapped: 8100 kB : bestanden die gemapped zijn zoals bv. libraries • Slab: 133436 kB : de in-kernel data structures cache • SReclaimable: 122864 kB • SUnreclaim: 10572 kB • PageTables: 1256 kB : geheugen dat toegekend is aan het laagste deel van de page tables • NFS Unstable: 0 kB • Bounce: 0 kB • CommitLimit: 1731524 kB : dit is gebaseerd op de overcommit ratio en geeft het total aantal geheugen weer dat vrij is om aan het system te worden toegekend. Het wordt als volgt berekend: CommitLimit = (0 vm.overcommitr atio 0 ∗ PhysicalRAM) + Swap • Committed AS: 529956 kB : een schatting van het aantal geheugen dat je nodig hebt indien je heel zeker wilt zijn dat je systeem nooit out of memory zal zijn. • VmallocTotal: 520184 kB : de totale grootte van de virtual address space • VmallocUsed: 4960 kB : de totale grootte van de virtual address space die gebruikt wordt • VmallocChunk: 514756 kB : het grootste vrije block van de vmalloc. • HugePages Total: 0 : het totaal aantal hugepages voor het systeem, deze waarde wordt enkel gebruikt op x86, Itanium and AMD64. • HugePages Free: 0 : het totaal aantal hugepages die beschikbaar zijn Besturingssystemen 2
pg. 3 van 6
KHLeuven, dept. G&T, 2Ti
• HugePages Rsvd: 0 : • HugePages Surp: 0 • Hugepagesize: 2048 kB : de grootte van elke hugepage. Voor SMP, hugeman kernels en AMD64 is dit by default 2048 kB. How much time was the processor unemployed since boot? Calculate the percentage of the total time which the processor was unemployed, and the percentage of the useful processor time that has been used by the operating system. grep "cpu " /proc/stat | awk -F ’ ’ ’{total = $2 + $3 + $4 +$5} END {print $5*100/total "% " $2*100/total "%"}’ De cpu lijn bevat een hele reeks cijfers, deze cijfers zijn jiffies en geven de tijd weer dat de processor werkte aan een bepaalde taak. De cijfers staan voor het volgende: user: de normale processen die worden uitgevoerd in user mode nice: de niced processen system: de processen die worden uitgevoerd in kernel mode idle: twiddling thumbs iowait: de tijd dat er gewacht wordt op I/0 irq: servicing interrupts softirq: servicing softirqs Om de percentages te berekenen gaan we de eerste 4 waarden optellen en dan de waarden die we naar een percentage willen omzetten vermenigvuldigen met 100 en dan delen door het totaal. Zo zien we dat de idle zeer groot is tegenover de user-time. What’s in /proc/kcore, how big is this file? ls -lh /proc/ | grep "kcore" Met dit commando kan je zien hoe groot de kcore file is. De kcore file stelt het fysieke geheugen voor van het systeem en is opgeslagen in core format. De grootte van deze file is gelijk aan de grootte van het RAM + 4KB. De file is niet human-readable en wordt vooral gebruikt om te debuggen. Deze file is ook enkel leesbaar met de juist rechten. Find your neighbors mac address. Hint: ping him first. ping (hostname) cat /proc/net/arp | grep (ip address) | tr -s ’ ’ | cut d ’ ’ -f 4 Door eerst te pingen naar de hostname van onze buurman komen we zijn ip te weten en komt hij ook in de arp tabel te staan moest hij er nog niet instaan.. Daarna kunnen we dit ip adres opzoeken in de arp tabel met bovenstaand commando en zo zijn MAC adres zien. Indien we eerst niet pingen naar onze buurman kan het zijn dat zijn ip adres hier niet in de arp table staat. Which kernel modules are loaded?
Besturingssystemen 2
pg. 4 van 6
KHLeuven, dept. G&T, 2Ti
cat /proc/modules | cut -d ’ ’ -f 1 Deze file bevat alle modules en informatie over deze modules, met bovenstaand commando tonen we enkel de naam van de geladen modules. Op Linux kan je grotendeels zelf kiezen welk je modules je installeert en gebruikt. How can you (as root) through /proc: Change the reaction of the system to ctrl-alt-del? What are the possible actions?
Echo "1" >/proc/sys/kernel/ctrl-alt-del Normaal staat deze waarde op 0 om ervoor te zorgen dat je een gracefull restart hebt, dit houdt in dat alles goed wordt afgesloten . Dit wordt doorgestuurd naar init(1). Als de waarde in /proc/sys/kernel/ctrl-alt-del file groter is dan 0 dan zal linux onmiddelijk herstarten zonder alles af te sluiten zoals het hoort, zelfs zonder de ’vuile buffers’ te syncen. Indien een bepaald programma de ctrl-alt-delete opvangt zal dit programma eerst zijn reactie hierop uitvoeren en niet de reactie die staat in de kernel file. How can you (as root) through /proc: Don’t respond to ICMP Echo requests anymore (ping requests)?
Echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all Dit commando zorgt ervoor dat alle ip echo requests genegeerd worden, standaard staat deze waarde op 0 wat ervoor zorgt dat er wel gereageerd wordt op requests.
2
System Calls
In /usr/include/asm/unistd 32.h and /usr/include/asm/unistd 64.h you will find a list of all supported linux system call’s. How much unique call’s are available?
wc -l /usr/include/asm/unistd_32.h /usr/include/asm/unistd_64.h Met dit commando zien we voor beide hoeveel unieke systems calls beschikbaar zijn en ook het totaal van beide.
3
Exercises on system call’s
How many system call’s do we need to read a file with the command cat?
strace -c cat console-setu
Besturingssystemen 2
pg. 5 van 6
KHLeuven, dept. G&T, 2Ti
De optie c zorgt ervoor dat er een overzicht gemaakt wordt als de strace gedaan is. Hierin is voor elk proces duidelik te zien hoeveel % van de totale tijd het gebruikt heeft, hoeveel seconden dit was, hoeveel keer dit proces uitgevoerd is, hoeveel errors er daarbij zijn opgetreden en de naam van het proces. Which system call consumed the most time in previous example? De system call execve heeft het meeste tijd gebruikt in het bovenstaande voorbeeld. Dit is te zien doordat er voor dit proces een tijd van 100% staat. Execve zorgt dat een programma wordt uitgevoerd waade bestandsnaam naar wijst. Deze bestandsnaam moet een binair uitvoerbaar bestand zijn of een script. The command ps aux gets its information out of /proc. How many files were accessed in /proc during this operation? strace -o strace.txt ps aux cat strace.txt | grep "open" | wc -l Bij deze operatie worden er 16 files gelezen. De uitvoer van de strace wordt naar de file ¨ strace.txt weggeschreven. Hierna wordt er een grep op open uitgevoerd. Op de uitvoer van de grep wordt een wc l gedaan om het aantal lijnen van de uitvoer te tellen.
4
Bronnen • man pages /proc • man pages strace • http://www.linuxhowtos.org/ • http://en.wikipedia.org/wiki/Interrupt • http://www.linuxfocus.org/Nederlands/January2004/article324.shtml • http://manpages.ubuntu.com/
Besturingssystemen 2
pg. 6 van 6
KHLeuven, dept. G&T, 2Ti