– Foto: CPU Artworks.
Un anno fa proprio di questi tempi non si parlava altro che di Meltdown e di Spectre, due vulnerabilità appena scoperte che permettevano di accedere al contenuto della memoria interna del processore (la memoria cache) senza averne i diritti, consentendo (almeno potenzialmente) di recuperare dati riservati come password, dati bancari, certificati digitali e quant’altro.
A differenza del famoso Pentium Bug della metà degli anni ‘90,1 Meltdown e Spectre non derivano da errori di programmazione ma sono quasi delle caratteristiche intrinseche dei processori moderni, troppo veloci rispetto al resto dell’hardware che li circonda.
Ma non voglio parlare qui di Meltdown e Spectre, va bene non seguire troppo l’attualità ma non esageriamo. È successo che, giusto in corrispondenza dell’anniversario, ho ritrovato sepolti sotto una pila di carte alcuni articoli che ne parlavano e, complice la reinstallazione del sistema operativo su un server, sono riuscito finalmente a leggerli, imbattendomi in un’informazione piuttosto interessante che vale la pena condividere.
Come ho detto prima, i processori (o CPU, Central Processing Unit) moderni sono veloci, anzi velocissimi, ad un livello che non riusciamo nemmeno ad immaginare. Per noi, già dei tempi dell’ordine del millisecondo (ms, 1 millesimo di secondo) non hanno un vero significato, sono troppo brevi rispetto all’esperienza comune. Figuriamoci cosa succede con intervalli di tempo ancora minori, a livello del microsecondo (μs, 1 milionesimo di secondo) o del nanosecondo (ns, 1 miliardesimo di secondo)!
Ma se proviamo a riportare questi tempi a qualcosa che possiamo capire direttamente, le cose prendono tutta un’altra piega.
In uno degli articoli più interessanti che ho letto dopo un anno, ho trovato la tabella riprodotta qui sotto, ripresa da un post di Jeff Atwood (autore del famoso blog Coding Horror, una lettura indispensabile per chi si occupa di programmazione), che ha sua volta l’aveva tratta dal volume Systems Performance: Enterprise and the Cloud di Brendan Gregg (e così sono a posto con le attribuzioni).
Nella tabella in questione, il tempo che una CPU odierna impiega per eseguire una operazione elementare, 0.3 nanosecondi corrispondenti a 3.3 GHz, viene scalato ad un secondo, un intervallo di tempo che siamo in grado di comprendere, traducendo in modo corrispondente un gran numero di altri tempi caratteristici del funzionamento di un computer.
1 ciclo di CPU | 0.3 ns | 1 s |
---|---|---|
Accesso alla cache di 1 livello | 0.9 ns | 3 s |
Accesso alla cache di 2 livello | 2.8 ns | 9 s |
Accesso alla cache di 3 livello | 12.9 ns | 43 s |
Accesso alla memoria RAM | 120 ns | 6 minuti |
Trasferimento dati da un disco a stato solido | 50-150 μs | 2-6 giorni |
Trasferimento dati da un disco meccanico | 1-10 ms | 1-12 mesi |
Trasferimento dati su Internet: da SF a NYC | 40 ms | 4 anni |
Trasferimento dati su Internet: da SF alla Gran Bretagna | 81 ms | 8 anni |
Trasferimento dati su Internet: da SF all’Australia | 183 ms | 19 anni |
Riavvio di un sistema operativo virtualizzato a livello software | 4 s | 423 anni |
Time-out di un comando SCSI | 30 s | 3000 anni |
Riavvio di un sistema operativo virtualizzato a livello hardware | 40 s | 4000 anni |
Riavvio di un computer | 5 m | 32 millenni |
Nella tabella, SF sta per San Francisco, NYC per New York City.
Visti in questo modo i numeri sono stupefacenti. Una CPU odierna può sommare due numeri nell’equivalente di un secondo, ma deve aspettare pazientemente ben 6 minuti per ricevere i dati dalla memoria RAM del computer (una memoria che viene considerata velocissima) e fino a una settimana per riceverli da un già veloce disco a stato solido. Non parliamo nemmeno di quello che succede con un disco meccanico, che ha tempi di trasferimento corrispondenti a quelli dell’esercito di Cesare in viaggio verso la Gallia. E per una CPU il riavvio di un computer è una vera iattura: su questa scala temporale equivale ad aspettare che l’uomo moderno esca dal Paleolitico ed arrivi fino ad oggi.
Non so voi, ma quando vedo le cose in questa prospettiva non posso che levarmi il cappello davanti a chi progetta questi oggetti meravigliosi.
-
Molto interessante questo articolo su Science, How Number Theory Got the Best of the Pentium Chip, che tratta degli aspetti matematici dietro la scoperta del Pentium Bug. ↩