Istruttore: In questa lezione
verranno illustrate le caratteristiche della CPU.
Questo include aspetti come il multithreading,
il multiprocessing simmetrico, il single
core rispetto al multi-core e il supporto alla virtualizzazione.
La prima cosa che tratteremo
è il cosiddetto multithreading, chiamato anche SMT o simultaneous
multithreading o hyper-threading, a seconda della CPU
acquistata.
Hyper-threading è un termine utilizzato
da Intel per questo processo.
Il termine più generico è SMT,
o multithreading simultaneo.
Quando si ha a che fare con il threading,
si tratta del concetto di un singolo flusso di istruzioni
inviato da un'applicazione software a un processore.
Ora, la maggior parte delle applicazioni è stata progettata per eseguire un singolo
processo in un singolo thread.
Ciò significa che il software fa tutto
in modo seriale.
Quindi, se vi dessi un'istruzione
di cinque cose diverse da fare,
le fareste in ordine: una, due,
tre, quattro e cinque.
E se ognuno di questi impiegasse 10 minuti,
il totale sarebbe di 50 minuti.
Ma se si potesse consentire il multithreading e
fare queste cose in ordine
sparso o contemporaneamente, si potrebbe
fare più di una cosa alla volta inviando queste cose a thread
diversi o a flussi diversi.
Per esempio, supponiamo che vi dica di
scrivere qualcosa con la mano
destra e che, allo stesso
tempo, vi chieda di battere sulla scrivania con la
mano sinistra.
Potete fare entrambe le cose contemporaneamente,
perché avete due fili o due mani
per compiere queste azioni.
Questa è l'idea del multithreading.
Quindi, Intel e gli altri produttori hanno sviluppato
un modo per consentire al software di dialogare
con i loro processori ed eseguire più
thread paralleli contemporaneamente all'interno
del singolo processore.
Ciò consente a questi thread di
essere eseguiti attraverso quel processore e di ridurre
il tempo di inattività della CPU in attesa
dell'azione successiva.
In questo modo, possiamo essenzialmente
cercare di aumentare la nostra capacità
di far passare più cose attraverso
il processore e cercare di fare più cose nello stesso
tempo.
Ora, questo è ottimo, ma funziona solo fino a un certo
punto e il software deve essere in grado di usarlo
e capirlo per dire al sistema che si vogliono usare
più thread contemporaneamente.
Questa è la grande limitazione quando
si ha a che fare con qualcosa come l'hyper-threading.
Un altro modo per superare
questo problema è il cosiddetto multiprocessing simmetrico, o SMP.
Ora, l'SMP è il modo tradizionale in cui le workstation
e i server facevano questo, perché
in realtà disponevano di più processori.
Per fare ciò, è necessario disporre
di una scheda madre con due o quattro zoccoli per processori
e installare due o quattro processori sulla
scheda madre.
In questo caso, tutti i processori devono essere
dello stesso tipo e della stessa velocità
per poter lavorare insieme.
E il sistema operativo sottostante deve capire come
utilizzare più di un processore.
Per impostazione predefinita, la maggior parte dei sistemi operativi non lo faceva.
È stato quindi necessario disporre di un sistema operativo
basato su server, come Windows Server 2019, per poter supportare
più processori.
Per questo motivo, l'SMP o multiprocessing simmetrico non era
molto utile nei computer desktop e portatili.
Invece, la maggior parte dei desktop e dei laptop ha dovuto
affidarsi all'hyper-threading dei processori
Intel o al multithreading simultaneo, o SMT, se si utilizza
un processore AMD.
Quindi, l'hyper-threading e l'SMT hanno funzionato molto bene
per molto tempo, ma alla fine abbiamo raggiunto il limite
della quantità di materiale che volevamo elaborare
e di avere solo un singolo processore per farlo.
Ora, poiché la maggior parte dei sistemi operativi
non sapeva come gestire più socket
o più processori su una determinata scheda madre, i produttori
hanno iniziato a creare il cosiddetto pacchetto
multi-core.
Quando parlo di pacchetto,
mi riferisco alla CPU, al chip fisico.
Invece di avere due pacchetti fisici
o due chip fisici su due socket diversi della
scheda madre, i produttori
hanno deciso di creare un unico pacchetto
che funzionasse come una singola CPU.
Ma all'interno di quel
pacchetto c'erano in realtà più CPU o più processori.
Ciò significa che per la scheda madre
sembrava una sola CPU fisica, perché lo era, ma al suo interno
c'erano più core, o core
dell'unità di elaborazione centrale.
Ora, questo permette a qualsiasi sistema
operativo di parlare con quel singolo processore o pacchetto
di processori, e il pacchetto di processori
stesso può poi suddividere le
istruzioni tra i multi-core interni alla CPU.
Pensateci in questo modo.
Avete una casa con quattro camere da letto.
Se qualcuno si presenta alla porta di casa e dice: "Ho bisogno
di un letto per la notte", non gli interessa
quale di questi quattro abbia a disposizione, purché
abbia un letto per la notte.
Quindi, si entra dalla porta principale,
li si porta in un'unica stanza e si mostra loro solo una stanza.
Questo è essenzialmente ciò che fa questo processore multi-core.
Quando entrano nuove persone, le porta
in una stanza singola e le fa dormire lì per la
notte, oppure le fa elaborare, e poi le rimanda fuori.
Tutto questo viene gestito
dalla persona all'ingresso che,
in questo caso, è il pacchetto multi-core.
E poi li inserisce nel singolo compartimento o
nel singolo subprocessore di cui ha bisogno per svolgere quel lavoro.
Questa è l'idea di un pacchetto multi-core.
La maggior parte di noi ne ha già sentito parlare,
perché sul vostro sistema
probabilmente avete un processore multi-core.
Probabilmente avete un processore dual-core,
ovvero due CPU all'interno di un singolo chip, oppure un
processore quad, ovvero quattro
processori all'interno di un singolo
chip.
Oppure un processore hexa, cioè
con sei core all'interno di un singolo chip.
Oppure un processore octa,
ovvero otto core in un singolo chip.
Ad esempio, sul mio computer desktop ho un processore a
otto core, che è un unico chip fisico, ma ha otto
sottoprocessori al suo interno.
Si tratta quindi di un processore
a otto core o multi-core.
Ora, oltre ad avere il multi-core e
l'hyper-threading, è possibile
combinare le due cose,
in modo che ciascuno di questi processori all'interno
del pacchetto, ad esempio, nel mio
sistema ho l'octa-core, che ha otto processori.
Ora, all'interno di questo pacchetto,
ci sono otto processori e ognuno
di questi otto processori può anche supportare
l'hyper-threading.
Ciò significa che ho 16 thread con otto CPU, il che mi dà un'enorme
capacità di elaborazione su quella particolare
macchina.
A questo punto abbiamo parlato di tre delle quattro
cose che volevamo trattare in questa lezione.
Abbiamo parlato di hyper-threading
e multithreading simultaneo, noto come SMT.
Abbiamo parlato di multiprocessing simmetrico,
ovvero di più CPU nei socket, e poi abbiamo
parlato dell'idea di processori multi-core,
in cui una singola CPU è dotata
di più processori al suo interno, che
siano due, quattro, sei o otto.
L'ultima cosa di cui dobbiamo parlare è la virtualizzazione.
La virtualizzazione è un'altra caratteristica delle CPU, ma
non ha nulla a che vedere con le tre
appena descritte.
I tre che abbiamo appena descritto riguardano
il modo in cui è possibile ottenere maggiori prestazioni da un
singolo chip o da più chip.
Ma quando parliamo di virtualizzazione,
parliamo di poter emulare un hardware che
in realtà non esiste.
Questo si ottiene con
la tecnologia di virtualizzazione
di Intel, nota come VT, o con la virtualizzazione
di AMD, nota come AMD-V.
Entrambi forniscono estensioni del processore per
supportare la virtualizzazione, definita virtualizzazione
assistita dall'hardware.
E questo probabilmente
porta a chiedersi cosa sia la virtualizzazione.
La virtualizzazione è la capacità di far sì che
un computer faccia finta di eseguire più computer al
suo interno.
Ora, la situazione potrebbe essere la seguente:
potrei avere un singolo portatile, come il mio MacBook.
E in quel MacBook ho un solo sistema operativo, macOS.
Ora, se volessi eseguire Windows o Linux,
dovrei riformattare la mia macchina e installare
quel software.
Sarebbe davvero scomodo.
Ma con la virtualizzazione non devo farlo.
Invece, posso eseguire un
programma come VMware, Virtualbox o Parallels e all'interno
di questo software posso
creare un computer virtuale.
Posso dire che voglio un processore,
due processori o quattro processori.
E posso dirgli quanta memoria voglio
e quanta memoria voglio.
E creerà questo computer virtuale
che esiste solo nel software.
Ora, quando si esegue il nuovo sistema operativo,
come Windows, al suo interno, si può dire che si tratta di un processore a due core.
Ha quattro gigabyte di RAM e un disco rigido da 50 gigabyte.
Tutto questo esiste solo nel software.
Ma quando installo Windows in quella macchina virtuale,
Windows pensa che sia un computer completo.
Pensa di avere due processori, quattro
gigabyte di memoria e un
disco rigido da 50 gigabyte.
Quindi, Windows pensa
di avere tutto questo hardware fisico, ed è questo che
la virtualizzazione ci permette di fare.
Ci permette di virtualizzare un computer
e di fornire hardware virtuale e di
eseguire più sistemi operativi
all'interno di un singolo host fisico.
Oltre a VT e AMD-V, esiste anche un secondo livello
di supporto hardware per
la virtualizzazione, presente in alcuni processori
moderni.
Nei sistemi Intel, questa funzione è nota come EPT
(extended page table).
Quando si ha a che fare con un processore
AMD, si parla di indicizzazione rapida della virtualizzazione, o RVI.
Entrambe sono considerate funzioni di traduzione degli
indirizzi di secondo livello (SLAT) della virtualizzazione software,
che sono poi sottese e supportate dal processore hardware
per consentire una migliore gestione della memoria
virtuale e fornire maggiori prestazioni quando
si tratta di utilizzare la
memoria all'interno di una macchina virtuale.
Parleremo molto di più della virtualizzazione
nelle rispettive lezioni, ma per il momento
voglio solo farvi capire che
alcune CPU hanno la possibilità di eseguire questa operazione
all'interno del loro processore
e che i processori che hanno questa capacità,
come quelli che supportano VT di Intel o AMD-V di AMD, vi daranno prestazioni migliori
quando fate la virtualizzazione
rispetto a quelli che non la supportano.
Quindi, se state per costruire
una macchina e volete usarla per la virtualizzazione,
ad esempio un server su cui gireranno
molti altri server virtuali, dovete assicurarvi
che i processori che scegliete siano dotati
di VT o AMD-V in modo da supportare la virtualizzazione diretta accelerata
dall'hardware, perché in questo modo otterrete un'esperienza e prestazioni molto migliori rispetto alla virtualizzazione
software.