Vai al contenuto
Offerte

Linux 7.2 dice addio alle CPU x86 senza TSC

In questo articolo Indice dei contenuti 2 sezioni

Senza troppi annunci, il kernel Linux ha alzato l’asticella dei requisiti minimi per le CPU x86, e il punto della questione si chiama TSC, cioè il Time Stamp Counter. Si tratta di un contatore hardware presente nei processori x86 dai tempi del Pentium, usato da decenni per misurare intervalli di tempo brevissimi con una precisione molto alta. Una patch entrata nel kernel Linux 7.2 attiva il parametro CONFIGX86TSC senza condizioni, il che significa che la presenza del TSC diventa un requisito per l’avvio e non più una caratteristica opzionale da decidere in fase di compilazione.

Il paragone con i requisiti hardware di Windows 11, che diverse letture hanno tirato in ballo, regge poco. Linux non chiede ai PC attuali di avere una funzione recente, sta semplicemente buttando via codice scritto per processori di oltre trent’anni fa. L’intervento arriva dopo una lunga operazione di pulizia dell’architettura x86: Linux 7.1 aveva già iniziato a rimuovere il supporto per i486 e per numerose piattaforme derivate, mentre il ciclo successivo ha eliminato anche le configurazioni dedicate ai processori i586 privi di TSC.

Che cosa fa il TSC e perché conta così tanto

Il TSC è un registro a 64 bit associato alla CPU. Il software lo legge con istruzioni come RDTSC e, sui processori che la supportano, RDTSCP. Il valore cresce nel tempo e permette di misurare intervalli molto brevi senza dover interrogare un dispositivo esterno al processore. La differenza rispetto ai timer di piattaforma come HPET o all’ACPI Power Management Timer sta proprio qui: la lettura avviene direttamente dal core, mentre consultare un timer collegato al chipset comporta di norma un accesso più costoso.

Il TSC delle origini, va detto, non era una gran sorgente temporale. Sui primi processori il contatore poteva variare con la frequenza della CPU, fermarsi in certi stati di risparmio energetico oppure non essere perfettamente sincronizzato tra core diversi. Per un sistema operativo un contatore rapidissimo ma capace di generare salti temporali o valori incoerenti è un guaio serio. Le CPU più recenti hanno risolto quasi tutte queste anomalie e oggi espongono normalmente un invariant TSC, che avanza a frequenza costante a prescindere dai cambi di P state, dalle variazioni di clock dei core e da molti stati di risparmio energetico.

Addio alle CPU senza TSC, e Windows era già passato da lì

Il motivo per cui il kernel ha atteso tanto sta nella sua storica ossessione per la compatibilità con hardware vecchissimo. Per anni sono rimaste in piedi opzioni dedicate a i486, primi i586, AMD K5, alcuni Cyrix e vari SoC che non offrivano tutte le caratteristiche oggi considerate scontate. La serie di patch sulla pulizia x86 ha rimosso configurazioni come M486, M486SX, ELAN e le varianti i586 senza TSC. Una patch specifica, intitolata “Remove TSC-less CONFIG_M586 support”, chiarisce che i Pentium e derivati dotati di TSC continuano a funzionare tramite le configurazioni M586TSC o M586MMX. Il vantaggio non è un salto prestazionale, ma la riduzione delle combinazioni hardware che il codice deve rappresentare, testare e mantenere.

Microsoft, dal suo canto, affronta la questione da tempo con QueryPerformanceCounter, l’API ad alta risoluzione usata dalle applicazioni Win32. QPC esiste da Windows 2000 e Windows XP, però la sorgente hardware sotto è cambiata più volte. Windows Vista e Windows Server 2008 preferivano HPET o ACPI PM Timer, anche per evitare i problemi dei vecchi TSC non sincronizzati, pur con latenze più alte e una scalabilità peggiore sulle macchine multiprocessore. Con Windows 7 e Windows Server 2008 R2 sono arrivati i TSC a frequenza costante come base di QPC, e Windows 8, Windows 8.1 e le versioni Server corrispondenti hanno affinato l’algoritmo di sincronizzazione.

Per chi lavora con processori Intel o AMD relativamente recenti non cambia nulla, dato che i sistemi x86 a 64 bit hanno un TSC da tempo, così come moltissime CPU a 32 bit dell’epoca Pentium e successive. Gli effetti concreti ricadono sul retrocomputing e su apparecchiature industriali molto vecchie. Una macchina che non soddisfa i nuovi requisiti non potrà seguire indefinitamente il kernel mainline, ma resta utilizzabile con versioni precedenti compatibili con quell’hardware. Con un rovescio della medaglia noto: un kernel vecchio prima o poi smette di ricevere correzioni, e tenerlo collegato a reti non fidate richiede valutazioni di sicurezza ben più attente.

Condividi:
183 Condivisioni