blog · git · desktop · images · contact


x86-64 … und dann?

2022-01-29

Mein derzeitiger Intel i7-3770 unterstützt „x86-64“. Wenn ich also Software installieren will, muss ich das im Hinterkopf behalten. In der Linux-Welt ist das aber meistens nur für das Betriebssystem selbst relevant.

Der Haken an der Sache ist, dass „x86-64“ etwa 20 Jahre alt ist. Seit damals gab es so einige Erweiterungen. Wie immer ist das ziemlich chaotisch: Manche CPUs unterstützen jene Features, andere andere. Wenn man also heute eine CPU mit „x86-64“ kauft, dann ist das nicht mehr so wirklich dasselbe wie eine mit „x86-64“ von 2005 oder auch nur 2015. Software, die also heute für eine moderne CPU kompiliert wird, läuft vielleicht auf einer älteren nicht, obwohl beide dieselbe „Architektur“ haben.

Präziser: Alle CPUs haben dieselbe Grundmenge an Instruktionen – und neuere CPUs haben zusätzliche Instruktionen. Wenn man eine dieser neueren Instruktionen auf einer alten CPU ausführt, kriegt man ein SIGILL. Und das Problem ist jetzt, dass niemand jemals so wirklich definiert hat: „Wenn du die Grundmenge und dann noch dies und das und jenes unterstützt, dann darfst du es als ‚x86-64-foobar‘-CPU bezeichnen.“

Etwas ähnliches ist damals in der 32-Bit-PC-Welt passiert: i386, i486, i586, i686, … Ich meine mich zu erinnern, dass es zwischen i386 und i486 eine klare Trennung gab (vielleicht irre ich mich auch, ist lange her), danach wurde es aber auch hier verwirrend. „i586“ war nicht so wirklich beliebt im Marketing, also nannten sie das Ding lieber … „Pentium“. Das „i686“ danach war auch ziemlich schwammig und wie „i586“ auch kein offizieller Intel-Name.

Zurück zu „x86-64“.

Arch Linux hat mal „Marketing“ betrieben als „optimierte“ Distribution. Damals war damit i686 gemeint. Irgendwann kam dann x86-64 und Ende 2017 viel i686 ganz weg, seitdem war’s nicht mehr „optimiert“. Es war einfach x86-64, weil das ohnehin modern genug war. Aber wie oben erwähnt, gab es seit dem originalen x86-64 Neuerungen und daher fragen sich einige Arch-Entwickler, ob man nicht mal wieder „optimiert“ sein sollte. (Dabei geht es nicht um Marketing, sondern darum, seine CPU möglichst gut auszunutzen. Arch ist ein Community-Projekt, niemand profitiert von Millionen neuer User.)

Aber optimiert für was? Es gibt kein „i786“ oder „i886“ oder sowas in der Richtung. Bis sich dann wohl kürzlich an dieser Situation etwas änderte:

https://gitlab.archlinux.org/archlinux/rfcs/-/blob/master/rfcs/0002-march.rst

Das ist ein Arch-interner RFC und er erwähnt, dass es nun „x86-64-v2“ bis „x86-64-v4“ gibt. Ich kopiere den relevanten Teil mal hier her, falls irgendwann die obige URL nicht mehr funktioniert:

The first of these microarchitecture levels, x86-64-v2, assumes the following on top of base level x86_64 instructions:

CMPXCHG16B, LAHF-SAHF, POPCNT, SSE3, SSE4.1, SSE4.2, SSSE3.

This basically raises the processor feature level requirement to around Intel Nehalem, and supports any x86_64 processor made in the last decade.

The x86-64-v3 microarchitecture requires the following instruction sets:

AVX, AVX2, BMI1, BMI2, F16C, FMA, LZCNT, MOVBE, XSAVE.

That is close to a Haswell processor, but does exclude some recent low end Intel CPU that removed AVX support.

Finally, x86-64-v4 requires:

AVX512F, AVX512BW, AVX512CD, AVX512DQ, AVX512VL

Interessant daran ist, dass das keine Sachen sind, die sich die Arch-Entwickler ausgedacht haben, sondern das kommt von „AMD, Intel, Red Hat und SUSE“. Also können wir darauf hoffen, dass diese Kategorien zum neuen „Standard“ werden, vielleicht so ähnlich wie damals mit i386 und i486. Die Wikipedia nennt diese E-Mail von Florian Weimer auf der LLVM-Mailingliste als die Quelle (oder eher den Ursprung der Diskussion).

In der glibc kann man das Microarchitecture-Level wie folgt ausgeben lassen, sodass man nicht manuell in /proc/cpuinfo die Flags abgrasen muss:

$ /lib/ld-linux-x86-64.so.2 --help

Subdirectories of glibc-hwcaps directories, in priority order:
  x86-64-v4
  x86-64-v3
  x86-64-v2 (supported, searched)

In meinem Fall habe ich also x86-64-v2. Tja, die Kiste ist auch schon 9 Jahre alt. Mein NUC von 2017 mit seinem Celeron N3050 ist auch nur auf x86-64-v2. Mein Netbook von 2011 mit seinem Intel Atom N455 ist noch nicht einmal x86-64-v2, sondern einfach nur x86-64. Auf der anderen Seite steht mein Notebook von 2014 mit seinem i7-4710MQ schon auf x86-64-v3. Aber nicht einmal mein Notebook auf der Arbeit mit seinem i7-8665U von 2019 hat x86-64-v4.

Für den Moment denkt man bei Arch nur darüber nach, x86-64-v3 als zusätzliches Level zu unterstützen. Ich würde auch davon ausgehen, dass der x86-64-v3-Port dann lange parallel zum „alten“ x86-64 existieren wird. Es gab im Thread auf der Mailingliste in 2020 starken Widerstand gegen die vollständige Entfernung. Früher oder später wird das natürlich passieren, i386 gibt es in den verschiedenen Distributionen auch kaum mehr, aber so weit sind wir hier noch nicht.

… das andere Extrem …

Via The Gopher Times – Opus 3:

The computer built to last 50 years von Ploum. Eine sehr ansprechende Idee.

Comments?