Hlavní navigace

x32 ABI: rozporuplná architektura, kterou vlastně nikdo nechce

3. 4. 2014
Doba čtení: 6 minut

Sdílet

O x32 ABI se začalo hovořit už v roce 2011 a podpora v jádře, glibc a GCC existuje od roku 2012. Zdálo by se, že v nasazení tedy vůbec nic nebrání a nová architektura se může směle šířit do mnoha distribucí. Zatím se tak ale neděje a vývoj ustal po prvních krůčcích. Jaký je stav po dvou letech?

O x32 ABI jsme psali přibližně před rokem a půl v článku 32 bitů + 64 bitů = to nejlepší z obou světů v x32 ABI. Připomeňme si ve zkratce, o co se jedná. Jde o rozhraní jádra, které umožňuje běh aplikací v 64bitovém režimu, přičemž jsou ale používány 32bitové ukazatele. To sice omezuje velikost adresního prostoru jedné aplikace na klasické 4 GB, ale zároveň to snižuje paměťovou náročnost aplikace a nechává ve hře všechny výhody 64bitového režimu, jako jsou větší registry nebo vyšší výkon při výpočtech v plovoucí čárce.

Výsledkem je podle autorů40% nárůst výkonu při paměťově náročné práci proti tradičnímu plně 64bitovému systému. Jasně vítězí kratší ukazatele. Proti tomu při matematických operacích se rozdíl proti plnohodnotným 64 bitům smazává, protože tyto operace nejsou náročné na paměť. Proti tomu ale zase naskakuje 40% nárůst hrubého procesorového výkonu proti 32 bitům. Tady vítězí možnost použití rozšířené instrukční sady a větších registrů.

Zdálo by se tedy, že jde o vynikající počin, který má jen výhody a uživatel z něj může pouze získat. Má totiž obojí z 32– i 64bitového systému: rychlejší instrukce a menší spotřebu paměti. Podpora v Linuxu existuje už přibližně rok a půl a už tehdy se objevily první krůčky směrem k reálnému nasazení. V roce 2012 totiž některé distribuce oznámily, že se chtějí přinejmenším o x32 ABI zajímat.

Nápad pěkný, ale nevyužitý

Bohužel realita byla nakonec jiná a ani na začátku roku 2014 není x32 ABI nijak rozšířené. Ubuntu mělo na začátku zájem, ale nakonec zůstalo jen u základní podpory v Ubuntu 13.04, přičemž nikdy nevznikl oficiální archiv s balíčky kompilovanými pro x32.

Podobně na tom je i Debian, na kterém se také základní kroky udělaly, je možné nainstalovat neoficiální balíček s upraveným jádrem a pod ním se pak chrootnout do x32 prostředí. Na Debian-ports je k dispozici archiv s balíčky, ale tím zjevně také veškeré práce skončily.

Největším průkopníkem v tomto směru bylo a je Gentoo, což asi není překvapení. Jde o velmi progresivní distribuci, ve které navíc díky kompilaci na uživatelském počítači není problém podobné experimenty vyzkoušet. Pro Gentoo tedy vyšel instalační stage 3 a později přibyl správný USE flag, který by měl kompilaci umožnit. Oficiální dokumentace ale neexistuje, střípky se dají najít na fóru.

Podpora v Gentoo je stále na stejné úrovni. Opravila se spousta balíků, takže pokud si to člověk nainstaluje, většina základních věcí by mu měla fungovat, potvrzuje Tomáš ‚Scarabeus‘ Chvátal, vývojář Gentoo a člen Gentoo councilu. Podle Ondřeje Caletky je možné takto základ Gentoo zkompilovat, ale zdaleka ne všechny balíčky. Nepodaří se například sestavit open-vm-tools, takže pokud jste chtěli zkusit x32 Gentoo nanečisto ve VMware, máte problém.

V loňském roce se tak vlastně kolem x32 téměř nic nedělo. Jen Google oznámil, že by rád do LLVM dostal podporu, aby ji pak mohl používat v rámci své technologie Google Native Client, který umožňuje v prohlížeči v sandboxu provozovat nativní kód. Podle webu x32 ABI není kolem projektu příliš živo, jen ještě v loňském roce vyšel obraz Fedory 19 pro VirtualBox.

Proč to nikdo nechce?

Otázka zní, proč se x32 nešíří, ačkoliv je půda připravená, celý koncept je vymyšlený a zjevně (alespoň někde) funkční. Distribuce se ale o nějaké masivní rozšíření vůbec nesnaží, naopak se zdá, že novinka nakonec zmizí v propadlišti dějin. Důvody jsou podle Tomáše Chvátala především praktické: Obecně se dá říct, že čím méně platforem distribuce podporuje, tím je lépe ohledně podpory. Zvlášť u binárních distribucí znamená další architektura hromadu práce navíc, protože je potřeba znovu vygenerovat všechny balíčky a ty distribuovat na mirrorech, testovat, validovat instalaci a přidělávat si práce.

V tomto případě není navíc přínos tak zásadní, aby stálo za to celé martyrium podstupovat. Obecně x32 ABI řeší problém, který většina uživatelů nepocítí a netrápí je. Naopak většina benchmarků stále ukazuje, že je to pomalejší než plně 64bitový systém, říká Chvátal. Přidává konkrétní ukázku výkonu porovnávající AMD64 a x32.

AMD64:

$ time python3 -c "import math ; l = [i + i for i in range(100000000)];"
real    0m8.358s

x32 ABI:

$ time python3 -c "import math ; l = [i + i for i in range(100000000)];"
real    0m13.213s

Přesto podle Tomáše Chvátala mohou existovat případy, kdy se přechod na nové ABI vyplatí. Má to i reálné použití. Zvlášť pokud je paměť opravdu váš první a jediný problém. Dalo by se to použít asi v cloudu, kde si člověk platí za zdroje a provozovatele zároveň samozřejmě trápí snaha nacpat co nejvíce virtuálních mašin do co nejmenšího paměťového prostoru. Pro většinu administrátorů by ale zvyšování počtů spravovaných platforem přineslo jen další režii. Ve většině případů se dá říct, že pokud mám dvacet serverů na AMD64 a chci dva z nich migrovat na x32 ABI, měl bych si to dobře rozmyslet. Je to prostě další platforma, kterou se musím zabývat a řešit její podporu, vysvětluje Chvátal.

Architektura plná mýtů

Problém s výkonem potvrzuje i Diego Elio Pettenò, který na svém blogu publikoval řadu článků o x32, většinu kritických. Je zajímavé, že přestože většina benchmarků vypadá dobře, čísla jsou obvykle velmi těsná a i Intel prezentuje ‚velká‘ čísla jen v porovnání s původním x86 ABI — nikdo neříká, že budou lepší než u x86–64, píše v jednom z článků a zároveň kritizuje syntetičnost obvykle uváděných benchmarků. Realita pak samozřejmě může vypadat jinak.

Pettenò zároveň zpochybňuje tvrzení o tom, že nová architektura přináší menší kód, kterého se pak vede více do cache a procesor ho provede rychleji. Upozorňuje na to, že se vlastně nemění instrukční sada, ale jen „datový model“. Teoreticky tak může nově zkompilovaná aplikace lépe využívat datovou cache (ale ne instrukční), ale je podle něj výhodnější podívat se na stav kódu a optimalizovat ho tak, aby využíval cache lépe. Navíc je třeba si uvědomit, že syscally zůstávají kvůli kompatibilitě s datovými strukturami jádra stejné jako u AMD64.

Svá tvrzení dokládá na velikosti knihovny libc, jejíž spustitelný kód ve variantě x32 byl dokonce mírně větší (asi o 1,6 %) než u varianty AMD64. Samozřejmě množství alokované datové paměti se díky kratším ukazatelům skutečně zmenšilo. Ovšem rozhodně nejde o poloviční hodnoty, reálně se ušetřilo asi 30 KB paměti, tedy necelých 11 %. Efektivita je tedy v praxi výrazně menší, než by se mohlo z teorie zdát. Reálně je tak možné v celém systému ušetřit řádově několik jednotek megabajtů. Pravděpodobně to nestojí za to.

UX DAy - tip 2

Před deseti lety možná…

Diego Elio Pettenò tak nakonec uzavírá s tím, že celý tento koncept by mohl mít jistou šanci se prosadit, ale tak před deseti lety. Tou dobou nastupovala 64bitová architektura a x32 ABI by mohlo uspět jako jakýsi „přechodový mechanismus“, zvlášť v případě, že by bylo možné jej kombinovat v jedné binárce (FatELF) s 32bitovým x86 kódem. Ano, je škoda, že Intelu trvalo tak dlouho, než s x32 přišel. Ve chvíli, kdy je portace většiny software na 64 bitů hotová, by podpora x32 znamenala celou práci dělat znovu, upozorňuje Pettenò.

Totéž potvrzuje Tomáš Chvátal z Gentoo: Mohlo by to mít větší šanci, když se rozjela migrace na AMD64, protože x32 je v podstatě bližší x86. Takže migrace je snazší, protože znamená minimální nutnost úprav v kódu. Dnes už to asi kromě nadšenců nebo uživatelů specifických nasazení nikdo nevyužije, takže se to nikdy neprosadí. Propadliště dějin tak pravděpodobně zaklaplo.

Byl pro vás článek přínosný?

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.