ARM big.LITTLE

**ARM big.LITTLE** on Arm Holdings poolt arendatav protsessori arhitektuur, kus kombineeritakse energiasäästlikumad ja aeglasemad tuumad (LITTLE) suurema jõudluse ja energiatarbega tuumadega (big). Kusjuures mõlemat tüüpi tuumad kasutavad sama käsustikku.

big.LITTLE avalikustati esmakordselt 2011.a oktoobris koos Cortex-A7 ja Cortex-A15 protsessoritega, mis on omavahel ühilduvad big.LITTLE konfiguratsioonis, kus Cortex-A7 on "LITTLE" rollis ja Cortex-A15 "big" rollis.

## Eesmärk
big.LITTLE proovib saavutada korraga nii maksimaalset jõudlust kui ka energiasäästilkust ja pikka aku kestust. Selleks kasutatakse "suurt" suure jõudlusega protsessorit nõudlike ülesannete jaoks ja "väikest" energiatõhusat protsessorit lihtsamate käskude (nt. taustaprotsessid) täitmiseks.

"Väiksed" tuumad on valmistatud kasutades erinevat mikroarhitektuuri, mis tähendab, et tänu oma lihtsamale disainile on need tuumad energiasäästlikumad.

## Võimalikud mudelid

### '''Cluster''' '''migration'''

Tuumad on jagatud kahte klastrisse, üks klaster koosneb "suurtest" tuumadest ning teine "väikestest" tuumadest. Korraga saab aktiivne olla ainult üks klaster, s.t. et korraga ei saa töötada nii "suured" kui ka "väiksed" tuumad.

Koormuse muutumise korral, kas madalast kõrgesse või kõrgest madalaks, edastatakse protsessid ühest klastrist teise ning esimene lülitatakse välja. Antud mudel on ebaefektiivne, kui "väikeste" tuumadega klastri ühel tuumal on kõrge koormus, kuid teised klastri tuumad on madala koormusega olekus. Ebaefektiivsus kulgeb selles, et antud olukorras võidakse energiasäästlikum klaster välja lülitada ning töö üle viia suurema jõudluse ja energiatarbega klastri peale.

### CPU migration
Iga "suur" tuum on paaris "väikse" tuumaga, mõlemaid tüüpi tuumasid peab sama kogus olema. Korraga saab aktiivne olla ainult üks tuum iga paari kohta, ehk maksimaalselt saavad aktiivsed olla ainult pooled tuumadest.

Süsteem jälgib iga tuuma koormust ja valib aktiivse tuuma vastavalt jõudluse vajadusele. Koormuse languse (kõrgelt madalaks) korral protsessi olek edastatakse "suurelt" tuumalt "väiksele" ning koormuse tõusu korral vastupidi. Seejärel protsessid jätkuvad uuel tuumal ja mitteaktiivne tuum lülitatakse välja.

### Global task scheduling
Võimaldab kõikide tuumade üheaegset kasutamist ning tuumasid on võimalik korraga kasutada igas kombinatsioonis. "Suuri" ja "väikseid" tuumasid võib olla erinev kogus.

Mitteaktiivsed tuumad lülitatakse välja energia säästmiseks. Kui kõik tuumad klastris on väljalülitatud, lülitatakse ka klaster välja.

## Ressursijaotus
Selleks, et süsteem saaks määrata, millised ülesanded on intensiivsed ja millised on kerged, jälgib plaanur iga lõime kaalutud keskmist koormust lõime kasutusel olnud aja jooksul. Kuna koormus on kaalutud, siis viimase ülesande värskeim koormus mõjutab keskmise arvutusi kõige rohkem.

Mõõdetud keskmist kasutatakse, et otsustada kuidas ja millal allokeerida lõime "suurele" või "väiksele" tuumale. Selleks on kaks lävendit: üles migreerimine ja alla migreerimine.

Ressursijaotuseks, global task scheduling mudeli puhul, on kasutusel järgmised meetodid:

### Fork migration
Kasutatakse, kui luuakse uus lõim. Sel hetkel puudub varasema koormuse andmed. Süsteem allokeerib lõime vaikimisi "suurele" tuumale, eeldusel et väikse koormuse korral lõim migreeritakse kiiresti "väiksele" tuumale.

Sellest meetodist saab kasu suure koormusega ülesanded, sest nad ei kaota jõudlust erinevalt, kui nad oleksid vaikimisi käivitatud "väiksel" tuumal.

### Wake migration
Kui ülesanne, mis oli eelnevalt mitteaktiivne, on valmis tegutsema, peab jaotur otsustama milline tuum teostab selle täitmise. Valiku tegemiseks kasutab jaotur ülesande koormuse ajalugu. Kuna koormuse keskmist ei uuendata hetkel, kui ülesannet ei täideta, siis koormuse keskmine on sama, mis oli hetkel, kui käsku viimati täideti. Sel põhjusel üldiselt ülesande täitmine jätkub sama tüüpi tuuma peal, eeldusel et ülesande koormus ei muutu kohe.

### Forced migration
See meetod lahendab probleemi, mis tekib pika elueaga lõimedega, mis ei satu unerežiimi väga sageli. Isegi kui koormus püsib sama, siis kaalutud koormuse väärtus tõuseb ajas. Kui kaalutud keskmine ületab üles migreerimise lävendit, siis ülesanne edastatakse "suurele" tuumale.

### Idle pull migration
See meetod on loodud aktiivsete "suurte" tuumade parimaks kasutamiseks. Kui "suurel" tuumal pole ülesannet, mida täita, siis kontrollitakse kõiki "väikseid" tuumasid, et teada saada, kas ühelgi tuumal täidetav ülesanne ületab üles migreerimise lävendit. Vastava ülesande leidmisel see edastatakse mitteaktiivsele "suurele tuumale", vastasel juhul "suur" tuum lülitatakse välja.

### Offload migration
Pika elueaga lõimed kasutavad "suuri" tuumasid, jättes "väiksed" tuumad mitteaktiivseks. Selleks perioodiliselt edastatakse lõimesid allapoole "väikestele" tuumadele, et vähendada kasutamata ressursse. Kui alla edastatud lõimed ületavad üles migreerimise lävendit, võidakse nad tagasi üles migreerida.

## DynamIQ big.LITTLE
2017.a mais avalikustati DynamIQ arhitektuur, mis on big.LITTLE arhitektuuri järeltulija. DynamIQ suurendab mitmetuumalisuse funktsionaalsust ning paindlikkust, samal ajal lubab veelgi suuremat energiatõhusust ja jõudlust. 

DynamIQ kombineerib "suured" ja "väiksed" tuumad üheks klastriks, võrreldes big.LITTLE arhitektuuriga, kus "suured" ja "väiksed" tuumad olid eraldi klastrites. See kiirendab andmete liikumist "suurte" ja "väikeste" tuumade vahel. Juurde lisandub ka uusi konfiguratsiooni kombinatsioone, nagu näiteks 1 "suur" + 3 "väikest" tuuma ja 1 "suur" + 7 "väikest" tuuma. DynamIQ suurendab maksimaalse tuumade arvu klastri kohta Armv9.2 puhul 14-ne tuumani, võrreldes big.LITTLE 4 tuuma piiranguga. Igal tuumal on oma L2 vahemälu ning klastril on jagatud L3 vahemälu. Kõik ülesannete üleminekud ja andmete jagamised "suurte" ja "väikeste" tuumade vahel toimuvad nüüd klastri sees läbi L3 vahemälu.

DynamIQ võimaldab igal tuumal kasutada erinevat taktsagedust, võrreldes big.LITTLE arhitektuuriga, kus klastris kõikidel tuumadel oli üks ja sama taktsagedus. DynamIQ süsteemid lülituvad kiiremini protsessori võimsuse olekute vahel (nt. sisselülitatud, väljalülitatud). Lisaks on veel autonoomne mäluhalduse funktsioon, mis võimaldab L3 vahemälu osasid välja lülitada, et vähendada lekkevoolu, kui mälu pole kasutusel. Mälu on võimalik välja lülitada 0%, 50% ja 100% ulatuses.

## Viited