WEBVTT

00:00.000 --> 00:00.990
Istruttore: In questa lezione

00:00.990 --> 00:03.390
verranno illustrate le caratteristiche della CPU.

00:03.390 --> 00:05.340
Questo include aspetti come il multithreading,

00:05.340 --> 00:07.050
il multiprocessing simmetrico, il single

00:07.050 --> 00:10.950
core rispetto al multi-core e il supporto alla virtualizzazione.

00:10.950 --> 00:12.180
La prima cosa che tratteremo

00:12.180 --> 00:15.840
è il cosiddetto multithreading, chiamato anche SMT o simultaneous

00:15.840 --> 00:19.200
multithreading o hyper-threading, a seconda della CPU

00:19.200 --> 00:21.480
acquistata.

00:21.480 --> 00:23.040
Hyper-threading è un termine utilizzato

00:23.040 --> 00:24.780
da Intel per questo processo.

00:24.780 --> 00:27.000
Il termine più generico è SMT,

00:27.000 --> 00:29.340
o multithreading simultaneo.

00:29.340 --> 00:31.050
Quando si ha a che fare con il threading,

00:31.050 --> 00:33.870
si tratta del concetto di un singolo flusso di istruzioni

00:33.870 --> 00:37.350
inviato da un'applicazione software a un processore.

00:37.350 --> 00:40.770
Ora, la maggior parte delle applicazioni è stata progettata per eseguire un singolo

00:40.770 --> 00:42.150
processo in un singolo thread.

00:42.150 --> 00:44.340
Ciò significa che il software fa tutto

00:44.340 --> 00:45.720
in modo seriale.

00:45.720 --> 00:47.250
Quindi, se vi dessi un'istruzione

00:47.250 --> 00:48.930
di cinque cose diverse da fare,

00:48.930 --> 00:50.730
le fareste in ordine: una, due,

00:50.730 --> 00:53.250
tre, quattro e cinque.

00:53.250 --> 00:55.260
E se ognuno di questi impiegasse 10 minuti,

00:55.260 --> 00:57.510
il totale sarebbe di 50 minuti.

00:57.510 --> 01:00.240
Ma se si potesse consentire il multithreading e

01:00.240 --> 01:01.650
fare queste cose in ordine

01:01.650 --> 01:03.981
sparso o contemporaneamente, si potrebbe

01:03.981 --> 01:07.050
fare più di una cosa alla volta inviando queste cose a thread

01:07.050 --> 01:09.360
diversi o a flussi diversi.

01:09.360 --> 01:11.130
Per esempio, supponiamo che vi dica di

01:11.130 --> 01:12.450
scrivere qualcosa con la mano

01:12.450 --> 01:13.500
destra e che, allo stesso

01:13.500 --> 01:15.900
tempo, vi chieda di battere sulla scrivania con la

01:15.900 --> 01:17.070
mano sinistra.

01:17.070 --> 01:18.570
Potete fare entrambe le cose contemporaneamente,

01:18.570 --> 01:19.830
perché avete due fili o due mani

01:19.830 --> 01:22.020
per compiere queste azioni.

01:22.020 --> 01:23.970
Questa è l'idea del multithreading.

01:23.970 --> 01:26.700
Quindi, Intel e gli altri produttori hanno sviluppato

01:26.700 --> 01:28.860
un modo per consentire al software di dialogare

01:28.860 --> 01:30.720
con i loro processori ed eseguire più

01:30.720 --> 01:33.061
thread paralleli contemporaneamente all'interno

01:33.061 --> 01:35.610
del singolo processore.

01:35.610 --> 01:37.050
Ciò consente a questi thread di

01:37.050 --> 01:39.420
essere eseguiti attraverso quel processore e di ridurre

01:39.420 --> 01:41.340
il tempo di inattività della CPU in attesa

01:41.340 --> 01:43.080
dell'azione successiva.

01:43.080 --> 01:45.030
In questo modo, possiamo essenzialmente

01:45.030 --> 01:46.680
cercare di aumentare la nostra capacità

01:46.680 --> 01:48.006
di far passare più cose attraverso

01:48.006 --> 01:50.550
il processore e cercare di fare più cose nello stesso

01:50.550 --> 01:52.410
tempo.

01:52.410 --> 01:55.140
Ora, questo è ottimo, ma funziona solo fino a un certo

01:55.140 --> 01:57.570
punto e il software deve essere in grado di usarlo

01:57.570 --> 02:00.060
e capirlo per dire al sistema che si vogliono usare

02:00.060 --> 02:02.790
più thread contemporaneamente.

02:02.790 --> 02:04.140
Questa è la grande limitazione quando

02:04.140 --> 02:06.630
si ha a che fare con qualcosa come l'hyper-threading.

02:06.630 --> 02:08.400
Un altro modo per superare

02:08.400 --> 02:13.320
questo problema è il cosiddetto multiprocessing simmetrico, o SMP.

02:13.320 --> 02:15.570
Ora, l'SMP è il modo tradizionale in cui le workstation

02:15.570 --> 02:17.304
e i server facevano questo, perché

02:17.304 --> 02:20.370
in realtà disponevano di più processori.

02:20.370 --> 02:22.080
Per fare ciò, è necessario disporre

02:22.080 --> 02:25.290
di una scheda madre con due o quattro zoccoli per processori

02:25.290 --> 02:27.420
e installare due o quattro processori sulla

02:27.420 --> 02:28.890
scheda madre.

02:28.890 --> 02:31.050
In questo caso, tutti i processori devono essere

02:31.050 --> 02:32.790
dello stesso tipo e della stessa velocità

02:32.790 --> 02:34.290
per poter lavorare insieme.

02:34.290 --> 02:37.410
E il sistema operativo sottostante deve capire come

02:37.410 --> 02:39.690
utilizzare più di un processore.

02:39.690 --> 02:42.690
Per impostazione predefinita, la maggior parte dei sistemi operativi non lo faceva.

02:42.690 --> 02:45.150
È stato quindi necessario disporre di un sistema operativo

02:45.150 --> 02:47.670
basato su server, come Windows Server 2019, per poter supportare

02:47.670 --> 02:49.350
più processori.

02:49.350 --> 02:52.860
Per questo motivo, l'SMP o multiprocessing simmetrico non era

02:52.860 --> 02:55.620
molto utile nei computer desktop e portatili.

02:55.620 --> 02:58.770
Invece, la maggior parte dei desktop e dei laptop ha dovuto

02:58.770 --> 03:01.110
affidarsi all'hyper-threading dei processori

03:01.110 --> 03:04.140
Intel o al multithreading simultaneo, o SMT, se si utilizza

03:04.140 --> 03:06.720
un processore AMD.

03:06.720 --> 03:09.480
Quindi, l'hyper-threading e l'SMT hanno funzionato molto bene

03:09.480 --> 03:12.090
per molto tempo, ma alla fine abbiamo raggiunto il limite

03:12.090 --> 03:14.250
della quantità di materiale che volevamo elaborare

03:14.250 --> 03:16.920
e di avere solo un singolo processore per farlo.

03:16.920 --> 03:19.020
Ora, poiché la maggior parte dei sistemi operativi

03:19.020 --> 03:20.610
non sapeva come gestire più socket

03:20.610 --> 03:23.220
o più processori su una determinata scheda madre, i produttori

03:23.220 --> 03:25.470
hanno iniziato a creare il cosiddetto pacchetto

03:25.470 --> 03:27.420
multi-core.

03:27.420 --> 03:28.770
Quando parlo di pacchetto,

03:28.770 --> 03:31.500
mi riferisco alla CPU, al chip fisico.

03:31.500 --> 03:33.570
Invece di avere due pacchetti fisici

03:33.570 --> 03:35.790
o due chip fisici su due socket diversi della

03:35.790 --> 03:37.020
scheda madre, i produttori

03:37.020 --> 03:38.850
hanno deciso di creare un unico pacchetto

03:38.850 --> 03:42.390
che funzionasse come una singola CPU.

03:42.390 --> 03:43.740
Ma all'interno di quel

03:43.740 --> 03:47.160
pacchetto c'erano in realtà più CPU o più processori.

03:47.160 --> 03:49.410
Ciò significa che per la scheda madre

03:49.410 --> 03:53.040
sembrava una sola CPU fisica, perché lo era, ma al suo interno

03:53.040 --> 03:54.540
c'erano più core, o core

03:54.540 --> 03:57.600
dell'unità di elaborazione centrale.

03:57.600 --> 03:59.910
Ora, questo permette a qualsiasi sistema

03:59.910 --> 04:03.240
operativo di parlare con quel singolo processore o pacchetto

04:03.240 --> 04:05.160
di processori, e il pacchetto di processori

04:05.160 --> 04:06.840
stesso può poi suddividere le

04:06.840 --> 04:10.890
istruzioni tra i multi-core interni alla CPU.

04:10.890 --> 04:11.812
Pensateci in questo modo.

04:11.812 --> 04:14.250
Avete una casa con quattro camere da letto.

04:14.250 --> 04:16.320
Se qualcuno si presenta alla porta di casa e dice: "Ho bisogno

04:16.320 --> 04:17.580
di un letto per la notte", non gli interessa

04:17.580 --> 04:19.320
quale di questi quattro abbia a disposizione, purché

04:19.320 --> 04:20.880
abbia un letto per la notte.

04:20.880 --> 04:22.710
Quindi, si entra dalla porta principale,

04:22.710 --> 04:25.620
li si porta in un'unica stanza e si mostra loro solo una stanza.

04:25.620 --> 04:28.560
Questo è essenzialmente ciò che fa questo processore multi-core.

04:28.560 --> 04:30.570
Quando entrano nuove persone, le porta

04:30.570 --> 04:32.790
in una stanza singola e le fa dormire lì per la

04:32.790 --> 04:35.700
notte, oppure le fa elaborare, e poi le rimanda fuori.

04:35.700 --> 04:36.720
Tutto questo viene gestito

04:36.720 --> 04:38.220
dalla persona all'ingresso che,

04:38.220 --> 04:40.860
in questo caso, è il pacchetto multi-core.

04:40.860 --> 04:43.200
E poi li inserisce nel singolo compartimento o

04:43.200 --> 04:46.890
nel singolo subprocessore di cui ha bisogno per svolgere quel lavoro.

04:46.890 --> 04:49.290
Questa è l'idea di un pacchetto multi-core.

04:49.290 --> 04:51.480
La maggior parte di noi ne ha già sentito parlare,

04:51.480 --> 04:52.650
perché sul vostro sistema

04:52.650 --> 04:55.110
probabilmente avete un processore multi-core.

04:55.110 --> 04:57.120
Probabilmente avete un processore dual-core,

04:57.120 --> 04:59.790
ovvero due CPU all'interno di un singolo chip, oppure un

04:59.790 --> 05:01.230
processore quad, ovvero quattro

05:01.230 --> 05:02.730
processori all'interno di un singolo

05:02.730 --> 05:03.960
chip.

05:03.960 --> 05:05.730
Oppure un processore hexa, cioè

05:05.730 --> 05:08.340
con sei core all'interno di un singolo chip.

05:08.340 --> 05:09.840
Oppure un processore octa,

05:09.840 --> 05:12.300
ovvero otto core in un singolo chip.

05:12.300 --> 05:16.090
Ad esempio, sul mio computer desktop ho un processore a

05:16.090 --> 05:19.260
otto core, che è un unico chip fisico, ma ha otto

05:19.260 --> 05:21.630
sottoprocessori al suo interno.

05:21.630 --> 05:23.370
Si tratta quindi di un processore

05:23.370 --> 05:25.410
a otto core o multi-core.

05:25.410 --> 05:27.240
Ora, oltre ad avere il multi-core e

05:27.240 --> 05:28.800
l'hyper-threading, è possibile

05:28.800 --> 05:29.991
combinare le due cose,

05:29.991 --> 05:32.846
in modo che ciascuno di questi processori all'interno

05:32.846 --> 05:34.560
del pacchetto, ad esempio, nel mio

05:34.560 --> 05:37.530
sistema ho l'octa-core, che ha otto processori.

05:37.530 --> 05:38.940
Ora, all'interno di questo pacchetto,

05:38.940 --> 05:40.050
ci sono otto processori e ognuno

05:40.050 --> 05:41.730
di questi otto processori può anche supportare

05:41.730 --> 05:43.710
l'hyper-threading.

05:43.710 --> 05:46.860
Ciò significa che ho 16 thread con otto CPU, il che mi dà un'enorme

05:46.860 --> 05:49.260
capacità di elaborazione su quella particolare

05:49.260 --> 05:50.850
macchina.

05:50.850 --> 05:53.250
A questo punto abbiamo parlato di tre delle quattro

05:53.250 --> 05:56.010
cose che volevamo trattare in questa lezione.

05:56.010 --> 05:57.390
Abbiamo parlato di hyper-threading

05:57.390 --> 06:00.090
e multithreading simultaneo, noto come SMT.

06:00.090 --> 06:02.460
Abbiamo parlato di multiprocessing simmetrico,

06:02.460 --> 06:04.830
ovvero di più CPU nei socket, e poi abbiamo

06:04.830 --> 06:07.530
parlato dell'idea di processori multi-core,

06:07.530 --> 06:09.120
in cui una singola CPU è dotata

06:09.120 --> 06:11.220
di più processori al suo interno, che

06:11.220 --> 06:14.010
siano due, quattro, sei o otto.

06:14.010 --> 06:17.400
L'ultima cosa di cui dobbiamo parlare è la virtualizzazione.

06:17.400 --> 06:20.490
La virtualizzazione è un'altra caratteristica delle CPU, ma

06:20.490 --> 06:22.020
non ha nulla a che vedere con le tre

06:22.020 --> 06:23.220
appena descritte.

06:23.220 --> 06:24.780
I tre che abbiamo appena descritto riguardano

06:24.780 --> 06:27.300
il modo in cui è possibile ottenere maggiori prestazioni da un

06:27.300 --> 06:28.710
singolo chip o da più chip.

06:28.710 --> 06:30.300
Ma quando parliamo di virtualizzazione,

06:30.300 --> 06:32.880
parliamo di poter emulare un hardware che

06:32.880 --> 06:35.730
in realtà non esiste.

06:35.730 --> 06:37.080
Questo si ottiene con

06:37.080 --> 06:39.450
la tecnologia di virtualizzazione

06:39.450 --> 06:42.330
di Intel, nota come VT, o con la virtualizzazione

06:42.330 --> 06:44.700
di AMD, nota come AMD-V.

06:44.700 --> 06:47.340
Entrambi forniscono estensioni del processore per

06:47.340 --> 06:49.710
supportare la virtualizzazione, definita virtualizzazione

06:49.710 --> 06:52.050
assistita dall'hardware.

06:52.050 --> 06:53.021
E questo probabilmente

06:53.021 --> 06:55.470
porta a chiedersi cosa sia la virtualizzazione.

06:55.470 --> 06:58.291
La virtualizzazione è la capacità di far sì che

06:58.291 --> 07:01.560
un computer faccia finta di eseguire più computer al

07:01.560 --> 07:02.729
suo interno.

07:02.729 --> 07:04.560
Ora, la situazione potrebbe essere la seguente:

07:04.560 --> 07:07.140
potrei avere un singolo portatile, come il mio MacBook.

07:07.140 --> 07:11.700
E in quel MacBook ho un solo sistema operativo, macOS.

07:11.700 --> 07:13.710
Ora, se volessi eseguire Windows o Linux,

07:13.710 --> 07:15.600
dovrei riformattare la mia macchina e installare

07:15.600 --> 07:16.920
quel software.

07:16.920 --> 07:18.780
Sarebbe davvero scomodo.

07:18.780 --> 07:21.360
Ma con la virtualizzazione non devo farlo.

07:21.360 --> 07:22.830
Invece, posso eseguire un

07:22.830 --> 07:26.340
programma come VMware, Virtualbox o Parallels e all'interno

07:26.340 --> 07:27.840
di questo software posso

07:27.840 --> 07:30.000
creare un computer virtuale.

07:30.000 --> 07:32.370
Posso dire che voglio un processore,

07:32.370 --> 07:34.950
due processori o quattro processori.

07:34.950 --> 07:36.600
E posso dirgli quanta memoria voglio

07:36.600 --> 07:38.010
e quanta memoria voglio.

07:38.010 --> 07:39.930
E creerà questo computer virtuale

07:39.930 --> 07:42.510
che esiste solo nel software.

07:42.510 --> 07:44.645
Ora, quando si esegue il nuovo sistema operativo,

07:44.645 --> 07:48.660
come Windows, al suo interno, si può dire che si tratta di un processore a due core.

07:48.660 --> 07:52.770
Ha quattro gigabyte di RAM e un disco rigido da 50 gigabyte.

07:52.770 --> 07:54.750
Tutto questo esiste solo nel software.

07:54.750 --> 07:57.296
Ma quando installo Windows in quella macchina virtuale,

07:57.296 --> 07:59.670
Windows pensa che sia un computer completo.

07:59.670 --> 08:02.340
Pensa di avere due processori, quattro

08:02.340 --> 08:04.050
gigabyte di memoria e un

08:04.050 --> 08:06.270
disco rigido da 50 gigabyte.

08:06.270 --> 08:07.200
Quindi, Windows pensa

08:07.200 --> 08:09.390
di avere tutto questo hardware fisico, ed è questo che

08:09.390 --> 08:11.400
la virtualizzazione ci permette di fare.

08:11.400 --> 08:13.659
Ci permette di virtualizzare un computer

08:13.659 --> 08:15.600
e di fornire hardware virtuale e di

08:15.600 --> 08:17.293
eseguire più sistemi operativi

08:17.293 --> 08:20.280
all'interno di un singolo host fisico.

08:20.280 --> 08:23.100
Oltre a VT e AMD-V, esiste anche un secondo livello

08:23.100 --> 08:24.450
di supporto hardware per

08:24.450 --> 08:27.120
la virtualizzazione, presente in alcuni processori

08:27.120 --> 08:28.860
moderni.

08:28.860 --> 08:31.800
Nei sistemi Intel, questa funzione è nota come EPT

08:31.800 --> 08:33.480
(extended page table).

08:33.480 --> 08:35.490
Quando si ha a che fare con un processore

08:35.490 --> 08:39.810
AMD, si parla di indicizzazione rapida della virtualizzazione, o RVI.

08:39.810 --> 08:42.390
Entrambe sono considerate funzioni di traduzione degli

08:42.390 --> 08:45.450
indirizzi di secondo livello (SLAT) della virtualizzazione software,

08:45.450 --> 08:48.060
che sono poi sottese e supportate dal processore hardware

08:48.060 --> 08:50.430
per consentire una migliore gestione della memoria

08:50.430 --> 08:52.620
virtuale e fornire maggiori prestazioni quando

08:52.620 --> 08:53.773
si tratta di utilizzare la

08:53.773 --> 08:56.913
memoria all'interno di una macchina virtuale.

08:57.870 --> 09:00.150
Parleremo molto di più della virtualizzazione

09:00.150 --> 09:02.130
nelle rispettive lezioni, ma per il momento

09:02.130 --> 09:03.480
voglio solo farvi capire che

09:03.480 --> 09:06.660
alcune CPU hanno la possibilità di eseguire questa operazione

09:06.660 --> 09:08.250
all'interno del loro processore

09:08.250 --> 09:10.530
e che i processori che hanno questa capacità,

09:10.530 --> 09:14.844
come quelli che supportano VT di Intel o AMD-V di AMD, vi daranno prestazioni migliori

09:14.844 --> 09:16.470
quando fate la virtualizzazione

09:16.470 --> 09:19.260
rispetto a quelli che non la supportano.

09:19.260 --> 09:20.698
Quindi, se state per costruire

09:20.698 --> 09:22.710
una macchina e volete usarla per la virtualizzazione,

09:22.710 --> 09:24.060
ad esempio un server su cui gireranno

09:24.060 --> 09:25.995
molti altri server virtuali, dovete assicurarvi

09:25.995 --> 09:28.034
che i processori che scegliete siano dotati

09:28.034 --> 09:31.710
di VT o AMD-V in modo da supportare la virtualizzazione diretta accelerata

09:31.710 --> 09:37.433
dall'hardware, perché in questo modo otterrete un'esperienza e prestazioni molto migliori rispetto alla virtualizzazione

09:37.433 --> 09:40.653
software.
