Az ARM big.LITTLE egy az ARM Holdings által fejlesztett heterogén számítástechnikai architektúra, melyben (viszonylag) lassabb, kisebb fogyasztású processzor magokat (viszonylag) hatékonyabb és energiaigényesebb magokkal párosítanak. A szándék egy olyan többmagos processzor létrehozására irányul, amely jobban képes alkalmazkodni a dinamikus számítási igényekhez és kevesebbet fogyaszt, mint ami egyedül az órajel skálázásával elérhető.
2011 októberében a big.LITTLE architektúrát az ARM Cortex-A7 maggal együtt jelentették be, amelyet felépítésében eleve a Cortex-A15-tel kompatibilisnek terveztek.[1] 2012 októberében az ARM bejelentette a Cortex-A53 és Cortex-A57 (ARMv8-A) magokat, amelyek szintén kompatibilisek egymással és együtt használhatók egy big.LITTLE csipben.[2] Az ARM később bejelentette a Cortex-A12 magot is a Computex 2013 rendezvényen, amelyet a Cortex-A17 bejelentése követett 2014 februárjában, ez a kettő szintén párosítható egy big.LITTLE konfigurációban a Cortex-A7 típusú maggal.[3][4]
Végrehajtási állapot-migráció
A különböző processzormagokat három módon lehet[5] egy big.LITTLE kialakításban elrendezni, a kernelben megvalósított ütemezőtől függően.[6] Mindegyikben az ütemező átkapcsolhat a lassabb és gyorsabb magok között, tetszőleges irányban, a teljesítmény optimalizálása végett. Az átkapcsolás során a különböző sebességű processzormagok között át kell adni a teljes futási környezetet, ezt nevezik a végrehajtási vagy futási állapot migrációjának.
Klaszterezett kapcsolás
A klaszteres modell megközelítés az első és legegyszerűbb megvalósítás, amelyben a processzort egyenlő méretű, „big” vagy „LITTLE” magokat tartalmazó klaszterekbe sorolják. Az operációs rendszer ütemezője egyszerre csak egy klasztert lát; mikor a teljes processzor terhelése átlépi az alacsony és magas szintek közötti határt, akkor a rendszer klasztert vált. Minden releváns adat átadódik a közös L2 gyorsítótáron keresztül, az egyik mag-klaszter kikapcsol, a másik aktiválódik. Ebben a rendszerben Cache Coherent Interconnect (CCI) összekapcsolást alkalmaznak. Ezt a modellt implementálták pl. a SamsungExynos 5 Octa (5410) egylapkás rendszerében.[7]
In-kernel switcher (CPU migráció)
big.LITTLE IKS
Az in-kernel switcher (IKS, kernelbeli átkapcsoló) módszerrel történő CPU migráció előfeltétele a magok megfelelő elrendezése; ilyenkor egy „big” mag egy „LITTLE” maggal van párosítva, és a csipen sok ilyen azonos páros kialakítására van lehetőség. Minden pár egy virtuális magként működik, és a működés alatt egy valódi mag van (teljesen) bekapcsolva és csak ez az egy mag fut egy időben. A „big” mag fut nagy terhelés esetén, és a „LITTLE” mag, mikor a terhelés alacsony. Mikor a virtuális mag terhelése megváltozik (a magas és alacsony között), akkor a belépő mag bekapcsol, a futási állapot átadódik, a kilépő mag lekapcsolódik, és a feldolgozás az új magban folytatódik. Az átváltás a cpufreq keretrendszer segítségével történik. A Linux 3.11-hez egy teljes big.LITTLE IKS implementáció lett hozzáadva. A big.LITTLE IKS egy jelentős előrelépés a klaszteres migrációhoz képest, a fő különbség abban áll, hogy ebben minden pár külön látható / elérhető az ütemező számára.
Az összetettebb elrendezés együtt jár a „big” és „LITTLE” magok nemszimmetrikus csoportosításával. Egyetlen lapkán egy vagy több „big” mag és sokkal több „LITTLE” mag is elhelyezhető, vagy fordítva. Az Nvidia ehhez hasonló rendszert alkotott a kis fogyasztású „kísérő mag” (companion core) beépítésével a Tegra 3 egylapkás rendszerébe.
A big.LITTLE leghatékonyabb használati modellje a heterogén multiprocesszálás (MP), amely lehetővé teszi az összes fizikai mag egyidejű használatát. A magas prioritású vagy nagy számítási teljesítményt igénylő szálak ebben az esetben a „big” magokhoz rendelhetők, míg az alacsonyabb prioritású vagy kisebb intenzitásigényű szálak, mint például a háttérfeladatok, a „LITTLE” magokkal hajthatók végre.[8]
A Linux kernel fővonalába már beépítették az upstream big.LITTLE GTS patcheket, a Linux 3.10-től kezdve. Ezt a modellt alkalmazzák a SamsungExynos 5 Octa (5420, 5422, 5430) és Hexa (5260) csipekben.[9][10]
Az ütemezés
A páros elrendezés lehetővé teszi az operációs rendszer számára átlátszó átkapcsolást a már létező dinamikus feszültség és frekvenciaváltó eszköz (DVFS) használatával. A létező DVFS támogatás a kernelben (pl. a cpufreq a Linuxban) egyszerűen egy frekvencia- és feszültséglistát lát és ezek fokozatai között kapcsol át belátása szerint, pontosan úgy, ahogy a létező hardveren teszi. Ekkor azonban az alacsonyabb szintű foglalatok a „LITTLE”, a magasabb szintűek pedig a „big” magokat aktiválják.
Alternatív megoldásként az összes mag láthatóvá tehető a kernel ütemező számára, amely eldönti, hogy melyik szál vagy folyamat melyik magnak lesz kiosztva. Ez szükséges a nem párosított elrendezésekben, de a párosított magokkal is használható. Ez egyedi problémákat állít a kernel ütemezője elé, amelyben eddig azt feltételezték, legalábbis a modern tömegcikk-hardverek körében, hogy az SMP rendszerben minden mag egyenrangú (azonos).
A globális feladatütemezés előnyei
A terhelés finomabb felbontásban történő vezérlése, mint ami a magok között migrálható. Mivel az ütemező közvetlenül migrálja a feladatokat a magok között, a kernel többletterhelése csökken és az energiamegtakarítás ennek megfelelően növekszik.
Az ütemezőben való megvalósítás miatt az átváltási döntések végrehajtása gyorsabb, mint az IKS-hez kialakított cpufreq keretrendszerben.
Lehetőség nyílik a nem-szimmetrikus egycsipes rendszerek (SoC-k) könnyű támogatására (pl. 2 Cortex-A15 mag és 4 Cortex-A7 mag egy rendszerben).
Az összes mag egyidejű használatának lehetősége javítja az egylapkás rendszer teljes adatátviteli sebességét, tehát a csúcsteljesítményt, az IKS-sel összehasonlítva.
Ez a szócikk részben vagy egészben az ARM big.LITTLE című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.