Linux come Windows sui requisiti CPU con TSC? Il titolo fa rumore, ma la realtà è un'altra

Linux rende di fatto obbligatorio il supporto al Time Stamp Counter (TSC) sulle CPU x86. La novità non colpisce i PC moderni, ma permette al kernel di eliminare vecchi percorsi destinati a processori ormai fuori supporto.

Il kernel Linux sta alzando, quasi senza rumore, il requisito minimo per le CPU x86 che può ancora supportare. La modifica riguarda il Time Stamp Counter, o TSC, un contatore hardware presente nei processori x86 fin dall’era Pentium e usato da decenni per misurare intervalli temporali estremamente brevi con una precisione molto elevata.

Una patch confluita nel kernel Linux 7.2 utilizza il parametro CONFIG_X86_TSC senza condizioni: la presenza del TSC diventa un requisito di avvio e non più una caratteristica opzionale da gestire a compile-time.

Diverse testate hanno accostato la novità introdotta nel kernel Linux ai requisiti hardware imposti da Windows 11: il paragone, però, risulta tendenzioso e fuorviante. Linux non sta chiedendo una funzione recente ai PC attuali: sta piuttosto eliminando codice nato per CPU che risalgono a oltre 30 anni fa: l’intervento arriva infatti dopo una lunga operazione di pulizia dell’architettura x86.

Linux 7.1 ha iniziato a rimuovere il supporto per i486 e numerose piattaforme derivate; il ciclo successivo ha eliminato anche configurazioni dedicate a processori i586 privi di TSC.

Cos’è il TSC e perché il kernel lo considera così importante

Il TSC è un registro a 64 bit associato alla CPU. Il software può leggerlo tramite istruzioni come RDTSC e, sui processori che la supportano, RDTSCP; il valore restituito cresce nel tempo e consente di misurare intervalli molto brevi senza dover interrogare un dispositivo esterno al processore.

La differenza rispetto a timer di piattaforma come HPET o all’ACPI Power Management Timer riguarda il fatto che la rilevazione può avvenire direttamente dal core, mentre consultare un timer collegato al chipset implica normalmente un accesso più costoso.

Il TSC originario, però, non era una buona sorgente temporale: sui primi processori il contatore poteva variare con la frequenza della CPU, fermarsi in alcuni stati di risparmio energetico oppure risultare non perfettamente sincronizzato tra core differenti. Per un sistema operativo, avere un contatore velocissimo ma capace di produrre salti temporali o valori incoerenti è un problema serio.

I processori più recenti hanno progressivamente risolto gran parte delle anomalie storiche. Le CPU moderne espongono normalmente un invariant TSC: il contatore avanza a una frequenza costante indipendentemente dai normali cambiamenti di P-state, dalla variazione del clock dei core e da molti stati di risparmio energetico.

La vera svolta è l’abbandono delle CPU senza TSC

Per capire perché Linux abbia aspettato così a lungo bisogna guardare alla sua tradizionale compatibilità con l’hardware molto vecchio. Per anni il kernel ha conservato opzioni dedicate a i486, primi i586, AMD K5, alcuni Cyrix e altre CPU o SoC che non offrivano necessariamente tutte le caratteristiche oggi considerate basilari.

La serie di patch dedicata alla pulizia x86 ha rimosso, tra le altre cose, configurazioni M486, M486SX, ELAN e varianti i586 senza TSC. Una patch specifica, “Remove TSC-less CONFIG_M586 support“, chiarisce che i Pentium e derivati dotati di TSC possono continuare a funzionare attraverso le configurazioni M586TSC o M586MMX.

Il beneficio non consiste tanto in prestazioni magicamente superiori per l’utente finale. Si riduce piuttosto il numero di combinazioni hardware che il codice deve rappresentare, testare e mantenere: per un kernel con decenni di compatibilità accumulata, sbarazzarsi di configurazioni ormai irrealistiche è sempre più importante.

Windows aveva imboccato la stessa strada molto prima

Microsoft affronta il problema da anni attraverso QueryPerformanceCounter, API ad alta risoluzione usata dalle applicazioni Win32 per misurare intervalli molto brevi. QPC esiste da Windows 2000 e Windows XP, ma la sorgente hardware sottostante è cambiata nel tempo.

Windows Vista e Windows Server 2008 preferivano contatori di piattaforma come HPET o ACPI PM Timer, in parte per evitare i problemi dei vecchi TSC non sincronizzati. Microsoft documenta però che l’accesso a tali timer ha una latenza maggiore e scala peggio su macchine multiprocessore, perché il contatore risiede fuori dal core ed è condiviso.

Con Windows 7 e Windows Server 2008 R2 Microsoft ha iniziato a usare come base di QPC i TSC a frequenza costante quando il sistema riusciva a sincronizzarli correttamente tra i processori. Windows 8, Windows 8.1 e le corrispondenti versioni Server hanno migliorato ulteriormente l’algoritmo di sincronizzazione.

Per chi utilizza processori Intel o AMD relativamente recenti, la modifica non cambia nulla. I sistemi x86-64 supportati da Linux possiedono da tempo un TSC; anche moltissime CPU a 32 bit di epoca Pentium e successiva lo implementano.

Gli effetti reali ricadono sul retrocomputing e su apparecchiature industriali estremamente vecchie. Una macchina incapace di soddisfare i nuovi requisiti non potrà seguire indefinitamente il kernel Linux mainline, ma può continuare a funzionare con versioni precedenti del kernel compatibili con quell’hardware. Naturalmente ciò apre un altro problema: un kernel vecchio smette prima o poi di ricevere correzioni, quindi mantenerlo connesso a reti non fidate richiede valutazioni di sicurezza molto più attente.

Ti consigliamo anche

Link copiato negli appunti