L’ideatore del kernel Linux si è scagliato contro chi ha proposto un approccio differente per identificare le versioni dei processori x86-64. Esternando le sue idee, il “re pinguino” Linus Torvalds ha usato – come spesso accade – toni non propriamente accomodanti. Le sue eccezioni, tuttavia, sembrano condivisibili per tutta una serie di motivazioni che cerchiamo di riassume e semplificare nel seguito.
Torvalds esprime la sua forte opposizione rispetto all’introduzione nel kernel Linux di un modello basato su livelli di “microarchitettura” come “v1”, “v2”, “v3” e così via. Secondo l’informatico finlandese, i livelli di microarchitettura sarebbero una creazione arbitraria di glibc (GNU C Library), libreria standard per il linguaggio di programmazione C sviluppata dal Progetto GNU, e non avrebbero alcuna rilevanza pratica per il kernel Linux.
Per Linus Torvalds, la classificazione v1, v2, v3,… non rappresenta una progressione lineare delle capacità dei processori. Corrisponderebbe invece a un modello sbagliato e confuso per classificare le “abilità” dei chip.
Linus Torvalds invita a mantenere le cose semplici: puntare sui bit CPUID
Il tentativo di semplificare il modello con l’utilizzo di v1, v2, v3 e così via, a detta di Torvalds finirebbe soltanto per complicare le cose. Il kernel Linux, invece di fare domande dirette come “questo processore supporta l’istruzione cmpxchgb16
?” dovrebbe “abbassarsi” a porre un quesito del tipo “cosa significa v3?”.
Per il numero uno del progetto kernel Linux, l’approccio proposto non sarebbe affatto una “genialata”. Non solo non aiuterebbe ma renderebbe più difficile la comprensione e la gestione delle capacità del processore.
Torvalds ribadisce invece che il modello corretto per rappresentare le capacità dei processori consiste nel ricorrere ai bit CPUID, un insieme di istruzioni che consente di identificare in modo affidabile le caratteristiche di un processore. Questi bit forniscono informazioni precise e specifiche sulle capacità del processore, senza la necessità di semplificazioni che potrebbero risultare fuorvianti o imprecise.
Per la cronaca, l’istruzione cmpxchgb16
esiste davvero e corrisponde a un’operazione di “scambio condizionale” (Compare and Exchange) che opera su un dato di 128 bit in memoria. È utilizzata per operazioni di confronto e sostituzione; è supportata solo su determinati processori più recenti, in particolare quelli compatibili con le operazioni a 128 bit (versioni più recenti dei processori AMD e Intel).
Uno sguardo al futuro
L’informatico riflette anche sul fatto che molte delle scelte storicamente applicate sul kernel e riguardanti processori come Pentium 4, Core 2 e K8 non sono più rilevanti, poiché oggi la maggior parte dei processori moderni non ha più le problematiche che avevano le vecchie CPU. Si pensi ai limiti legati alle istruzioni e la complessa gestione delle risorse hardware. I moderni processori sono molto più dinamici e capaci di gestire in modo efficiente le istruzioni.
Torvalds osserva quindi che potrebbe essere sufficiente ottimizzare il kernel sempre per un’architettura generica, usando opzioni come -march=x86_64 -mtune=generic
, eliminando così la necessità di scelte specifiche per microarchitetture obsolete. La gestione delle caratteristiche specifiche di alcune CPU (come il supporto per cmpxchg16b
) è vista come una questione secondaria, che può essere mantenuta senza impatti significativi sul codice, ma che non giustifica l’introduzione di complicazioni inutili.
Una nota finale
È vero che Torvalds ha in passato utilizzato, in certe circostanze, termini irrispettosi e triviali. In questo caso, tuttavia, la sua frase “Please do *not* introduce that mind-fart into the kernel sources” non ha alcun riferimento a “peti cerebrali”. Come suggerisce qualche approssimativo traduttore.
L’espressione mind-fart è un termine colloquiale inglese che indica un momento di confusione o un pensiero errato, un’idea poco sensata. Torvalds sta semplicemente dicendo che i livelli di microarchitettura non possono e non devono farsi largo nel codice sorgente del kernel Linux, perché frutto di una valutazione insensata.