Linux operatsioonisüsteem kasutab plaanurit: erinevus redaktsioonide vahel
Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti
(→Misc) |
(→Misc) |
||
| 70. rida: | 70. rida: | ||
11 kworker/0:0H-ev TS TS 39 |
11 kworker/0:0H-ev TS TS 39 |
||
</pre> |
</pre> |
||
| + | |||
| + | ====Docker==== |
||
Docker compose konteinerite paigutamine cgroup seiskohast ühte komplekti |
Docker compose konteinerite paigutamine cgroup seiskohast ühte komplekti |
||
Redaktsioon: 28. juuni 2026, kell 23:43
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
Docker compose konteinerite paigutamine cgroup seiskohast ühte komplekti
TODO
system service unit - nginx
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= root@ph-minio-01:~# cat /etc/systemd/system.control/nginx.service.d/50-CPUWeight.conf # This is a drop-in unit file extension, created via "systemctl set-property" # or an equivalent operation. Do not edit. [Service] CPUWeight=50 root@ph-minio-01:~#
Proxmox PVE
Proxmox puhul on analoogne seadistus
virtuaalse arvuti .scope juures
root@pve-svc-02:~# systemctl status 53162.scope
● 53162.scope
Loaded: loaded (/run/systemd/transient/53162.scope; transient)
Transient: yes
Active: active (running) since Sun 2026-06-28 23:25:15 EEST; 16min ago
Invocation: 36a16058908642198721adacce543587
Tasks: 17 (limit: 143385)
Memory: 725.1M (peak: 801.2M)
CPU: 43.184s
CGroup: /qemu.slice/53162.scope
└─1932172 /usr/bin/kvm -id 53162 -name ph-minio-01-moraal ...
Jun 28 23:25:15 pve-svc-02 systemd[1]: Started 53162.scope.
...
root@pve-svc-02:~# systemctl show 53162.scope -p CPUQuotaPerSecUSec -p CPUWeight
CPUWeight=50
CPUQuotaPerSecUSec=2s
root@pve-svc-02:~# cat /run/systemd/transient/53162.scope
# This is a transient unit file, created programmatically via the systemd API. Do not edit.
[Unit]
Before=pve-ha-lrm.service
Before=pve-guests.service
[Scope]
CPUQuota=200.00%
Slice=qemu.slice
KillMode=process
SendSIGKILL=no
TimeoutStopSec=infinity
CPUWeight=50
[Unit]
After=dbus.service
Kasulikud lisamaterjalid
- TODO