Me
Dragi prijatelj strojnog učenja
Pitanja iz skripte višeprocesorski sustavi. Neka pitanja mi nisu bila prejasna pa sam ctrl+c, ctrl+v dio teksta za koji mislim da je relevantan. Probao sam sažeti kolko ide. Ako se služite ovim odgovorima, preporučam da ih prolazite uz skriptu. Ako ima grešaka, svakako javite/ispravite.
1. poglavlje
1.Zašto su višeprocesorski sustavi danas svugdje?
Sadašnja tehnologija ne omogućava efikasno korištenje veće frekvencije rada procesora (a da se ne troši jako puno energije na hlađenje). Danas se zato procesna moć povećava dodavanjem jezgri, prije to nije bilo potrebno jer su se veće performanse mogle dobiti povećanjem frekvencije.
2.Navesti osnovne vrste višeprocesorskih sustava i gdje se one koriste.
- Simetrični višeprocesrski sustav -> svaki procesor je zaseban čip (s jednom jezgrom). Simetrične višeprocesorke sustave nalazimo u “starijim” arhitekturama.
- Višejezgreni procesori -> jedan čip ima više procesorskih jedinki - jezgri. Priručni spremnik podjeljen je na više razina, neke razine koriste više procesorskih jedinki. Većina današnjih sustava spada u ovu kategoriju (pretpostavljam PC-evi, mobiteli)
- Simetrični višeprocesorski sustavi s višejezgrenim procesorima -> Više procesora, svaki procesor ima jezgri (jezgre su valjda procesorske jedinice). Ovu kategoriju koriste poslužitelji.
- Raspodijeljeni višeprocesorski sustavi -> više kartica, na svakoj je više procesora (koji su vjerojatno višejezgreni). Koristi se kod jačih poslužitelja.
3.Navesti prednosti i nedostatke simetričnih i asimetričnih višeprocesorskih sustava.
- Simetrični sustavi -> zajednička djeljena memorija kojom se pristupa preko zajedničke sabirnice.
- Asimetrični sustavi -> pristup memoriji ovisi o vrsti procesne jedinice i udaljenosti memorije od procesora. Npr. procesor sporo pristupa memoriji na drugoj procesnoj kartici.
Konkretne prednosti i nedostaci nisu navedeni u skripti, pretpostavljam da je prednost simetričnih sustava ta da se svaka procesna jedinica može podjednako koristiti za bilo koji problem. Asimetrični sustavi su kompleksniji, ali su bolji za specifične probleme, valjda.
4.Zbog kojih svojstava današnje sustave možemo nazivati i nehomogenim višeprocesorskim sustavima?
U današnjim procesorima svakoj procesnoj jedinici možemo postaviti različitu frekvenciju rada. Ova mogućnost formalno narušava svojstvo homogenosti, ali ne toliko da se takve procesore svrstava u nehomogene.
Neki moderniji višejezgreni procesori imaju različite jezgre:
- brze -> visokih performansa, ali velike potrošnje energije.
- spore -> manje performanse, manja potrošnja
U danom trenutku koristi se jedan od ili oba tipa jezgara. Ovo drugo je “prava” nehomogenost.
5.Što je to sklopovska višedretvenost (npr. hyperthreading)?
Sklopovska višedretvenost omogućava procesoru, tj. pojedinim jezgrama procesora da “istovremeno” izvode instrukcije više dretva. Procesor u pripremi ima instrukcije druge dretve koju izvodi kada je prva dretva blokirana. prema van se takav procesor prikazuje kao dva procesora (ili takva jezgra kao dvije jezgre)
2. poglavlje
1.Navesti načine za očuvanje konzistentnosti strukture podataka jezgre u višeprocesorskom sustavu.
Konzistentnost se može ostvariti kroz:
- zaključavanje -> uglavnom ne koristi jedno zaključavanje (“big kernel lock”) već puno manjih gotovo svaka netrivijalna struktura podataka ima svoj kljuć. Zaključavanje može biti blokirajuće (dretva se zaustavlja) ili radno čekanje (dretva u petlji provjerava jesu li struktura zauzeta)
- atomarne operacije -> niz operacija koje se ne mogu prekinuti.
- oprezno korištenje
2.Koje dvije osnovne vrste zaključavanja postoje? Koja su njihova dobra i loša svojstva?
(vidi prethodno pitanje)
Radno čekanje je dobro koristiti kada znamo da će se struktura ubrzo osloboditi, inače ne valja jer procesor troši vrijeme u petlji ne radeći ništa. Blokirajuće zaključavanje nije pogodno koristiti za vrlo kratka čekanja jer blokiranje dretve za sobom nosi puno kučanskih poslova (npr. spremanje konteksta).
3. Kada ima smisla koristiti atomarne operacije?
Za kratke operacije, npr kada više procesa istovremeno treba pristup nekoj varijabli.
4. Zašto samo korištenje atomarnih operacija ponekad nije dovoljno?
Nisam siguran, ovo su potencijalno relevantni citat iz skripte:
- osim obavljanja navedenih operacija kao atomarnih, ovakvi pozivi mogu utjecati i na susjedne operacije i njihov redoslijed obavljanja
- problem: zbog paralelnog (spekulativnog/oportunog) izvodenja susjednih instrukcija s predvidanjem vrijednosti svakakve “anomalije” se mogu dogoditi, pogotovo kad se u instrukcijama koriste kazaljke (zato su potrebne dodatne radnje uz atomarne instrukcije)
- Dodatno: Atomarne operacije pomažu, ali unose dosta popratnih radnji (nisu jeftine) – stoga se i ne koriste baš svugdje.
5.Koja od spomenutih “razina atomarnosti” je najzahtjevnija pri radu:
- Konzistencija nad slijedom operacija (total ordering) -> nastroža i najzahtjevnija inačica održavanja konzistencije. Traži se da se poštuje redoslijed svih označenih operacija te da operacije koje nisu navedene prije budu gotove iako nisu označene, a operacije koje su kasnije da se kasnije obave.
- Konzistencija nad jednom operacijom -> Osigurava konzistentan redoslijed izvođenja samo označenih operacija.
- Konzistencija nad povezanim vairjablama -> pod “povezane varijable” misli se na korištenje globalnih varijabli koje nisu u dohvati/pohrani već neposredno prije/poslije. Ovakve atomarne operacije osiguravaju i da varijable koje se koriste/mijenjaju prije poslije budu pohranjene/pročitane. Slično kao prva atomarnost, ali nešto jednostavnija.
- Konzistencija nad nepovezanim varijablama -> Slično kao prethodna vrsta atomarnosti, ali se gledaju samo operacije koje koriste iste podatke/memoriju kao označene operacije.
6.Zašto ponekad i samo spremanje/čitanje jedne varijable može biti problem (zašto se koriste READ_ONCE i WRITE_ONCE)?
Kod spremanja/čitanja može doći do problema jer optimizator koda može unijeti razne “optimizacije” koje zapravo narušavaju stabilnost koda. Makroi READ_ONCE i WRITE_ONCE kompajleru daju na znanje da se radi o zajedničkoj varijabli, odnosno da treba biti oprezan prilikom optimizacije.
7.Zašto se za “red pripravnih dretvi” na višeprocesorskom operacijskom sustavu zapravo
koristi više redova, po jedan za svaki procesor?
U višeprocesorskom sustavu po jedna je aktivna dretva u svakom procesoru. S obzirom da svaki procesor ima svoj priručni spremnik, efikasno je da se zaustavljene dretve vrate na procesor na kojem su bile jer će u priručnom spremniku vjerojatno nači sačuvane korisne podatke.
3. poglavlje
1. Koji se kriterij rasporedivanja najčešće koristi za vremenski kritične dretve (SCHED_FIFO,
SCHED_RR) a koji kriterij za nekritične (obične, SCHED_OTHER)?
Vremenski kritične dretve:
- SCHED_FIFO – prioritet osnovni kriterij, red prispijeća sekundarni
- SCHED_RR (Round Robin) – prioritet osnovni kriterij, podjela vremena sekundarni
- SCHED_SPORADIC – prioritet koji se može smanjiti (samo definirano, rijetko implementiran način rasporedivanja)
- SCHED_DEADLINE – rasporedivanje prema krajnjem trenutku završetka (samo Linux)
Nekritične dretve:
- Osnovna ideja je pravedno podijeliti procesorsko vrijeme te kratkim poslovima dati prednost
na Linuxu se za nekritične poslove (SCHED_OTHER) koristi “Potpuno pravedan rasporedivač”.
(engl. Completely Fair Scheduler – CFS) – rasporedivač prati koliko je koja dretva trebala dobiti vremena (u odnosu na njenu razinu dobrote – nice level, “prioritet”), koliko je zapravo
dobila, te na temelju razlike medu njima odabire iduću dretvu
2. Zašto se za svaki procesor stvara zasebni red pripravnih dretvi?
(vidi 7. pitanje 2. cjeline)
Bolje se iskorištava priručni spremnik.
3. Kada se koristi guranje a kada povlačenje dretvi kod rasporedivanja kritičnih dretvi?
Povlačenje, use case -> prva dretva u redu pripravnih na nekom procesoru ima manji prioritet od prve na nekom drugom procesoru. Tada se dretva većeg prioriteta povuće iz reda i izvodi.
Guranje, use case -> Ako se odblokira jedna ili više dretvi većeg prioriteta, te dretve potrebno je gurnuti odgovarajućim procesorima td. u svakom trenutku među svim pripravnim dretvama, aktivne dretve budu one najvećeg prioriteta.
4. Kada se kod nekritičnih dretvi neke prebacuju iz jednog reda pripravnih u drugi (drugog procesora)?
Osnovna načela su pravedna podjela vremena te što veća efikasnost. Nema prioriteta kao kriterije, ali je ipak potrebno povremeno uravnotežiti opterećenja procesora – balansirati redove pripravnih dretvi, da sve ravnopravno dobiju procesorsko vrijeme.
4. poglavlje
1. Navesti klase raspoređivača u Linuxu namijenjene za korisničke dretve.
Klase raspoređivača:
- STOP -> interni, korisi se pri micanju svih zadataka s nekog procesora.
- DEADLINE -> za raspoređivanje vremenski kritičnih zadataka
- REALTIME -> Prioritetno raspoređivanje vremenski kritičnih zadataka
- CFS (Completely Fair Scheduler) -> raspoređivanje nekritičnih zadataka td. s ciljem da svi dobe podjednako vrijeme.
- IDLE -> kad nema drugih zadataka, onda se koriste ovi jezgrini (?)
2. Koja struktura podataka se koristi za ostvarenje “reda pripravnih dretvi” kod CFS-a?
Koriste se RB stabla. Svaki procesor ima svoje stablo, ali može ih biti i više. Čvorovi RB stabla su elementi raspoređivanja (sched_entity). Sched_entity može biti jedan zadatak ili grupa zadataka.
3. Što je to grupa zadataka (task_group) u kontekstu CFS-a?
Task_group opisuje skup zadataka i oni se pohranjuju u čvorovima rb stabla, tj. u strukturi sched_entity. Raspoređivanje procesorskog vremena obavlja se na temelju grupa. Grupe mogu biti stvarane ručno ili, vjerojatnije, automatski
4. Koja je osnovna zamisao u korištenju procesorskih domena (engl. scheduling domains)?
Ideja je prilikom raspoređivanja poslova kroz procesorske domene uzeti u obzir heterpgenost procesora. Domena se sastoji od jedne ili više grupa zadataka. Svaka domena (sched_domain) sadrži skup pravila po kojima joj se pridjeljuje “najkompatibilniji” procesor.