WEBVTT

00:00.000 --> 00:00.990
Instrutor: Nesta

00:00.990 --> 00:03.390
lição, abordaremos os recursos da CPU.

00:03.390 --> 00:05.340
Isso inclui itens como multithreading,

00:05.340 --> 00:07.050
multiprocessamento simétrico,

00:07.050 --> 00:10.950
núcleo único versus multi-core e suporte à virtualização.

00:10.950 --> 00:12.180
Agora, o primeiro assunto

00:12.180 --> 00:15.840
que abordaremos é conhecido como multithreading, também chamado

00:15.840 --> 00:19.200
de SMT ou multithreading simultâneo ou hyper-threading, dependendo

00:19.200 --> 00:21.480
da CPU que você comprar.

00:21.480 --> 00:23.040
Hyper-threading é um termo usado

00:23.040 --> 00:24.780
pela Intel para esse processo.

00:24.780 --> 00:27.000
E o termo mais genérico é SMT, ou

00:27.000 --> 00:29.340
multithreading simultâneo.

00:29.340 --> 00:31.050
Agora, quando se trata de threading,

00:31.050 --> 00:33.870
esse é o conceito de um único fluxo de instruções que está

00:33.870 --> 00:37.350
sendo enviado por um aplicativo de software a um processador.

00:37.350 --> 00:40.770
Agora, a maioria dos aplicativos foi projetada para executar um único processo

00:40.770 --> 00:42.150
em um único thread.

00:42.150 --> 00:44.340
Isso significa que esse software

00:44.340 --> 00:45.720
faz tudo em série.

00:45.720 --> 00:47.250
Portanto, se eu lhe desse uma instrução

00:47.250 --> 00:48.930
de cinco coisas diferentes para

00:48.930 --> 00:50.730
fazer, você faria essas coisas na ordem:

00:50.730 --> 00:53.250
um, dois, três, quatro e cinco.

00:53.250 --> 00:55.260
E se cada uma delas levasse 10 minutos,

00:55.260 --> 00:57.510
seria um total de 50 minutos.

00:57.510 --> 01:00.240
Mas se eu pudesse permitir que você fizesse multithreading

01:00.240 --> 01:01.650
e fizesse essas coisas fora de

01:01.650 --> 01:03.981
ordem ou ao mesmo tempo, você poderia fazer mais

01:03.981 --> 01:07.050
de uma coisa ao mesmo tempo, enviando essas coisas para diferentes

01:07.050 --> 01:09.360
threads ou fluxos diferentes.

01:09.360 --> 01:11.130
Por exemplo, digamos que eu lhe disse

01:11.130 --> 01:12.450
que queria que você escrevesse

01:12.450 --> 01:13.500
algo com a mão direita

01:13.500 --> 01:15.900
e, ao mesmo tempo, queria que você batesse na mesa com

01:15.900 --> 01:17.070
a mão esquerda.

01:17.070 --> 01:18.570
Você pode fazer as duas coisas ao

01:18.570 --> 01:19.830
mesmo tempo, porque tem dois

01:19.830 --> 01:22.020
fios ou duas mãos para realizar essas ações.

01:22.020 --> 01:23.970
Essa é a ideia de multithreading.

01:23.970 --> 01:26.700
Assim, o que a Intel e os outros fabricantes fizeram foi

01:26.700 --> 01:28.860
desenvolver uma maneira de permitir que o

01:28.860 --> 01:30.720
software se comunicasse com seus processadores

01:30.720 --> 01:33.061
e executasse vários threads paralelos ao mesmo

01:33.061 --> 01:35.610
tempo em um único processador.

01:35.610 --> 01:37.050
Isso permite que esses threads

01:37.050 --> 01:39.420
sejam executados por meio desse processador e reduz

01:39.420 --> 01:41.340
o tempo ocioso em que a CPU fica parada aguardando

01:41.340 --> 01:43.080
a próxima ação.

01:43.080 --> 01:45.030
Ao fazer isso, podemos essencialmente

01:45.030 --> 01:46.680
tentar aumentar nossa capacidade

01:46.680 --> 01:48.006
e passar mais coisas pelo

01:48.006 --> 01:50.550
processador e tentar fazer mais coisas no mesmo

01:50.550 --> 01:52.410
período de tempo.

01:52.410 --> 01:55.140
Isso é ótimo, mas só funciona até certo ponto, e o

01:55.140 --> 01:57.570
software precisa ser capaz de usar e entender

01:57.570 --> 02:00.060
isso para poder informar ao sistema que você

02:00.060 --> 02:02.790
deseja usar vários threads ao mesmo tempo.

02:02.790 --> 02:04.140
Essa é a grande limitação quando

02:04.140 --> 02:06.630
se está lidando com algo como hyper-threading.

02:06.630 --> 02:08.400
Agora, outra maneira de superar

02:08.400 --> 02:13.320
isso é o que é conhecido como multiprocessamento simétrico, ou SMP.

02:13.320 --> 02:15.570
Agora, o SMP é a maneira tradicional de as estações

02:15.570 --> 02:17.304
de trabalho e os servidores fazerem isso,

02:17.304 --> 02:20.370
porque eles realmente tinham vários processadores.

02:20.370 --> 02:22.080
Para fazer isso, é necessário ter uma placa-mãe

02:22.080 --> 02:25.290
com dois soquetes de processador ou quatro soquetes de processador e, em

02:25.290 --> 02:27.420
seguida, instalar dois ou quatro processadores

02:27.420 --> 02:28.890
nessa placa-mãe.

02:28.890 --> 02:31.050
Quando você faz isso, todos esses processadores precisam

02:31.050 --> 02:32.790
ser do mesmo tipo e velocidade para que possam

02:32.790 --> 02:34.290
trabalhar juntos.

02:34.290 --> 02:37.410
E o seu sistema operacional subjacente precisa entender

02:37.410 --> 02:39.690
como usar mais de um processador.

02:39.690 --> 02:42.690
Por padrão, a maioria dos sistemas operacionais não faz isso.

02:42.690 --> 02:45.150
Portanto, era necessário ter um sistema operacional baseado

02:45.150 --> 02:47.670
em servidor, como o Windows Server 2019, para poder oferecer

02:47.670 --> 02:49.350
suporte a vários processadores.

02:49.350 --> 02:52.860
Por esse motivo, o SMP, ou multiprocessamento simétrico,

02:52.860 --> 02:55.620
não era muito útil em desktops e laptops.

02:55.620 --> 02:58.770
Em vez disso, a maioria dos desktops e laptops dependia

02:58.770 --> 03:01.110
do hyper-threading dos processadores Intel

03:01.110 --> 03:04.140
ou do multithreading simultâneo, ou SMT, se você estivesse

03:04.140 --> 03:06.720
usando um processador AMD.

03:06.720 --> 03:09.480
Portanto, o hyper-threading e o SMT funcionaram muito bem

03:09.480 --> 03:12.090
por um longo tempo, mas acabamos atingindo um limite de

03:12.090 --> 03:14.250
quantidade de coisas que queríamos processar

03:14.250 --> 03:16.920
e só tínhamos um único processador para fazer isso.

03:16.920 --> 03:19.020
Agora, como a maioria dos sistemas operacionais

03:19.020 --> 03:20.610
não sabia como lidar com vários soquetes

03:20.610 --> 03:23.220
ou vários processadores em uma determinada placa-mãe, os

03:23.220 --> 03:25.470
fabricantes começaram a criar o que é conhecido como

03:25.470 --> 03:27.420
pacote de vários núcleos.

03:27.420 --> 03:28.770
Agora, quando me refiro

03:28.770 --> 03:31.500
a um pacote, estou falando da CPU, o chip físico.

03:31.500 --> 03:33.570
Agora, em vez de ter dois pacotes físicos

03:33.570 --> 03:35.790
ou dois chips físicos em dois soquetes diferentes

03:35.790 --> 03:37.020
na placa-mãe, o que esses

03:37.020 --> 03:38.850
fabricantes decidiram fazer foi criar

03:38.850 --> 03:42.390
um único pacote que funcionasse como uma única CPU.

03:42.390 --> 03:43.740
Mas, dentro desse pacote,

03:43.740 --> 03:47.160
havia na verdade várias CPUs ou vários processadores.

03:47.160 --> 03:49.410
Isso significa que, para a placa-mãe,

03:49.410 --> 03:53.040
ela parecia uma CPU física, porque era, mas dentro dela havia

03:53.040 --> 03:54.540
vários núcleos, ou núcleos

03:54.540 --> 03:57.600
de unidades centrais de processamento.

03:57.600 --> 03:59.910
Isso permite que qualquer sistema operacional

03:59.910 --> 04:03.240
se comunique com esse único processador ou pacote de processadores,

04:03.240 --> 04:05.160
e o próprio pacote de processadores

04:05.160 --> 04:06.840
pode dividir essas instruções

04:06.840 --> 04:10.890
entre os vários núcleos internos da CPU.

04:10.890 --> 04:11.812
Pense da seguinte forma.

04:11.812 --> 04:14.250
Você tem uma casa com quatro quartos.

04:14.250 --> 04:16.320
Se alguém chegar à porta da frente e disser: "Preciso de uma cama

04:16.320 --> 04:17.580
para passar a noite", ele realmente não

04:17.580 --> 04:19.320
se importará com qual das quatro opções ele receberá,

04:19.320 --> 04:20.880
desde que tenha uma cama para passar a noite.

04:20.880 --> 04:22.710
Assim, você entra pela porta da frente,

04:22.710 --> 04:25.620
leva-os para um único cômodo e mostra-lhes apenas um cômodo.

04:25.620 --> 04:28.560
É basicamente isso que esse processador de vários núcleos está fazendo.

04:28.560 --> 04:30.570
À medida que novas pessoas entram pela porta, ele as leva

04:30.570 --> 04:32.790
para um quarto individual e as deixa dormir lá por uma noite,

04:32.790 --> 04:35.700
ou fazer seu processamento, e depois as envia para fora novamente.

04:35.700 --> 04:36.720
Tudo isso está sendo tratado

04:36.720 --> 04:38.220
pela pessoa que está na porta da frente,

04:38.220 --> 04:40.860
que, nesse caso, é o pacote de vários núcleos.

04:40.860 --> 04:43.200
Em seguida, ele os coloca no compartimento individual

04:43.200 --> 04:46.890
ou no subprocessador individual de que precisa para fazer esse trabalho.

04:46.890 --> 04:49.290
Essa é a ideia de um pacote com vários núcleos.

04:49.290 --> 04:51.480
A maioria de nós já ouviu falar disso antes, porque,

04:51.480 --> 04:52.650
em seu sistema, você provavelmente

04:52.650 --> 04:55.110
tem um processador de vários núcleos.

04:55.110 --> 04:57.120
Você provavelmente tem um processador dual-core,

04:57.120 --> 04:59.790
o que significa que tem duas CPUs em um único chip, ou um processador

04:59.790 --> 05:01.230
quad, o que significa que tem quatro

05:01.230 --> 05:03.960
processadores em um único chip.

05:03.960 --> 05:05.730
Ou você tem um processador hexa, o que

05:05.730 --> 05:08.340
significa que você tem seis núcleos em um único chip.

05:08.340 --> 05:09.840
Ou você tem um processador octa,

05:09.840 --> 05:12.300
o que significa que tem oito núcleos em um único chip.

05:12.300 --> 05:16.090
Por exemplo, em minha CPU, tenho um processador de oito núcleos

05:16.090 --> 05:19.260
em meu computador desktop, que é um chip físico, mas tem

05:19.260 --> 05:21.630
oito subprocessadores dentro dele.

05:21.630 --> 05:23.370
Portanto, isso é conhecido como um processador

05:23.370 --> 05:25.410
de oito núcleos ou de vários núcleos.

05:25.410 --> 05:27.240
Agora, além de ter vários núcleos

05:27.240 --> 05:28.800
e hyper-threading, você pode

05:28.800 --> 05:29.991
combinar os dois para

05:29.991 --> 05:32.846
que cada um desses processadores dentro do pacote,

05:32.846 --> 05:34.560
por exemplo, no meu sistema eu tenho

05:34.560 --> 05:37.530
o octa-core, que tem oito processadores.

05:37.530 --> 05:38.940
Agora, dentro desse único pacote,

05:38.940 --> 05:40.050
há oito processadores, e

05:40.050 --> 05:41.730
cada um desses oito processadores também

05:41.730 --> 05:43.710
pode suportar hyper-threading.

05:43.710 --> 05:46.860
Isso significa que tenho 16 threads com oito CPUs, o que me

05:46.860 --> 05:49.260
dá uma grande capacidade de processamento

05:49.260 --> 05:50.850
nessa máquina específica.

05:50.850 --> 05:53.250
Muito bem, até o momento, falamos sobre três dos

05:53.250 --> 05:56.010
quatro assuntos que queríamos abordar nesta lição.

05:56.010 --> 05:57.390
Já falamos sobre hyper-threading

05:57.390 --> 06:00.090
e multithreading simultâneo, conhecido como SMT.

06:00.090 --> 06:02.460
Falamos sobre multiprocessamento simétrico,

06:02.460 --> 06:04.830
ou seja, ter várias CPUs em soquetes, e depois

06:04.830 --> 06:07.530
falamos sobre essa ideia de processadores de vários

06:07.530 --> 06:09.120
núcleos, em que você tem uma única

06:09.120 --> 06:11.220
CPU com vários processadores dentro dela,

06:11.220 --> 06:14.010
sejam eles dois, quatro, seis ou oito.

06:14.010 --> 06:17.400
Agora, a última coisa sobre a qual precisamos falar é a virtualização.

06:17.400 --> 06:20.490
Agora, a virtualização é outro recurso das CPUs, mas não se relaciona

06:20.490 --> 06:22.020
realmente com os três que acabamos

06:22.020 --> 06:23.220
de mencionar.

06:23.220 --> 06:24.780
As três que acabamos de falar tratavam

06:24.780 --> 06:27.300
de como obter mais desempenho de um único chip ou

06:27.300 --> 06:28.710
de vários chips.

06:28.710 --> 06:30.300
Mas quando falamos de virtualização,

06:30.300 --> 06:32.880
estamos falando de poder emular um hardware

06:32.880 --> 06:35.730
que realmente não existe.

06:35.730 --> 06:37.080
Na verdade, isso é obtido

06:37.080 --> 06:39.450
por meio da tecnologia de virtualização

06:39.450 --> 06:42.330
da Intel, conhecida como VT, ou da virtualização

06:42.330 --> 06:44.700
da AMD, conhecida como AMD-V.

06:44.700 --> 06:47.340
Agora, ambos fornecem extensões de processador para

06:47.340 --> 06:49.710
dar suporte à virtualização, que é chamada de

06:49.710 --> 06:52.050
virtualização assistida por hardware.

06:52.050 --> 06:53.021
E isso provavelmente

06:53.021 --> 06:55.470
traz à tona a questão: o que é virtualização?

06:55.470 --> 06:58.291
Bem, a virtualização é a capacidade de fazer com que um computador

06:58.291 --> 07:01.560
finja que está executando vários outros computadores dentro dele

07:01.560 --> 07:02.729
mesmo.

07:02.729 --> 07:04.560
Agora, o que parece é que posso

07:04.560 --> 07:07.140
ter um único laptop, como o meu MacBook.

07:07.140 --> 07:11.700
E nesse MacBook, tenho um sistema operacional, o macOS.

07:11.700 --> 07:13.710
Agora, se eu quisesse executar o Windows ou o

07:13.710 --> 07:15.600
Linux, teria que reformatar minha máquina

07:15.600 --> 07:16.920
e instalar esse software.

07:16.920 --> 07:18.780
Isso seria realmente inconveniente.

07:18.780 --> 07:21.360
Mas com a virtualização, não preciso fazer isso.

07:21.360 --> 07:22.830
Em vez disso, posso executar

07:22.830 --> 07:26.340
um programa como o VMware, o Virtualbox ou o Parallels e, dentro

07:26.340 --> 07:27.840
desse software, posso criar

07:27.840 --> 07:30.000
um computador virtual.

07:30.000 --> 07:32.370
Posso dizer que quero que ele tenha um processador,

07:32.370 --> 07:34.950
dois processadores ou quatro processadores.

07:34.950 --> 07:36.600
E posso informar a quantidade de memória

07:36.600 --> 07:38.010
e de armazenamento que desejo.

07:38.010 --> 07:39.930
E ele criará esse computador

07:39.930 --> 07:42.510
virtual que só existe no software.

07:42.510 --> 07:44.645
Agora, quando executo o novo sistema operacional,

07:44.645 --> 07:48.660
como o Windows, dentro dele, posso dizer que esse é um processador de dois núcleos.

07:48.660 --> 07:52.770
Ele tem quatro gigabytes de RAM e um disco rígido de 50 gigabytes.

07:52.770 --> 07:54.750
Tudo isso existe apenas no software.

07:54.750 --> 07:57.296
Mas quando instalo o Windows nessa máquina virtual,

07:57.296 --> 07:59.670
o Windows pensa que é um computador completo.

07:59.670 --> 08:02.340
Ele acha que tem dois processadores completos, quatro

08:02.340 --> 08:04.050
gigabytes completos de memória e um

08:04.050 --> 08:06.270
disco rígido completo de 50 gigabytes.

08:06.270 --> 08:07.200
Portanto, para o Windows,

08:07.200 --> 08:09.390
ele acha que tem todo esse hardware físico, e é isso

08:09.390 --> 08:11.400
que a virtualização nos permite fazer.

08:11.400 --> 08:13.659
Ele nos permite virtualizar um computador,

08:13.659 --> 08:15.600
fornecer hardware virtual e executar

08:15.600 --> 08:17.293
vários sistemas operacionais

08:17.293 --> 08:20.280
em um único host físico.

08:20.280 --> 08:23.100
Agora, além do VT e do AMD-V, há também um segundo nível

08:23.100 --> 08:24.450
de suporte a hardware de

08:24.450 --> 08:27.120
virtualização que você pode procurar em alguns

08:27.120 --> 08:28.860
processadores modernos.

08:28.860 --> 08:31.800
Nos sistemas Intel, isso é conhecido como EPT, ou tabela

08:31.800 --> 08:33.480
de páginas estendidas.

08:33.480 --> 08:35.490
E quando se trata de um processador

08:35.490 --> 08:39.810
AMD, eles chamam isso de indexação de virtualização rápida, ou RVI.

08:39.810 --> 08:42.390
Ambos são considerados recursos de tradução de endereços

08:42.390 --> 08:45.450
de segundo nível ou SLAT da virtualização de software que são

08:45.450 --> 08:48.060
subjacentes e suportados por esse processador de hardware

08:48.060 --> 08:50.430
para permitir um melhor gerenciamento da memória

08:50.430 --> 08:52.620
virtual e proporcionar um melhor desempenho

08:52.620 --> 08:53.773
quando se trata de usar a

08:53.773 --> 08:56.913
memória dentro de uma máquina virtual.

08:57.870 --> 09:00.150
Falaremos muito mais sobre virtualização

09:00.150 --> 09:02.130
em suas próprias lições, mas, por enquanto,

09:02.130 --> 09:03.480
quero que você entenda que

09:03.480 --> 09:06.660
algumas CPUs têm a capacidade de fazer isso dentro do conjunto

09:06.660 --> 09:08.250
de processadores, e os processadores

09:08.250 --> 09:10.530
que têm esse recurso, como os que suportam

09:10.530 --> 09:14.844
o VT da Intel ou o AMD-V da AMD, proporcionarão melhor desempenho quando você estiver

09:14.844 --> 09:16.470
fazendo a virtualização do que

09:16.470 --> 09:19.260
os que não suportam.

09:19.260 --> 09:20.698
Portanto, se você for construir

09:20.698 --> 09:22.710
uma máquina e quiser usá-la para virtualização,

09:22.710 --> 09:24.060
como um servidor que executará

09:24.060 --> 09:25.995
vários outros servidores virtuais, certifique-se

09:25.995 --> 09:28.034
de que os processadores selecionados tenham

09:28.034 --> 09:31.710
VT ou AMD-V para que possam oferecer suporte à virtualização acelerada por hardware

09:31.710 --> 09:34.170
direto, pois isso proporcionará uma experiência muito

09:34.170 --> 09:37.433
melhor e um desempenho muito melhor do que se você tiver que fazer a virtualização

09:37.433 --> 09:40.653
por software.
