Instructeur: In deze
les gaan we CPU-functies behandelen.
Dit omvat zaken als multithreading,
symmetrische multiprocessing,
single core versus multi-core en ondersteuning voor virtualisatie.
Het eerste dat we gaan
behandelen staat bekend als multithreading, ook wel SMT of simultaneous
multithreading of hyper-threading genoemd, afhankelijk
van welke CPU je koopt.
Hyper-threading is een term die
Intel gebruikt voor dit proces.
En de meer algemene term is SMT,
of simultaan multithreading.
Als je nu te maken hebt met threading,
is dit het concept van een enkele stroom instructies die
door een softwareapplicatie naar een processor wordt gestuurd.
De meeste applicaties zijn ontworpen om een enkel proces in een enkele
thread te draaien.
En dit betekent dat die software
alles in serie doet.
Dus als ik je een instructie zou geven
van vijf verschillende dingen die
je moet doen, dan zou je die dingen in volgorde
doen: één, twee, drie, vier en vijf.
En als elk van die dingen je 10 minuten kostte,
zou dat in totaal 50 minuten zijn.
Maar als ik je zou kunnen toestaan om multithreading toe te passen
en die dingen in een andere volgorde
te doen of ze tegelijkertijd te doen, dan zou je meer dan
één ding tegelijk kunnen doen door deze dingen naar verschillende threads
of verschillende streams te sturen.
Stel bijvoorbeeld dat ik je vertelde dat
ik wilde dat je iets opschreef
met je rechterhand en dat
ik tegelijkertijd wilde dat je met je linkerhand op
het bureau tikte.
Je kunt ze allebei tegelijk doen,
omdat je twee draden of twee
handen hebt om die acties uit te voeren.
Dit is het idee van multithreading.
En dus ontwikkelden Intel en de andere fabrikanten
een manier om software te laten praten
met hun processors en meerdere parallelle
threads tegelijkertijd te laten draaien
binnen die ene processor.
Hierdoor kunnen deze threads door
die processor worden gedraaid en wordt de tijd, de inactieve
tijd, dat die CPU daar zit te wachten op de volgende
actie, verminderd.
Door dit te doen, kunnen we in wezen proberen
ons vermogen te vergroten en meer
dingen door de processor te
krijgen en proberen meer dingen gedaan te krijgen in
dezelfde hoeveelheid tijd.
Dat is geweldig, maar het werkt maar tot een bepaald
punt en de software moet dat kunnen gebruiken
en begrijpen om het systeem te vertellen dat je
meerdere threads tegelijk wilt gebruiken.
Dit is de grote beperking als
je te maken hebt met zoiets als hyper-threading.
Een andere manier om dit te
omzeilen is wat bekend staat als symmetrische multiprocessing, of SMP.
SMP is de traditionele manier waarop werkstations
en servers dit deden, omdat ze eigenlijk
meerdere processors hadden.
Om dit te doen, moet je een moederbord
hebben met twee of vier processorsockets en dan installeer
je twee of vier processors op dat moederbord.
Wanneer je dit doet, moeten al die processors
van hetzelfde type en snelheid zijn
zodat ze kunnen samenwerken.
En je onderliggende besturingssysteem moet begrijpen hoe
het meer dan één processor moet gebruiken.
Standaard deden de meeste besturingssystemen dat niet.
En dus moest je een servergebaseerd besturingssysteem
hebben, zoals Windows Server 2019, om meerdere processors
te kunnen ondersteunen.
Hierdoor was SMP, of symmetrische multiprocessing, niet
erg bruikbaar in desktops en laptops.
En in plaats daarvan moesten de meeste desktops en laptops
vertrouwen op hyper-threading door Intel-processors
of simultaan multithreading, of SMT, als je een AMD-processor
gebruikt.
Dus, hyper-threading en SMT werkten lange tijd erg goed,
maar uiteindelijk kwamen we toch op een grens van
hoeveel dingen we wilden verwerken en dat
we maar één processor hadden om dat te doen.
Omdat de meeste besturingssystemen niet wisten
hoe ze om moesten gaan met meerdere
sockets of meerdere processors op een bepaald moederbord,
begonnen fabrikanten met het maken van wat bekend
staat als een multi-core pakket.
Als ik het over een pakket
heb, heb ik het over de CPU, de fysieke chip.
In plaats van twee fysieke pakketten of
twee fysieke chips in twee verschillende
sockets op je moederbord
te hebben, besloten deze fabrikanten
een enkel pakket te maken dat werkte als een enkele CPU.
Maar in dat pakket zaten
eigenlijk meerdere CPU's of meerdere processors.
Dit betekende dat het er voor het moederbord
uitzag als één fysieke CPU, want dat was het ook, maar binnenin zaten
meerdere kernen, of kernen
van een centrale verwerkingseenheid.
Hierdoor kan elk besturingssysteem
praten met die ene processor of dat processorpakket,
waarna het processorpakket
zelf die instructies kan
verdelen over de interne multicores in die CPU.
Bekijk het eens op deze manier.
Je hebt een huis met vier slaapkamers.
Als iemand aan de voordeur komt en zegt: "Ik heb een bed
nodig voor de nacht", dan maakt het
hem niet uit welke van de vier ze krijgen, zolang
ze maar een bed hebben voor de nacht.
En dus ga je de voordeur binnen, neem
je ze mee naar één kamer en laat je ze maar één kamer zien.
Dat is in wezen wat deze multi-core processor doet.
Als er nieuwe mensen binnenkomen, brengt het
ze naar een enkele kamer en laat ze daar overnachten
of hun verwerking doen, en stuurt ze dan weer naar buiten.
Dat wordt allemaal afgehandeld
door de persoon aan de voordeur,
wat in dit geval dat multi-core pakket is.
En dan plaatst het ze in het individuele compartiment
of de individuele subprocessor die het nodig heeft om dat werk te doen.
Dat is het idee van een multi-core pakket.
De meesten van ons hebben hier wel eens van gehoord,
omdat je op je systeem waarschijnlijk
een multi-core processor hebt.
Je hebt waarschijnlijk een dual-core processor,
wat betekent dat je twee CPU's in een enkele chip hebt, of je hebt
een quad-processor, wat betekent
dat je vier processors in een enkele
chip hebt.
Of je hebt een hexa processor, wat betekent
dat je zes kernen in een enkele chip hebt.
Of je hebt een octa processor,
wat betekent dat je acht kernen in één chip hebt.
Op mijn CPU heb ik bijvoorbeeld een processor met acht kernen
op mijn desktopcomputer. Het is één fysieke chip, maar
er zitten acht subprocessors in.
En dus staat dit bekend als een achtkern-
of multikernprocessor.
Naast het hebben van multi-core
en hyper-threading, kun je
de twee ook combineren,
dus elk van die processors in het pakket, bijvoorbeeld
in mijn systeem heb ik de octa-core,
die acht processors heeft.
In dat ene pakket zitten acht
processors, en elk van
die acht processors kan ook hyper-threading
ondersteunen.
Dit betekent dat ik 16 threads heb met acht CPU's, waardoor
ik een ton aan verwerkingscapaciteit heb op
die specifieke machine.
Goed, we hebben het nu dus gehad over drie van de
vier dingen die we in deze les wilden behandelen.
We hebben het gehad over hyper-threading
en simultaan multithreading, beter bekend als SMT.
We hebben het gehad over symmetrische multiprocessing,
of het hebben van meerdere CPU's in sockets, en
toen hebben we het gehad over het idee van multicore processors,
waarbij je een enkele CPU hebt met
meerdere processors erin, of het er nu twee,
vier, zes of acht zijn.
Het laatste waar we het over moeten hebben is virtualisatie.
Nu is virtualisatie een andere eigenschap van CPU's, maar het heeft
niet echt te maken met de drie waar
we het net over hadden.
De drie waar we het net over hadden,
gingen over hoe je meer prestaties uit een enkele chip of
meerdere chips kunt halen.
Maar als we het hebben over virtualisatie,
dan hebben we het over de mogelijkheid om hardware te
emuleren die in werkelijkheid niet bestaat.
Dit wordt feitelijk
bereikt door Intel's virtualisatietechnologie,
bekend als VT, of AMD's virtualisatie, bekend
als AMD-V.
Beide bieden processoruitbreidingen om virtualisatie
te ondersteunen, wat hardware ondersteunde
virtualisatie wordt genoemd.
En dit brengt waarschijnlijk
het punt naar boven, wat is virtualisatie?
Nou, virtualisatie is de mogelijkheid om een computer
te laten doen alsof er meerdere andere computers in zichzelf
draaien.
Waar dit op lijkt, is dat ik misschien
een enkele laptop heb, zoals mijn MacBook.
En in die MacBook heb ik één besturingssysteem, macOS.
Als ik nu Windows of Linux wil draaien, moet
ik mijn machine opnieuw formatteren en die
software installeren.
Dat zou echt onhandig zijn.
Maar met virtualisatie hoef ik dat niet te doen.
In plaats daarvan kan ik
een programma als VMware of Virtualbox of Parallels draaien
en in die software een virtuele
computer maken.
Ik kan het vertellen dat ik wil dat het één processor
of twee processors of vier processors heeft.
En ik kan het vertellen hoeveel geheugen ik
wil en hoeveel opslagruimte ik wil.
En het maakt deze virtuele computer
die alleen in de software bestaat.
Als ik het nieuwe besturingssysteem, zoals
Windows, erin draai, zou ik kunnen zeggen dat dit een twee-kern processor is.
Hij heeft vier gigabyte RAM en een harde schijf van 50 gigabyte.
Dat alles bestaat alleen in software.
Maar wanneer ik Windows installeer in die virtuele machine,
denkt Windows dat het een volledige computer is.
Hij denkt dat hij twee processors, vier gigabyte
geheugen en een harde schijf
van 50 gigabyte heeft.
En dus denkt Windows
dat het al deze fysieke hardware heeft, en dat
is wat virtualisatie ons laat doen.
Het stelt ons in staat om een computer te virtualiseren,
virtuele hardware te geven en meerdere
besturingssystemen te draaien
binnen een enkele fysieke host.
Naast VT en AMD-V is er nog een tweede niveau van ondersteuning
voor virtualisatiehardware
die je kunt vinden in sommige moderne processors.
Op Intel systemen staat dit bekend als EPT, of uitgebreide
paginatabel.
En als je te maken hebt met een AMD
processor, noemen ze dit rapid virtualization indexing, of RVI.
Beide worden beschouwd als second level address translation
of SLAT eigenschappen van softwarevirtualisatie die dan onderliggend
zijn en ondersteund worden door die hardware processor
om beter virtueel geheugenbeheer mogelijk te maken
en je betere prestaties te geven als het gaat om het gebruik van geheugen
binnen een virtuele machine.
We gaan nog veel meer praten over virtualisatie
in hun eigen lessen, maar voor nu wil ik
dat je begrijpt dat sommige
CPU's de mogelijkheid hebben om dit te doen binnen hun processorset,
en de processoren die deze mogelijkheid
hebben, zoals de processoren die VT van Intel
ondersteunen of AMD-V van AMD, zullen je betere prestaties geven wanneer je virtualisatie doet dan degenen die
dat niet doen.
Dus, als je een machine gaat bouwen
die je wilt gebruiken voor virtualisatie,
zoals een server waarop veel
andere virtuele servers gaan draaien,
wil je er zeker van zijn dat de processoren
die je kiest VT of AMD-V hebben, zodat ze direct hardwareversnelde virtualisatie
kunnen ondersteunen, want dat geeft je een veel betere
ervaring en veel betere prestaties dan wanneer je in plaats daarvan
softwarevirtualisatie moet doen.