XIP ( anglicky execute-in-place - performance in place ) je technologie, která poskytuje možnost spouštět programový kód přímo z trvalého úložného zařízení, na kterém je umístěn, bez předchozího načtení do paměti RAM . Hojně se používá pro prvotní zatížení počítačů, ve vestavěných systémech kvůli nutnosti šetřit zdroje RAM, v některých případech se používá i pro velké systémy . Od roku 2010 pro použití v serverových systémech Linux s bajtově adresovatelnou energeticky nezávislou pamětíje nahrazena obecnější technologií - DAX .
Aby technologie fungovala, její podpora musí být implementována na třech úrovních: úložiště , v operačním systému a samotné spustitelné programy .
Poprvé je explicitní podpora technologie na straně paměťového zařízení, stejně jako její zkratka a dekódování, popsána ve specifikaci PCMCIA z roku 1990 a je více zaměřena na použití s nezapisovatelnými zařízeními [1] . Zpočátku byla technologie spojena pouze s PCMCIA a její speciální specifikací, která definovala pravidla pro umístění binárního kódu a pořadí, ve kterém byl čten a spouštěn [2] , ale jako taková byla implementována i pro jiná rozhraní a mechaniky, stal se silnějším pro všechna úložná zařízení.
Aby režim XIP fungoval na jednotce, na které je program umístěn, musí být implementováno rozhraní podobné tomu, které používá centrální procesor pro přístup k paměti RAM. Podpora je implementována buď na úrovni middlewaru nebo pomocí souborového systému . Mezi zprostředkující nástroje, které zajišťují práci v režimu XIP, je subsystém MTD ( Memory Technology Device ) , respektive souborové systémy pracující na MTD za úrovní bloku musí podporovat příslušná volání, aby XIP fungoval. Současně ne všechny souborové systémy pracující prostřednictvím MTD podporují XIP, protože mnoho z nich, původně zaměřených na přenosnou technologii, implementovalo kompresi , v tomto ohledu je implementace XIP v nich netriviální, mezi takové systémy souborů patří JFFS2 , YAFFS2 , LogFS , UBIFS [3] . Existují však kompresní souborové systémy s podporou XIP pracující na MTD, jako je AXFS , který vyzdvihuje provoz režimu XIP jako definující vlastnost ( pokročilý souborový systém XIP ) [3] . Hlavní kompresní souborové systémy na úrovni bloků pro perzistentní úložiště, cramfs a squashfs , nepodporují XIP, ale existuje záplata pro cramfs na podporu nekomprimovaného XIP a většina mobilních telefonů založených na Linuxu používala tuto variantu cramfs [3] .
Mezi obecnými souborovými systémy běžícími na úrovni bloků je podpora poskytována v Ext2 a Ext3 ; Ext4 začal portovat podporu XIP, ale v roce 2014 byl nahrazen obecnějšími metodami přímého přístupu - DAX [ [4] .
Navzdory skutečnosti, že tato technologie byla používána ve vestavěných systémech, firmwaru a řadě operačních systémů pracujících v reálném čase již dávno před rokem 2000 [5] , na straně univerzálních operačních systémů byla podpora poprvé implementována v jádře Linuxu verze 2.6 . v roce 2005 [6] .
V roce 2006 byla tato technologie podporována pro sálové počítače IBM zSeries , kde bylo potřeba spouštět mnoho různých instancí z/Linux z prostředí z/VM se společným jádrem a sdílenými knihovnami , ale s různými datovými oblastmi [7 ] . Pokud podobná funkce pro z/OS existovala dříve, její přímá implementace pro Linux by vyžadovala významné změny v kódu jádra operačního systému, takže podpora XIP byla přesunuta do větve jádra pro architekturu s390 a řada dalších funkcí byly podporovány, včetně podpory na straně Ext2 [8] . Navíc se předpokládá, že potřeba IBM podporovat technologii sálových počítačů byla hnací silou implementace XIP na Linuxu [9] .
V roce 2010 byla technologie podporována v NetBSD [5] , kde se implementace ukázala jako poměrně jednoduchá vzhledem k vlastnostem subsystému správy virtuální paměti a buffer cache, navíc je transparentní pro souborové systémy (tzn. nevyžaduje zvláštní podporu z jejich strany).
Aby program fungoval v režimu XIP, je nutné ve fázi kompilace informovat o možnosti oddělení oblastí pro datové segmenty a kódový segment (protože datový segment musí být vytvořen v RAM, resp. segment kódu musí zůstat v systému souborů). GCC k tomu používá volbu -msep-data a navíc programy XIP obvykle vyžadují volbu -mid-shared-library pro generování kódu, který umožňuje volání knihoven pomocí identifikátoru [10] . Nastavení kterékoli z těchto voleb způsobí, že se nastaví příznak -fPIC , který znamená kompilaci nezávislou na poloze .
Hlavním účelem technologie je šetřit RAM zařízení. Nejvýznamnějšího efektu úspory paměti RAM je dosaženo, když je nutné spustit několik instancí programu, v takovém případě se pro obsluhu všech spuštění použije stejný prostor na paměťovém zařízení pouze pro čtení, namísto přidělení oblasti v paměti RAM pro každý instance. Dalším efektem je snížení spotřeby energie zařízení snížením počtu přístupů k volatilní RAM [11] .
Dalším často využívaným efektem je rychlé spouštění z perzistentního úložiště, zejména u dostatečně velkého monolitického linuxového jádra, které se tradičními způsoby musí zpočátku zkopírovat do RAM, v XIP jej lze spustit přímo z disku.
Při použití flash disků je největšího efektu XIP dosaženo u zařízení s adresou bajtů, jako je NOR flash [5] (zatímco NAND flash , stejně jako pevné disky , jsou blokově adresovány a přístup k jedné instrukci znamená čtení obvykle 4 KB při alespoň 512 bajtů). To také vysvětluje použití NOR flash pro bootovací paměti pouze pro čtení a vestavěné systémy, navzdory jeho vyšší ceně a nižší hustotě záznamu (v podmínkách roku 2010).
Dalším efektem je možnost používat perzistentní úložná zařízení jako sdílenou paměť pro spouštění programů bez použití zdrojů hlavní paměti hostitele a oddělování programových a datových segmentů, jak je implementováno v sálových počítačích .
V roce 2014 byla na základě kódu XIP v linuxovém jádře (od verze 3.14) implementována obecnější technologie - DAX ( přímý přístup ), která kombinuje jak možnosti XIP, tak poskytuje potřebná volání pro přímý přístup k datům obcházení mezipaměti stránek [9] . Ze souborových systémů byla technologie nejprve implementována pro Ext4 , později se objevila podpora pro XFS .
Hlavním motivem pro takové zobecnění bylo v polovině 2010 objevení prostorných bytových adresovatelných energeticky nezávislých zařízení NVDIMM a 3D XPoint pro serverové systémy, v souvislosti s nimiž byla relevantní jak běžící programový kód bez přenosu na hlavní paměti a přímý přístup k datům bez přechodného kopírování do RAM. V souborových systémech zaměřených na taková zařízení, jako jsou NOVA , PMFS , SCMFS , Aerie [12] , je podpora DAX implementována od samého počátku a tato funkce je považována za jednu z jejich klíčových vlastností.