Esta, confesso que não sabia: micro-arquitetura x86_64 possui “versões”!

Com a evolução do set de instruções x86 e suas arquiteturas de processadores, novas tecnologias são adicionadas com o passar do tempo, com o objetivo de prover diversas melhorias gerais para a performance e a eficiência das unidades de processamento. Em geral, elas são baseadas nas extensões para a manipulação de instruções e representam um grande impacto, para os sistemas computacionais que a utilizam. Mas para tirar todo o proveito das vantagens que elas oferecem, os sistemas operacionais e as aplicações disponíveis precisam ser compatíveis…

“The story of the x86 instruction set began about 39 years ago with the introduction of the Intel 80386, commonly referred to as the 386. This was a pivotal moment in the history of modern desktop and server computing. Launched in 1985, the 386 was Intel’s first 32-bit processor and was equipped with a full memory management unit, enabling it to run operating systems that utilize virtual memory. However, the evolution of x86 technology didn’t stop at the 386. Over time, this older chip, its microarchitecture, and its instructions were phased out…” — by Android Authority.

Lembro-me da Intel anunciar com grande pompa a extensão MMX para as suas linhas de processadores Pentium (1997), assim com a AMD respondeu à altura com as sua extensão 3DNow! (1998) para as suas linhas de processadores K6. Tempos depois, foram a vez das extensões SSE e suas versões, assim como as extensões modernas como a AVX (1, 2 e AVX-512), MOVBE, FMA. Embora elas tenham surgido de forma “gradual”, elas foram organizadas em gerações que vão desde a clássica x86-64v1 (MMX, SSE e SSE2, a partir de 2013), passando pelas bem suportada x86-64v2 (SSE3, SSE4.1 e SSE4.2, de 2008 a 2011) e por fim, chegando na atual x86-64v3 (AVX2, MOVBE, FMA, a partir de 2013).

O problema é que em vista da existência de diferentes gerações de arquiteturas baseadas em diferentes versões do set de instruções x86-64, nem todos os sistemas operacionais suportam as mais antigas de forma adequada ou ainda, optam por suportar somente as mais recentes, para garantir a máxima performance. Este é o caso do SuSE Linux, que além de recomendar a utilização de processadores x86-64v2, vai descontinuar o suporte para as arquiteturas mais antigas (que para variar possuem +/- 20 anos). Já o Red Hat Enterprise Linux 9, desde meados do ano passado (2023) já não suporta os processadores x86-64v1.

No geral, as próximas edições das principais distribuições irão migrar para o set de instruções x86-64v3, como é o caso do Red Hat Enterprise Linux 10, das próximas compilações do Ubuntu Server (experimental) e do Gentoo (que por sua vez, é um sistema rolling-release). Já outras como o NixOS, ainda estão em fase de transição da v2 para a v3. O problema está no fato de que muitos sistemas ainda irão prover suporte para ambos os set de instruções e por isto, irão apresentar performances “diferentes” (sejam boas ou ruins) para cada uma delas. Para variar, nem todas processadores designados como “compatíveis” com determinado set de instrução, também irá suportar todas as extensões designadas para elas.

A esta altura do campeonato, os (poucos) leitores já devem ter entendido onde quero chegar. Será que em breve, teremos sistemas operacionais funcionando de forma restrita e limitada em plataformas que em tese, deveriam oferecer plena performance? Ou testes de benchmark que apresentam resultados contraditórios, de acordo com a plataforma e o sistema operacional em uso? Sem contar ainda, os problemas relacionados a segurança que por sua vez mitigados (através das atualizações de micro-código do processador), acabam afetando de forma agressiva a performance e a estabilidade do sistema? Talvez, eu esteja exagerando…

Será que um dia, terei que compilar a minha própria distribuição? &;-D