Linux operatsioonisüsteem kasutab plaanurit: erinevus redaktsioonide vahel

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti
110. rida: 110. rida:
   
 
<pre>
 
<pre>
  +
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
 
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.
 
# This is a transient unit file, created programmatically via the systemd API. Do not edit.

Redaktsioon: 28. juuni 2026, kell 23:42

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=

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 puhul on analoogne seadistus

20260628-plaanur-01.png

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