WEBVTT

00:00.000 --> 00:00.990
Instructeur: In deze

00:00.990 --> 00:03.390
les gaan we CPU-functies behandelen.

00:03.390 --> 00:05.340
Dit omvat zaken als multithreading,

00:05.340 --> 00:07.050
symmetrische multiprocessing,

00:07.050 --> 00:10.950
single core versus multi-core en ondersteuning voor virtualisatie.

00:10.950 --> 00:12.180
Het eerste dat we gaan

00:12.180 --> 00:15.840
behandelen staat bekend als multithreading, ook wel SMT of simultaneous

00:15.840 --> 00:19.200
multithreading of hyper-threading genoemd, afhankelijk

00:19.200 --> 00:21.480
van welke CPU je koopt.

00:21.480 --> 00:23.040
Hyper-threading is een term die

00:23.040 --> 00:24.780
Intel gebruikt voor dit proces.

00:24.780 --> 00:27.000
En de meer algemene term is SMT,

00:27.000 --> 00:29.340
of simultaan multithreading.

00:29.340 --> 00:31.050
Als je nu te maken hebt met threading,

00:31.050 --> 00:33.870
is dit het concept van een enkele stroom instructies die

00:33.870 --> 00:37.350
door een softwareapplicatie naar een processor wordt gestuurd.

00:37.350 --> 00:40.770
De meeste applicaties zijn ontworpen om een enkel proces in een enkele

00:40.770 --> 00:42.150
thread te draaien.

00:42.150 --> 00:44.340
En dit betekent dat die software

00:44.340 --> 00:45.720
alles in serie doet.

00:45.720 --> 00:47.250
Dus als ik je een instructie zou geven

00:47.250 --> 00:48.930
van vijf verschillende dingen die

00:48.930 --> 00:50.730
je moet doen, dan zou je die dingen in volgorde

00:50.730 --> 00:53.250
doen: één, twee, drie, vier en vijf.

00:53.250 --> 00:55.260
En als elk van die dingen je 10 minuten kostte,

00:55.260 --> 00:57.510
zou dat in totaal 50 minuten zijn.

00:57.510 --> 01:00.240
Maar als ik je zou kunnen toestaan om multithreading toe te passen

01:00.240 --> 01:01.650
en die dingen in een andere volgorde

01:01.650 --> 01:03.981
te doen of ze tegelijkertijd te doen, dan zou je meer dan

01:03.981 --> 01:07.050
één ding tegelijk kunnen doen door deze dingen naar verschillende threads

01:07.050 --> 01:09.360
of verschillende streams te sturen.

01:09.360 --> 01:11.130
Stel bijvoorbeeld dat ik je vertelde dat

01:11.130 --> 01:12.450
ik wilde dat je iets opschreef

01:12.450 --> 01:13.500
met je rechterhand en dat

01:13.500 --> 01:15.900
ik tegelijkertijd wilde dat je met je linkerhand op

01:15.900 --> 01:17.070
het bureau tikte.

01:17.070 --> 01:18.570
Je kunt ze allebei tegelijk doen,

01:18.570 --> 01:19.830
omdat je twee draden of twee

01:19.830 --> 01:22.020
handen hebt om die acties uit te voeren.

01:22.020 --> 01:23.970
Dit is het idee van multithreading.

01:23.970 --> 01:26.700
En dus ontwikkelden Intel en de andere fabrikanten

01:26.700 --> 01:28.860
een manier om software te laten praten

01:28.860 --> 01:30.720
met hun processors en meerdere parallelle

01:30.720 --> 01:33.061
threads tegelijkertijd te laten draaien

01:33.061 --> 01:35.610
binnen die ene processor.

01:35.610 --> 01:37.050
Hierdoor kunnen deze threads door

01:37.050 --> 01:39.420
die processor worden gedraaid en wordt de tijd, de inactieve

01:39.420 --> 01:41.340
tijd, dat die CPU daar zit te wachten op de volgende

01:41.340 --> 01:43.080
actie, verminderd.

01:43.080 --> 01:45.030
Door dit te doen, kunnen we in wezen proberen

01:45.030 --> 01:46.680
ons vermogen te vergroten en meer

01:46.680 --> 01:48.006
dingen door de processor te

01:48.006 --> 01:50.550
krijgen en proberen meer dingen gedaan te krijgen in

01:50.550 --> 01:52.410
dezelfde hoeveelheid tijd.

01:52.410 --> 01:55.140
Dat is geweldig, maar het werkt maar tot een bepaald

01:55.140 --> 01:57.570
punt en de software moet dat kunnen gebruiken

01:57.570 --> 02:00.060
en begrijpen om het systeem te vertellen dat je

02:00.060 --> 02:02.790
meerdere threads tegelijk wilt gebruiken.

02:02.790 --> 02:04.140
Dit is de grote beperking als

02:04.140 --> 02:06.630
je te maken hebt met zoiets als hyper-threading.

02:06.630 --> 02:08.400
Een andere manier om dit te

02:08.400 --> 02:13.320
omzeilen is wat bekend staat als symmetrische multiprocessing, of SMP.

02:13.320 --> 02:15.570
SMP is de traditionele manier waarop werkstations

02:15.570 --> 02:17.304
en servers dit deden, omdat ze eigenlijk

02:17.304 --> 02:20.370
meerdere processors hadden.

02:20.370 --> 02:22.080
Om dit te doen, moet je een moederbord

02:22.080 --> 02:25.290
hebben met twee of vier processorsockets en dan installeer

02:25.290 --> 02:28.890
je twee of vier processors op dat moederbord.

02:28.890 --> 02:31.050
Wanneer je dit doet, moeten al die processors

02:31.050 --> 02:32.790
van hetzelfde type en snelheid zijn

02:32.790 --> 02:34.290
zodat ze kunnen samenwerken.

02:34.290 --> 02:37.410
En je onderliggende besturingssysteem moet begrijpen hoe

02:37.410 --> 02:39.690
het meer dan één processor moet gebruiken.

02:39.690 --> 02:42.690
Standaard deden de meeste besturingssystemen dat niet.

02:42.690 --> 02:45.150
En dus moest je een servergebaseerd besturingssysteem

02:45.150 --> 02:47.670
hebben, zoals Windows Server 2019, om meerdere processors

02:47.670 --> 02:49.350
te kunnen ondersteunen.

02:49.350 --> 02:52.860
Hierdoor was SMP, of symmetrische multiprocessing, niet

02:52.860 --> 02:55.620
erg bruikbaar in desktops en laptops.

02:55.620 --> 02:58.770
En in plaats daarvan moesten de meeste desktops en laptops

02:58.770 --> 03:01.110
vertrouwen op hyper-threading door Intel-processors

03:01.110 --> 03:04.140
of simultaan multithreading, of SMT, als je een AMD-processor

03:04.140 --> 03:06.720
gebruikt.

03:06.720 --> 03:09.480
Dus, hyper-threading en SMT werkten lange tijd erg goed,

03:09.480 --> 03:12.090
maar uiteindelijk kwamen we toch op een grens van

03:12.090 --> 03:14.250
hoeveel dingen we wilden verwerken en dat

03:14.250 --> 03:16.920
we maar één processor hadden om dat te doen.

03:16.920 --> 03:19.020
Omdat de meeste besturingssystemen niet wisten

03:19.020 --> 03:20.610
hoe ze om moesten gaan met meerdere

03:20.610 --> 03:23.220
sockets of meerdere processors op een bepaald moederbord,

03:23.220 --> 03:25.470
begonnen fabrikanten met het maken van wat bekend

03:25.470 --> 03:27.420
staat als een multi-core pakket.

03:27.420 --> 03:28.770
Als ik het over een pakket

03:28.770 --> 03:31.500
heb, heb ik het over de CPU, de fysieke chip.

03:31.500 --> 03:33.570
In plaats van twee fysieke pakketten of

03:33.570 --> 03:35.790
twee fysieke chips in twee verschillende

03:35.790 --> 03:37.020
sockets op je moederbord

03:37.020 --> 03:38.850
te hebben, besloten deze fabrikanten

03:38.850 --> 03:42.390
een enkel pakket te maken dat werkte als een enkele CPU.

03:42.390 --> 03:43.740
Maar in dat pakket zaten

03:43.740 --> 03:47.160
eigenlijk meerdere CPU's of meerdere processors.

03:47.160 --> 03:49.410
Dit betekende dat het er voor het moederbord

03:49.410 --> 03:53.040
uitzag als één fysieke CPU, want dat was het ook, maar binnenin zaten

03:53.040 --> 03:54.540
meerdere kernen, of kernen

03:54.540 --> 03:57.600
van een centrale verwerkingseenheid.

03:57.600 --> 03:59.910
Hierdoor kan elk besturingssysteem

03:59.910 --> 04:03.240
praten met die ene processor of dat processorpakket,

04:03.240 --> 04:05.160
waarna het processorpakket

04:05.160 --> 04:06.840
zelf die instructies kan

04:06.840 --> 04:10.890
verdelen over de interne multicores in die CPU.

04:10.890 --> 04:11.812
Bekijk het eens op deze manier.

04:11.812 --> 04:14.250
Je hebt een huis met vier slaapkamers.

04:14.250 --> 04:16.320
Als iemand aan de voordeur komt en zegt: "Ik heb een bed

04:16.320 --> 04:17.580
nodig voor de nacht", dan maakt het

04:17.580 --> 04:19.320
hem niet uit welke van de vier ze krijgen, zolang

04:19.320 --> 04:20.880
ze maar een bed hebben voor de nacht.

04:20.880 --> 04:22.710
En dus ga je de voordeur binnen, neem

04:22.710 --> 04:25.620
je ze mee naar één kamer en laat je ze maar één kamer zien.

04:25.620 --> 04:28.560
Dat is in wezen wat deze multi-core processor doet.

04:28.560 --> 04:30.570
Als er nieuwe mensen binnenkomen, brengt het

04:30.570 --> 04:32.790
ze naar een enkele kamer en laat ze daar overnachten

04:32.790 --> 04:35.700
of hun verwerking doen, en stuurt ze dan weer naar buiten.

04:35.700 --> 04:36.720
Dat wordt allemaal afgehandeld

04:36.720 --> 04:38.220
door de persoon aan de voordeur,

04:38.220 --> 04:40.860
wat in dit geval dat multi-core pakket is.

04:40.860 --> 04:43.200
En dan plaatst het ze in het individuele compartiment

04:43.200 --> 04:46.890
of de individuele subprocessor die het nodig heeft om dat werk te doen.

04:46.890 --> 04:49.290
Dat is het idee van een multi-core pakket.

04:49.290 --> 04:51.480
De meesten van ons hebben hier wel eens van gehoord,

04:51.480 --> 04:52.650
omdat je op je systeem waarschijnlijk

04:52.650 --> 04:55.110
een multi-core processor hebt.

04:55.110 --> 04:57.120
Je hebt waarschijnlijk een dual-core processor,

04:57.120 --> 04:59.790
wat betekent dat je twee CPU's in een enkele chip hebt, of je hebt

04:59.790 --> 05:01.230
een quad-processor, wat betekent

05:01.230 --> 05:02.730
dat je vier processors in een enkele

05:02.730 --> 05:03.960
chip hebt.

05:03.960 --> 05:05.730
Of je hebt een hexa processor, wat betekent

05:05.730 --> 05:08.340
dat je zes kernen in een enkele chip hebt.

05:08.340 --> 05:09.840
Of je hebt een octa processor,

05:09.840 --> 05:12.300
wat betekent dat je acht kernen in één chip hebt.

05:12.300 --> 05:16.090
Op mijn CPU heb ik bijvoorbeeld een processor met acht kernen

05:16.090 --> 05:19.260
op mijn desktopcomputer. Het is één fysieke chip, maar

05:19.260 --> 05:21.630
er zitten acht subprocessors in.

05:21.630 --> 05:23.370
En dus staat dit bekend als een achtkern-

05:23.370 --> 05:25.410
of multikernprocessor.

05:25.410 --> 05:27.240
Naast het hebben van multi-core

05:27.240 --> 05:28.800
en hyper-threading, kun je

05:28.800 --> 05:29.991
de twee ook combineren,

05:29.991 --> 05:32.846
dus elk van die processors in het pakket, bijvoorbeeld

05:32.846 --> 05:34.560
in mijn systeem heb ik de octa-core,

05:34.560 --> 05:37.530
die acht processors heeft.

05:37.530 --> 05:38.940
In dat ene pakket zitten acht

05:38.940 --> 05:40.050
processors, en elk van

05:40.050 --> 05:41.730
die acht processors kan ook hyper-threading

05:41.730 --> 05:43.710
ondersteunen.

05:43.710 --> 05:46.860
Dit betekent dat ik 16 threads heb met acht CPU's, waardoor

05:46.860 --> 05:49.260
ik een ton aan verwerkingscapaciteit heb op

05:49.260 --> 05:50.850
die specifieke machine.

05:50.850 --> 05:53.250
Goed, we hebben het nu dus gehad over drie van de

05:53.250 --> 05:56.010
vier dingen die we in deze les wilden behandelen.

05:56.010 --> 05:57.390
We hebben het gehad over hyper-threading

05:57.390 --> 06:00.090
en simultaan multithreading, beter bekend als SMT.

06:00.090 --> 06:02.460
We hebben het gehad over symmetrische multiprocessing,

06:02.460 --> 06:04.830
of het hebben van meerdere CPU's in sockets, en

06:04.830 --> 06:07.530
toen hebben we het gehad over het idee van multicore processors,

06:07.530 --> 06:09.120
waarbij je een enkele CPU hebt met

06:09.120 --> 06:11.220
meerdere processors erin, of het er nu twee,

06:11.220 --> 06:14.010
vier, zes of acht zijn.

06:14.010 --> 06:17.400
Het laatste waar we het over moeten hebben is virtualisatie.

06:17.400 --> 06:20.490
Nu is virtualisatie een andere eigenschap van CPU's, maar het heeft

06:20.490 --> 06:22.020
niet echt te maken met de drie waar

06:22.020 --> 06:23.220
we het net over hadden.

06:23.220 --> 06:24.780
De drie waar we het net over hadden,

06:24.780 --> 06:27.300
gingen over hoe je meer prestaties uit een enkele chip of

06:27.300 --> 06:28.710
meerdere chips kunt halen.

06:28.710 --> 06:30.300
Maar als we het hebben over virtualisatie,

06:30.300 --> 06:32.880
dan hebben we het over de mogelijkheid om hardware te

06:32.880 --> 06:35.730
emuleren die in werkelijkheid niet bestaat.

06:35.730 --> 06:37.080
Dit wordt feitelijk

06:37.080 --> 06:39.450
bereikt door Intel's virtualisatietechnologie,

06:39.450 --> 06:42.330
bekend als VT, of AMD's virtualisatie, bekend

06:42.330 --> 06:44.700
als AMD-V.

06:44.700 --> 06:47.340
Beide bieden processoruitbreidingen om virtualisatie

06:47.340 --> 06:49.710
te ondersteunen, wat hardware ondersteunde

06:49.710 --> 06:52.050
virtualisatie wordt genoemd.

06:52.050 --> 06:53.021
En dit brengt waarschijnlijk

06:53.021 --> 06:55.470
het punt naar boven, wat is virtualisatie?

06:55.470 --> 06:58.291
Nou, virtualisatie is de mogelijkheid om een computer

06:58.291 --> 07:01.560
te laten doen alsof er meerdere andere computers in zichzelf

07:01.560 --> 07:02.729
draaien.

07:02.729 --> 07:04.560
Waar dit op lijkt, is dat ik misschien

07:04.560 --> 07:07.140
een enkele laptop heb, zoals mijn MacBook.

07:07.140 --> 07:11.700
En in die MacBook heb ik één besturingssysteem, macOS.

07:11.700 --> 07:13.710
Als ik nu Windows of Linux wil draaien, moet

07:13.710 --> 07:15.600
ik mijn machine opnieuw formatteren en die

07:15.600 --> 07:16.920
software installeren.

07:16.920 --> 07:18.780
Dat zou echt onhandig zijn.

07:18.780 --> 07:21.360
Maar met virtualisatie hoef ik dat niet te doen.

07:21.360 --> 07:22.830
In plaats daarvan kan ik

07:22.830 --> 07:26.340
een programma als VMware of Virtualbox of Parallels draaien

07:26.340 --> 07:27.840
en in die software een virtuele

07:27.840 --> 07:30.000
computer maken.

07:30.000 --> 07:32.370
Ik kan het vertellen dat ik wil dat het één processor

07:32.370 --> 07:34.950
of twee processors of vier processors heeft.

07:34.950 --> 07:36.600
En ik kan het vertellen hoeveel geheugen ik

07:36.600 --> 07:38.010
wil en hoeveel opslagruimte ik wil.

07:38.010 --> 07:39.930
En het maakt deze virtuele computer

07:39.930 --> 07:42.510
die alleen in de software bestaat.

07:42.510 --> 07:44.645
Als ik het nieuwe besturingssysteem, zoals

07:44.645 --> 07:48.660
Windows, erin draai, zou ik kunnen zeggen dat dit een twee-kern processor is.

07:48.660 --> 07:52.770
Hij heeft vier gigabyte RAM en een harde schijf van 50 gigabyte.

07:52.770 --> 07:54.750
Dat alles bestaat alleen in software.

07:54.750 --> 07:57.296
Maar wanneer ik Windows installeer in die virtuele machine,

07:57.296 --> 07:59.670
denkt Windows dat het een volledige computer is.

07:59.670 --> 08:02.340
Hij denkt dat hij twee processors, vier gigabyte

08:02.340 --> 08:04.050
geheugen en een harde schijf

08:04.050 --> 08:06.270
van 50 gigabyte heeft.

08:06.270 --> 08:07.200
En dus denkt Windows

08:07.200 --> 08:09.390
dat het al deze fysieke hardware heeft, en dat

08:09.390 --> 08:11.400
is wat virtualisatie ons laat doen.

08:11.400 --> 08:13.659
Het stelt ons in staat om een computer te virtualiseren,

08:13.659 --> 08:15.600
virtuele hardware te geven en meerdere

08:15.600 --> 08:17.293
besturingssystemen te draaien

08:17.293 --> 08:20.280
binnen een enkele fysieke host.

08:20.280 --> 08:23.100
Naast VT en AMD-V is er nog een tweede niveau van ondersteuning

08:23.100 --> 08:24.450
voor virtualisatiehardware

08:24.450 --> 08:28.860
die je kunt vinden in sommige moderne processors.

08:28.860 --> 08:31.800
Op Intel systemen staat dit bekend als EPT, of uitgebreide

08:31.800 --> 08:33.480
paginatabel.

08:33.480 --> 08:35.490
En als je te maken hebt met een AMD

08:35.490 --> 08:39.810
processor, noemen ze dit rapid virtualization indexing, of RVI.

08:39.810 --> 08:42.390
Beide worden beschouwd als second level address translation

08:42.390 --> 08:45.450
of SLAT eigenschappen van softwarevirtualisatie die dan onderliggend

08:45.450 --> 08:48.060
zijn en ondersteund worden door die hardware processor

08:48.060 --> 08:50.430
om beter virtueel geheugenbeheer mogelijk te maken

08:50.430 --> 08:53.773
en je betere prestaties te geven als het gaat om het gebruik van geheugen

08:53.773 --> 08:56.913
binnen een virtuele machine.

08:57.870 --> 09:00.150
We gaan nog veel meer praten over virtualisatie

09:00.150 --> 09:02.130
in hun eigen lessen, maar voor nu wil ik

09:02.130 --> 09:03.480
dat je begrijpt dat sommige

09:03.480 --> 09:06.660
CPU's de mogelijkheid hebben om dit te doen binnen hun processorset,

09:06.660 --> 09:08.250
en de processoren die deze mogelijkheid

09:08.250 --> 09:10.530
hebben, zoals de processoren die VT van Intel

09:10.530 --> 09:16.470
ondersteunen of AMD-V van AMD, zullen je betere prestaties geven wanneer je virtualisatie doet dan degenen die

09:16.470 --> 09:19.260
dat niet doen.

09:19.260 --> 09:20.698
Dus, als je een machine gaat bouwen

09:20.698 --> 09:22.710
die je wilt gebruiken voor virtualisatie,

09:22.710 --> 09:24.060
zoals een server waarop veel

09:24.060 --> 09:25.995
andere virtuele servers gaan draaien,

09:25.995 --> 09:28.034
wil je er zeker van zijn dat de processoren

09:28.034 --> 09:31.710
die je kiest VT of AMD-V hebben, zodat ze direct hardwareversnelde virtualisatie

09:31.710 --> 09:34.170
kunnen ondersteunen, want dat geeft je een veel betere

09:34.170 --> 09:37.433
ervaring en veel betere prestaties dan wanneer je in plaats daarvan

09:37.433 --> 09:40.653
softwarevirtualisatie moet doen.
