Linux operatsioonisüsteem kasutab plaanurit
Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti
Sissejuhatus
Plaanuri (ingl. k. scheduler) ülesanne operatsioonisüsteemis on korraldada tööde (ingl. k. task) etteandmist protsessorile. Plaanimise tagajärjeks on sujuvam või vähem sujuvam süsteemi käitumine.
Mõisted
- scheduler - eesti keeles plaanur
- scheduler class - plaanuri klass
- task
Tööpõhimõte
Väited
- Linux operatsioonisüsteemis puudub iseseisev plaanur deemon protsess
- plaanimisega tegeleb kernel
- plaanimist aitab jõustadaaitab riistvaraline komponent lapic (local advanced programmable interrupt controller)
- lapic on uuemal ajal füüsilise protsessori kooseisus ('local ...') - teine kohal olev apic on 'i/o acpi'
- plaanimist aitab jõustada tarkvaraline komponent systemd ja eriti cgroups
- plaanimise mõistmine aitab hallata süsteemi jõudlust
- plaanimise mõistmine aitab süsteemi monitoorida
- tavaliselt uue protsessi tekkimiseks peab parent protsess olema protsessori peal töötavas olekus
- tavaliselt uus tekkinud protsess jätkab protsessori peal töötavana (eriti harmoonilisel juhtumil töötab parent protsess üh cpu peal, ja forked child protsess hakkab tööle teise protsessori peal)
Linux operatsioonisüsteemis saavad protsessid olla neljas-viies erinevas olekus
- running / runnable
- sleep
- ...
- zombie
Plaanine toimub kahe tasemeliselt
- plaanimise klasside järgi - tavaliselt on süsteemis kasutusel neli-viis plaanimis-klassi (ingl. k. scheduling class)
- plaanimise klassi siseselt
Plaanimise klassid
- stop
- deadline
- real-time
- fair
- extensible
- idle
Väited
- igat klassi teenindab tavaliselt oma plaanur (nt fair klassis töötab uuemal ajal eevdf)
- iga task küljes on silt millisesse plaanimise klassi ta kuulub
- kui kernel läheb järgmisel plaanimise ringile ta alab ülevalt ja protsessorile saadetakse töö esimesena kohatud klassist mis töid sisaldab - nt kui midagi on käivitada deadline klassist, siis üldse ei ole võimalust sellel ringil fair klassi töödel
- plaanimisele ei avalda iseensest mõju protsessi omanik
- plaanimisele ei avalda iseensest mõju
- plaanimisele avaldab mõju cgroup parameetri ... väärtus
Misc
Töötavate protsesside plaanuri esitamine
root@ph-minio-01:~# ps -eo pid,comm,policy,cls,pri | head -n 10
PID COMMAND POL CLS PRI
1 systemd TS TS 19
2 kthreadd TS TS 19
3 pool_workqueue_ TS TS 19
4 kworker/R-kvfre TS TS 39
5 kworker/R-rcu_g TS TS 39
6 kworker/R-sync_ TS TS 39
7 kworker/R-slub_ TS TS 39
8 kworker/R-netns TS TS 39
11 kworker/0:0H-ev TS TS 39
Docker compose konteinerite paigutamine cgroup seiskohast ühte komplekti
TODO
cgroup abil cpu limiidi sättimine - plaanuri mõjutamine
root@ph-minio-01:~# systemctl show nginx.service -p CPUQuotaPerSecUSec -p CPUWeight CPUWeight=[not set] CPUQuotaPerSecUSec=infinity root@ph-minio-01:~# systemctl set-property nginx.service CPUQuota=50% root@ph-minio-01:~# systemctl show nginx.service -p CPUQuotaPerSecUSec -p CPUWeight CPUWeight=[not set] CPUQuotaPerSecUSec=500ms root@ph-minio-01:~# systemctl set-property nginx.service CPUWeight=50 root@ph-minio-01:~# systemctl set-property nginx.service CPUWeight= root@ph-minio-01:~# systemctl set-property nginx.service CPUQuota=
Kasulikud lisamaterjalid
- TODO