6. Luento: Skedulointi eli Vuoronnus Arto Salminen, arto.salminen@tut.fi
Agenda Peruskäsitteet Skedulointialgoritmeja Reaaliaikajärjestelmien skedulointi Skeduloituvuuden analysoinnista Yhteenveto
Peruskäsitteet Skedulointi ~ mikä työ/tehtävä/prosessi valitaan suoritukseen seuraavaksi Skedulointimenetelmä/algoritmi suorittaa valinnan Perustuvat yleensä prioriteetteihin, jotka puolestaan voidaan johtaa järjestelmän ominaisuuksista, laskentaajasta, määräajasta, jne. Pehmeä vs. kova reaaliaika skeduloinnin kannalta Kerran tehtävät (sporadic) työt vs. toistuvat (periodic) työt Jitter ~ huojunta siinä milloin työt valmistuvat/voidaan aloittaa jne Siirräntäsidonnaiset (IO-bound) vs. suoritinsidonnaiset (CPU-bound) työt
Mittareita Suorittimen käyttöaste Kuinka suuren osan ajasta suoritin on käytössä (ei idlaa). Helppo laskea. Kokonaissuoritusteho (throughput) suoritetut tehtävät / aikayksikkö Voidaan laskea. Kääntymisaika (turnaround time) Ready-tilaan siirtymisen ja tehtävän valmistumisen välinen aika. Voidaan laskea. Odotusaikojen summa Kuinka kauan käytettiin yhteensä aikaa odottamiseen? Voidaan laskea. Vasteaika (response time) Ready-tilaan siirtymisen ja ensimmäisen vasteen tuottamisen välinen aika. Voidaan laskea. Reiluus (fairness) Saavatko kaikki prosessit suoritusaikaa? Vaikea määritellä tarkasti ja mitata.
Maksimoidaan Suorittimen käyttöaste Kokonaissuoritusteho Reiluus Minimoidaan Kääntymisaika Odotusaika Vasteaika Tavoitteita Vaikka reiluus on vaikea mitata, se voi olla hyvin tärkeä tavoite järjestelmässä
Vasteaika, kääntymisaika ja odotusaika Lasketaan tehtävien A, B ja C kokemat ajat A B C A B C A C A C aika Tehtävät tulevat ready-tilaan ajan hetkellä 0. Vasteaika =? Kääntymisaika =? Odotusaika =?
Reaaliaikajärjestelmät Pehmeä: ajoituksen epäonnistuminen ei ole vakava virhe Kova: ajoitus ei saa epäonnistua Reaktiivisuus: reagoi ärsykkeisiin nopeasti Ennustettavuus: vasteajat voidaan laskea
Reaaliaika Tapahtumien ajoittaminen oikeaan (ennustettavaan) aikaan Toisinaan mahdollisimman nopea vasteaika
Irroittamaton skedulointi Suorituksessa oleva prosessi säilyy samana kunnes se päästää jonkun toisen prosessin ajoon Päästäminen voi olla eksplisiittistä (esim. yield) tai implisiittistä (esim. palvelupyyntö lisälaitteelta) Toteutusmielessä varsin yksinkertainen Ei poissulkemisongelmaa (ajossa niin kauan kun saapuu paikkaan jossa voi hyvin keskeyttää suorituksen; munata toki voi!) Yksinkertaisimmillaan yksi säie, joka kutsuu tarvittavia rutiineja prioriteettien mukaisessa järjestyksessä
Milloin irroittamaton skedulointi tapahtuu? Run Termi nated Wait Ready
Irroittava skedulointi Suorituksessa oleva prosessi voidaan vaihtaa ilman sen antamaa lupaa Käytännössä tällöin vaihtoon voi johtaa lisäksi jokin prosessiin liittymätön laitteistotason tapahtuma (esim. (kello?)keskeytys) Monimutkaisempi; prosessi voi vaihtua missä kohdassa tahansa; tarvitaan poissulkemista jne. Prosessi ei edes välttämättä itse tiedä tulleensa keskeytetyksi välillä Jos mitään ei mainita, yleensä käytetään irroittavaa skedulointia
T1 Aktivoituminen T2 T1 Irroittamaton skedulointi T2 T1 Irroittava skedulointi T2
Skedulointialgoritmeja First In, First Out, jono Round Robin, kiertovuorottelu Fixed Priority, kiinteä prioriteetti Dynamic Priority, vaihteleva prioriteetti Shortest Remining Time, lyhin ajoaika ensin Earliest Deadline First, aikaisin määräaika ensin Muita?
FIFO First In, First Out Ehkä suoraviivaisin algoritmi; irroittamaton toteutus riittää yleensä aivan mainiosti Käytännössä harvinainen prosessien, säikeiden tai tehtävien yhteydessä suoraan Vaikuttaa usein epäsuorasti Semaforeihin liittyvät jonot Viestinvälitysjono Oheislaitteille lähetettävät tehtävät
RR Round-Robin ~ kiertovuorottelu Kuten FiFo, mutta annetaan jokaiselle prosessille vuorollaan viipale suoritusaikaa Aikaviipaleen pituus? Puhtaimmillaan ei lainkaan prioriteetteja; käytännön toteutuksissa usein prioriteetit mukana tavalla tai toisella Ennustettavuus kun prosessien määrää lisätään?
FIFO vs. RR Jos kontekstivaihtoon kuluvaa aikaa ei huomioida, onko RR aina parempi? Tehtävät A, B ja C aktivoituvat ajan hetkellä 0. A B C A B C A B C aika A B C aika Kääntymisaika, vasteaika, odotusaika tehtäville A, B ja C?
FP Fixed Priority Suorittaa aina sitä prosessia, jolla on korkein prioriteetti niiden prosessien joukosta, jotka ovat valmiina suoritukseen Skedulointimenetelmä ei vaikuta prioriteetteihin! Yleensä irroittava (oikeastaan siis FPPE), mutta ilman kellokeskeytyksiä ja automaattista uudelleenskedulointia myös irroittamaton mahdollinen Soveltuu hyvin reaaliaikajärjestelmiin; jopa inkrementaalinen kehitys Matalaprioriteettisten tehtävien lisäys helppoa Onko hyvä peruste valita algoritmi?
FP skedulointihetki Kun uusi säie tulee ready-tilaan Kun aikaviipale on kulunut loppuun prioriteetti C C B B A A A aika prioriteetti C C B B A A A aika Entäpä irroittamaton versio?
Vaihteleva prioriteetti Ei yksi menetelmä, vaan joukko erilaisia menetelmiä Prioriteetti muuttuu ajan funktiona Säikeen valinta kuten Fixed Priority kun prioriteetit laskettu Käytössä esim: Perinteinen Unix (I/O-sidonnaisten säikeiden prioriteetin nosto; nukkuvat kumminkin melkein koko ajan) Windows NT-perhe (prioriteetti kasvaa wait-tilasta poistettuttaessa ja pienenee kun ajoaika loppuu)
Toteutusesimerkki Jokaiseen säikeeseen lisätään kellokeskeytyslaskuri Kellokeskeytyksen tullessa kasvatetaan aktiivisena olleen prosessin laskuria Kerran sekunnissa käydään kaikki säikeet lävitse ja lasketaan uusi prioriteetti lisäämällä perusprioriteettiin laskurin arvo ja nollataan laskuri
SRT Shortest Remaining Time Lähtökohtana kääntää odotettu laskenta-aika prioriteetiksi, ts. lyhyet tehtävät suoritetaan ensin Usein riittää irroittamaton skedulointi, mutta puhtaimmillaan irroittava välttämätön (uusi, lyhyt tehtävä voi syrjäyttää vanhan pitkää laskentaa vaativan tehtävän) Skedulointia varten tehtävien ominaisuudet tunnettava tarkasti Sulautetuissa järjestelmissä kyseeseen tulevat pienet järjestelmät, joissa tehtäväjoukko on suljettu
EDF Earliest Deadline First Se tehtävä, jonka määräaika on ensimmäisenä suoritetaan ensimmäisenä Selkeä, suoraviivainen ja toistettava Sopii hyvin reaaliaikajärjestelmissä käytettäväksi
SRT vs EDF SRT ei sovi reaaliaikasovellukseen, miksi? A B C A aika A B C B A aika
Algoritmien ominaisuuksia Algoritmi Reilu Tehokkuus Vaste Reaaliaika Nälkiintyy First In, First Out On Huono Pitkä Ei Ei Round Robin On Matala Pitkä Ei Ei Kiinteä prioriteetti Ei Korkeahko Vaihtelee Kyllä Kyllä Vaihtuva prioriteetti On Korkea Vaihtelee Ei Ei Lyhin ajoaika ensin On Matala Keskitaso Ei Kyllä Aikaisin ensin On Keskitaso Keskitaso Kyllä Kyllä
Käänteisprioriteetti (priority inversion) Vaikka käytössä kiinteä prioriteetti, käytännössä voidaan joutua puljaamaan Jo 3 säiettä riittää (MP, KP, SP): MP varaa kriittisen alueen ja alkaa suorittaa sitä KP aktivoituu, saa suoritusvuoron ja pysäyttää MP:n keskelle aluetta SP aktivoituu, saa suoritusvuoron ja yrittää edetä kriittiselle alueelle; joutuu odottamaan koska alue on MP:llä KP saa suoritusvuoron, koska SP ei voi edetä Esto erilaisin varausstrategioin tai nostamalla prioriteettia kriittisellä alueella (ns. priority ceiling)
Reaaliaikajärjestelmien skedulointi Perustuu yleensä kiinteään prioriteettiin Oletus: Työlle annettu prioriteetti riittää suoritukseen; suorittimen tehtävä hoitaa homma riittävän nopeasti Prioriteetti siis kiteyttää Käynnistymishetki Laskenta-aika Syy-seuraussuhde muihin prosesseihin Huom. Tehokasta peliaikaa yleensä vain max 70%!
Periodinen vs. sporadinen Periodinen tehtävä toistuu tietyin säännöllisin väliajoin Vain periodisia -> rate monotonic scheduling, RMS Sporadinen tehtävä ilmestyy aina joskus tai ainoastaan kerran suoritettavien listalle Reaaliaikaisuuden kannalta keljua Joskus tarvittavia kikkoja: Sporadinen voidaan käsitellä periodisena varautumisena, jos oikeasti kovin kriittistä Periodinen voidaan käsitellä sporadisena, jos periodi kovin pitkä (pidempi kuin tutkittava aikaväli) ja tehtävä ei ole kriittinen
Skedulointiesimerkki Tehtävät A (periodinen) ja B (sporadinen) kahdella prosessorilla B A A A aika Tehtävät A ja B yhdellä prosessorilla, irroittava skedulointi A B A B A aika Onko irroittamaton skedulointi mahdollinen? Milloin irroittamaton skedulointi ei ole mahdollinen?
Ratkaisuvaihtoehtoja Ongelma syntyy vain kun sporadinen tehtävä ilmaantuu -> Voidaanko tehtävä A ajaa tällöin nopeammalla (huonommalla) algoritmilla? Skedulerin tunnettava algoritmit ja niiden ominaisuudet Ajoaika, määräajat Tuleeko ongelma niin usein, että A täytyy aina ajaa huonolla algoritmilla? Jos skedulointi dynaaminen, algoritmin vaihto johtaa testauksen monimutkaistumiseen
Jitter T1 Aktivoituminen kerralla 1 T2 T1 Aktivoituminen kerralla 2 T2
Reaaliaikajärjestelmän skeduloinnista C.L. Liu and J.W. Layland, Scheduling algorithms for multiprogramming in a hard-real-time environment, 1973 Mitä oletuksia paperissa käsitellylle järjestelmälle on esitetty (luku 3)? Ovatko vuoronnusalgoritmit irroittavia (luku 3)? Luvussa 4 esitetään algoritmi, jota kutsutaan nimellä rate-monotonic priority assignment. Miten prioriteetit määräytyvät tässä algoritmissa? Missä mielessä algoritmi on optimaalinen (luku 4)? Mikä on suorittimen maksimikuormitusaste FP algoritmia käytettäessä kun järjestelmässä on kaksi tehtävää? kun järjestelmässä on kolme tehtävää? kun järjestelmässä on mielivaltainen määrä tehtäviä? Miten prioriteetit määräytyvät luvussa 7 esitellyssä dynaamisessa algoritmissa? Milloin dynaaminen algoritmi on optimaalinen (luku 7)? Mikä on prosessorin maksimikuormitusaste dynaamista algoritmia käytettäessä? Mihin prosessorin maksimikuorimitusaste asettuu, jos algoritmit yhdistetään?
Staattinen skedulointi Kaikki lasketaan etukäteen valmiiksi, jonka jälkeen kone suorittaa operaatiot suunnitelman mukaan Yksinkertainen Nopea Ennustettava mutta vaatii tarkkaa tietoa tehtävistä ja on joustamaton Optimaalinen silloin kun pystyy skedulointiin aina silloin kun joku toinenkin staattinen skedulointialgoritmi suoriutuu tehtävästä
Analyysi ja staattinen skedulointi Staattinen tapaus yleensä suoraviivainen Ohjelmoija voi rakentaa skeduloinnin parhaan kykynsä mukaan Sitten käy miten käy; jos tehtävistä on tarkka tieto niin useimmiten ei sijaa epäilykselle jää Työkaluja Suorituspolkujen rakentajat/profiloijat Käytetty algoritmi Riittävän simppeli skeduleri
Dynaaminen skedulointi Skedulointi tehdään ajon aikana kulloisenkin tilanteen mukaisesti On siis pystyttävä valitsemaan suoritettava tehtävä nopeasti! Valintakriteerejä useita: Määräaika, laskenta-aika, jne; Tavoitteena yleensä rakentaa kriteerien perusteella prioriteettipohjainen järjestelmä tavalla tai toisella Optimaalinen silloin kun pystyy skedulointiin aina silloin kun jokin staattinen skedulointialgoritmikin pystyy Huom! Staattinen algoritmi saa enemmän lähtötietoja!
Analyysi ja dynaaminen skedulointi Yleensä se monimutkaisempi tapaus Pikatesti: Rakennetaan järjestelmä, jossa on samantapaiset (varjo/dummy) tehtävät kuin mitä toteutuksessa tarvitaan, ja kokeillaan miten suorituksessa käy Kova prosessorikuorma tarkoittaa oikeastaan aina pahoja ongelmia Monimutkaisempi (ja tarkempi) testi: Ryhdytään selvittelemään suoritusaikoja samaan tapaan kuin staattisen analyysin tapauksessa Analyysi yksityiskohtaisemman varjojärjestelmän mukaisesti
Analyysi ja matemaattiset menetelmät Jotkut algoritmit mahdollistavat skeduloituvuuden arvioinnin perustuen matemaattiseen kaavaan Lähtöarvot: Tehtävät Tehtävien kestoajat Tehtävien määräajat Tehtävien periodit Sporadiset tehtävät Tuloksena yleensä esim. käyttöaste Kyllä == kyllä, Ei == ehkä jollakin muulla skedulointialgoritmilla Usein yksinkertaistuksia liittyen prosessin vaihtamisen kustannuksiin jne. Lopulta lähes aina on pakko kokeilla, jos prosessorin käyttöaste ei jää todella alhaiseksi
Yhteenveto Irrottava ja irroittamaton skedulointi Useita skedulointialgoritmeja, joilla erilaisia ominaisuuksia Pikatesti: Tehdään leikkikuorma ja kokeillaan miten käy Monimutkaisempi testi: Matkitaan järjestelmää tarkemmin; kirjoituspöytäkokeilut Analyysi: Järjestelmän ominaisuuksien perusteella voidaan laskea käyttöastetta/skeduloituvuutta Periodisuus ja sporadisuus