Erinevus kenade ja RT prioriteetide vahel Linuxis

Ajasti kontrollib, millist lõime Linuxis täidetakse ja kui kaua see kestab. See peab lahendama 2 vastandlikku nõuet: reageerimine I / O-le ja arvutuse läbilaskevõime.

Täitmise järjekord põhineb sõiduplaanipoliitikal ja ajakava prioriteedil, mis igal lõimel on. Ajastamispoliitika kehtestati Linuxi versioonis 2.2. Linux pakub 6 poliitikat: SCHED_FIFO, SCHED_RR, SCHED_DEADLINE, SCHED_DEADLINE, SCHED_OTHER, SCHED_BATCH jaSCHED_IDLE. Need põhimõtted, välja arvatud SCHED_DEADLINE, on jagatud kahte rühma; SCHED_OTHER, SCHED_IDLE ja SCHED_BATCH kuuluvad tavapäraste poliitikate juurde ja SCHED_FIFO, SCHED_RR kuuluvad reaalajas poliitikatesse. SCHED_DEADLINE lõimed on erilised ja kõrgeima prioriteediga lõimed.

Igal lõimel on sched_priority väärtus ja kõrgemate sched_priority väärtustega lõimedel on teiste ees eelis. sched_priority nimetatakse mõnikord reaalajas prioriteediks, kuna seda kasutatakse peamiselt lõimede täitmise järjekorra otsustamiseks reaalajas poliitikaga. Tavalise poliitikaga lõimede sched_priority väärtused on 0 ja reaalaja poliitikaga lõimede väärtus võtab tavaliselt 1 kuni 99. Ehkki sched_priority vahemik erineb süsteemidest, saab tegelikku vahemikku kontrollida sched_get_priority_min ja sched_get_priority_max funktsioonide abil igas POSIX-is. süsteem. Sched_priority väärtuse koos poliitikaga saab määrata funktsiooni sched_setscheduler abil ja kontrollida funktsiooni sched_getscheduler abil.

Ehkki sched_priority väärtus on reaalajas niitide jaoks, nimetatakse kenaks väärtuseks väärtust, mille abil otsustatakse, milline tavaline niit eelistab teisi normaalseid niidid. Kena väärtuse vahemik on -20 (kõrge prioriteet) kuni +19 (madala prioriteediga). Kena väärtuse saab määrata kena funktsiooni või privaatsusfunktsiooni abil ja kontrollida kärpimisfunktsiooni abil.

Kuidas Linux täidab niite vastavalt nendele reaalajas ja toredatele prioriteediväärtustele? Reaalajalistel lõimedel pole täitmisaja piiranguid ja Linux täidab põhimõtteliselt kõige kõrgema prioriteediga reaalajas lõime, kuni niit lõpetab selle täitmise ise või kõrgema prioriteediga väärtus hoiab seda lõiku. Kuid see põhjustab sageli probleeme, kuna kui mõned soovimatud reaalajas lõimed hakkavad jooksma ega lõpe kunagi, oli ainus viis selle peatamiseks kasutada teise kõrgema prioriteediga lõimede käivitamist. Niisiis, alates versioonist 2.6.25, on soovimatute reaalajas lõimede peatamiseks ka muid funktsioone, näiteks täitmise aja piiramine RLMIT_RTTIME abil. Sellegipoolest ei soovitata reaalajas poliitikat ilma põhjaliku kaalumiseta kasutada, kuna Linuxil on nutikate ajakavade määramise süsteem, mida nimetatakse tavaliste lõimede jaoks täiesti ausaks ajakavaks (CFS), mis võeti kasutusele Linuxi kerneli versioonis 2.6.23. CFS otsustab, millist lõime täita ja kui kaua seda saab käivitada.

CFS kasutab punase-musta puu andmestruktuuri, mis on üks kahekomponentsetest puudest, et saavutada õiglane ajakava. CFS-is on igal ülesandel täitmise aeg ja CFS konstrueerib täitmisajaks ülesannete punase-must puu. Täitmiseks valitakse ülesanne, mille täitmise aeg on puus kõige vähem. Pärast täitmist lisab CFS ülesandele täitmisaja ja paneb selle vastavalt täitmise ajale uuesti punase-mustanahalisse puusse. See võimaldab pikka aega magavaid ülesandeid täita niipea, kui need vajavad, mis kõlab õiglaselt. Iga kord, kui CFS lõpetab ülesande täitmise, peab ta sisestama täidetud puu tagasi puu ja otsima järgmise väikseima täitmisajaga ülesande. Selleks on vaja andmestruktuuri, mis ei võta kaua aega isegi halvimal juhul. See on üks põhjusi, miks punane must puu on omaks võetud. Punases mustas puus on iga sõlm kas punane või must ning punaste sõlmede lapsed on alati mustad. Kõige tähtsam on see, et iga tee antud sõlmest ükskõik millise järeltulija lehe juurde sisaldab sama arvu mustaid sõlmi. See viib punase-musta puu kriitilise omaduseni, et tee juurest kaugeima leheni on kuni kaks korda pikem kui tee juurtest lähima leheni, see tagab halvima aja otsinguks, sisestamiseks ja kustutamine O-s (log n) ning CFS-i jaoks on ajakava ajakohastamine kasulik.

Nüüd teame, kuidas CFS määrab täitmise järjekorra, ja liigume edasi selle juurde, kuidas CFS määrab iga täitmise aja. Iga täitmisaeg määratakse kindlaks 4 teguri tasakaalustamiseks tehtud arvutuse tulemusel: sihitud latentsusaeg, minimaalne detailsus, ootavate ülesannete arv, ülesannete toredad väärtused. Sihipärane latentsusaeg on aeg, mille jooksul kõik toimingud vähemalt korra täidetakse. Minimaalne detailsus on lühim täitmisaeg, mille täitmise aeg on madalam kontekstilülituskulude jaoks. Põhimõtteliselt jagatakse sihitud latentsus igaks ülesandeks kaalutud viisil, sõltuvalt kenadest väärtustest, nii et iga täitmisaeg on pikem kui minimaalne detailsus. Suurem sihitud latentsus viib pikema täitmisaja, eriti kõrgema prioriteediga ülesannete jaoks, ja suurem minimaalne detailsus viib kenadest väärtustest sõltumata võrdsema täitmisaja.

Kokkuvõtlikult on kena prioriteedi ja reaalajas prioriteedi erinevus järgmine. Esiteks on kena prioriteet tavapäraste ülesannete jaoks, samas kui reaalaja prioriteet on ilmselgelt reaalajas toimingute jaoks. Teiseks on kena prioriteet väärtus, mille abil saab kindlaks teha, kui pikk on täitmise aeg, ja täitmiskorralduse määrab CFS vastavalt täitmise ajale. Teisest küljest on reaalajas prioriteet väärtus täitmisjärjestuse määramiseks ning reaalajas ülesannete täitmise aeg pole põhimõtteliselt piiratud, kuni neid ei takista muud kõrgema prioriteediga ülesanded. Ehkki mõlemat nimetatakse prioriteetideks, on kena prioriteet kestuse jaoks ja reaalajas prioriteet tellimuse jaoks.