XIP

Az XIP ( eng.  execute-in-place - execution in place ) egy olyan technológia, amely lehetővé teszi a programkód közvetlen végrehajtását arról a perzisztens tárolóeszközről , amelyen az található, anélkül, hogy először be kellene töltenie a RAM -ba . Széles körben használják számítógépek kezdeti betöltésére , beágyazott rendszerekben a RAM erőforrások megtakarítása miatt, esetenként nagy rendszerekben is használják . A 2010-es évek óta használható bájtcímezhető , nem felejtő memóriával rendelkező kiszolgálói Linux rendszerekbenegy általánosabb technológia váltja fel - DAX .

A technológia működéséhez a támogatását három szinten kell megvalósítani: tárolás , operációs rendszerben és maguk a végrehajtható programok .

Tárolóeszközök

Először az 1990-es PCMCIA specifikáció írja le a technológia kifejezett támogatását a tárolóeszköz oldalán, valamint annak rövidítését és dekódolását, és inkább a nem írható eszközökkel való használatra irányul [1] . A technológiát kezdetben csak a PCMCIA-val és annak speciális specifikációjával társították, amely meghatározta a bináris kód elhelyezésének szabályait, illetve az olvasási és végrehajtási sorrendet [2] , de mint ilyen technikát más interfészekre és meghajtókra is implementálták, minden tárolóeszköznél erősebb lett.

Ahhoz, hogy az XIP mód működjön azon a meghajtón, amelyen a program található, a központi processzor által a RAM eléréséhez használt interfészhez hasonló interfészt kell megvalósítani. Ennek támogatása köztes szoftver szinten vagy fájlrendszeren keresztül valósul meg . Az XIP módban munkát biztosító köztes eszközök közé tartozik az MTD ( Memory Technology Device ) alrendszer , illetve a  blokkszinten túl MTD-n dolgozó fájlrendszereknek támogatniuk kell a megfelelő hívásokat az XIP működéséhez. Ugyanakkor nem minden MTD-n keresztül működő fájlrendszer támogatja az XIP-et, mivel sok közülük, amelyek eredetileg a hordozható technológiára összpontosítottak, tömörítést valósítottak meg, e tekintetben az XIP megvalósítása bennük nem triviális, ilyen fájlrendszerek közé tartozik a JFFS2 , YAFFS2 , LogFS , UBIFS [3] . Vannak azonban MTD-n működő XIP-képes tömörítési fájlrendszerek, például az AXFS , amely az XIP mód működését emeli ki meghatározó jellemzőként ( advanced XIP filesystem ) [3] . A főbb blokkszintű tömörítési fájlrendszerek az állandó tároláshoz, a cramfs és squashfs  nem támogatják az XIP-et, de van egy javítás a tömörítetlen XIP támogatására, és a legtöbb Linux-alapú mobiltelefon a cramfs ezen változatát használta [3] .  

A blokkszinten felül futó általános célú fájlrendszerek közül az Ext2 és Ext3 támogatás biztosított ; Az Ext4 megkezdte az XIP támogatás portolását, de 2014-ben felváltották az általánosabb közvetlen elérési módok - DAX [ [4] .

Operációs rendszerek

Annak ellenére, hogy a technológiát már jóval a 2000 -es évek előtt használták beágyazott rendszerekben, firmware -ben és számos valós idejű operációs rendszerben [5] , az általános célú operációs rendszerek oldalán a támogatást először a Linux kernel 2.6-os verziójában vezették be. 2005-ben [6] .

2006-ban a technológiát az IBM zSeries nagyszámítógépek támogatták, ahol a z/Linux sok különböző példányának futtatására volt szükség z/VM környezetből , közös kernellel és megosztott könyvtárakkal , de eltérő adatrégiókkal [7 ] . Ha a z/OS -hez korábban is létezett hasonló szolgáltatás , akkor ennek közvetlen megvalósítása Linuxra jelentős változtatásokat igényelne az operációs rendszer kernelkódjában, így az XIP támogatás átkerült a kernel ágba az s390 architektúránál , és számos további szolgáltatás támogatottak, beleértve a támogatást az Ext2 oldalon [8] . Ezen túlmenően az IBM nagyszámítógépes technológiájának támogatása volt a hajtóereje az XIP Linuxon való megvalósításának [9] .

2010-ben a NetBSD [5] támogatására került a technológia , ahol a megvalósítás a virtuális memória-kezelő alrendszer és a puffer-gyorsítótár adottságai miatt viszonylag egyszerűnek bizonyult, ráadásul a fájlrendszerek számára is transzparens (vagyis részükről nem igényel különösebb támogatást).

Összeállítás

Ahhoz, hogy a program XIP módban működjön, a fordítási szakaszban tájékoztatni kell az adatszegmensek és a kódszegmensek területeinek elkülönítésének lehetőségéről (mivel az adatszegmenst RAM-ban kell létrehozni, ill. a kódszegmensnek a fájlrendszerben kell maradnia) . A GCC ehhez a -msep-data opciót használja , és emellett az XIP-programok általában a -mid-shared-library opciót igénylik olyan kód létrehozásához, amely lehetővé teszi a könyvtárak azonosítóval történő hívását [10] . Ezen opciók bármelyikének beállítása az -fPIC jelzőt  , amely a pozíciófüggetlen fordítást jelenti, beállítja.

Hatások

A technológia fő célja az eszköz RAM-jának mentése. A RAM megtakarítás legjelentősebb hatása akkor érhető el, ha a program több példányát kell futtatni, ilyenkor az írásvédett memóriaeszközön ugyanazt a helyet használják az összes indítás kiszolgálására, ahelyett, hogy mindegyik RAM-ban egy területet lefoglalnának. példa. Egy másik hatás az eszköz energiafogyasztásának csökkentése az ingadozó RAM-hoz való hozzáférések számának csökkentésével [11] .

Egy másik gyakran használt hatás a perzisztens tárhelyről történő gyors rendszerindítás, különösen egy kellően nagy monolitikus Linux kernel esetén, amelyet hagyományos módon kezdetben a RAM-ba kell másolni, XIP-ben pedig közvetlenül a meghajtóról is végrehajtható.

Flash meghajtók használatakor az XIP legnagyobb hatását a bájtcímű eszközökkel éri el, mint például a NOR flash [5] (míg a NAND flash , a merevlemezekhez hasonlóan blokkcímzett , és egyetlen utasítás elérése általában 4 KB olvasását jelenti, legalább 512 bájt). Ez magyarázza a NOR flash használatát a csak olvasható memóriákban és a beágyazott rendszerekben, annak ellenére, hogy magasabb költsége és alacsonyabb felvételi sűrűsége van (a 2010-es évek körülményei között).

Egy másik hatás az állandó tárolóeszközök megosztott memóriaként való használatának képessége a programok végrehajtásához a gazdagép fő memóriaerőforrásainak használata, valamint a program- és adatszegmensek szétválasztása nélkül, a nagyszámítógépekben megvalósított módon .

DAX

2014-ben a Linux kernel XIP kódja alapján (a 3.14-es verziótól) egy általánosabb technológiát vezettek be - a DAX-t ( közvetlen  hozzáférés ), amely mindkét XIP képességet egyesíti, és az oldal gyorsítótárát megkerülve biztosítja a szükséges hívásokat a közvetlen adateléréshez [9] . A fájlrendszerek közül a technológiát először Ext4 -re implementálták , később megjelent az XFS támogatása .

Az általánosítás fő motívuma a 2010-es évek közepén a nagy kapacitású, bájtcímezhető, nem felejtő NVDIMM és a 3D XPoint eszközök megjelenése volt szerverrendszerekhez, amelyek kapcsán mindkét futó programkód relevanciája a főre való átvitel nélkül. memória és közvetlen hozzáférés az adatokhoz, közbenső RAM-ba másolás nélkül. Az ilyen eszközökre összpontosító fájlrendszerekben, mint például a NOVA , PMFS , SCMFS , Aerie [12] , a DAX támogatás a kezdetektől fogva megvalósul, és ez a funkció az egyik legfontosabb jellemzőjük.

Jegyzetek

  1. Mark Brownstein. A PCMCIA támogatja a PC-kártya  specifikációit  // InfoWorld . - 1990. - 1. évf. 12 , sz. 36 .
  2. Winn Rosh. PCMCIA: A jövő bővítési rendszere  // PC Mag  . - 1993. - 1. évf. 12 , sz. 2 . - P. 321-326 . "Az XIP a PCMCIA saját specifikációja, amely lehetővé teszi a csak olvasható memóriában lévő programkód végrehajtását anélkül, hogy először be kellene tölteni a fő rendszerbe... Az XIP szabvány meghatározza, hogy a ROM autókon kódolt programokat hogyan kell olvasni és végrehajtani."
  3. 1 2 3 Hulbert, 2008 .
  4. Jonathan Corbet. Fájlrendszerek támogatása az állandó memóriában (nem elérhető hivatkozás) . LWN.net (2014. szeptember 2.). Letöltve: 2018. május 26. Az eredetiből archiválva : 2018. december 21. 
  5. 1 2 3 Uebayashi, 2010 .
  6. Corbet, 2005 .
  7. ↑ Az Execute -in- Place technológia használata Linux alatt z/VM rendszeren  . SC34-2594-01 . IBM (2010. március 1.). Letöltve: 2018. május 26. Az eredetiből archiválva : 2022. január 20.
  8. Fájlleképezések helyben történő végrehajtása . Linux dokumentáció. Fájlrendszerek (2008. november 13.). Letöltve: 2018. május 26. Az eredetiből archiválva : 2022. április 15.
  9. 12 Jake Edge. Állandó  memória . LWN.net (2014. március 26.). Letöltve: 2018. május 26. Az eredetiből archiválva : 2018. május 27.
  10. Richard Stallman . A GNU fordítógyűjtemény használata. A GCC 4.1.2-es verziójához. - Boston: GNU Press, 2005. - S. 153. - 470 p.
  11. Benavides et al., 2008 .
  12. Jian Xu, Steven Swanson. NOVA: A naplózó szerkezetű fájlrendszer hibrid illékony/nem felejtő főmemóriákhoz  //  A 14. USENIX Fájl- és Tárolási Technológiák Konferencia (FAST '16) anyaga. - Santa Clara, CA : USENIX , 2016. - P. 323-328 . - ISBN 978-1-931971-28-7 .

Irodalom

Linkek