Instrutor: Nesta
lição, abordaremos os recursos da CPU.
Isso inclui itens como multithreading,
multiprocessamento simétrico,
núcleo único versus multi-core e suporte à virtualização.
Agora, o primeiro assunto
que abordaremos é conhecido como multithreading, também chamado
de SMT ou multithreading simultâneo ou hyper-threading, dependendo
da CPU que você comprar.
Hyper-threading é um termo usado
pela Intel para esse processo.
E o termo mais genérico é SMT, ou
multithreading simultâneo.
Agora, quando se trata de threading,
esse é o conceito de um único fluxo de instruções que está
sendo enviado por um aplicativo de software a um processador.
Agora, a maioria dos aplicativos foi projetada para executar um único processo
em um único thread.
Isso significa que esse software
faz tudo em série.
Portanto, se eu lhe desse uma instrução
de cinco coisas diferentes para
fazer, você faria essas coisas na ordem:
um, dois, três, quatro e cinco.
E se cada uma delas levasse 10 minutos,
seria um total de 50 minutos.
Mas se eu pudesse permitir que você fizesse multithreading
e fizesse essas coisas fora de
ordem ou ao mesmo tempo, você poderia fazer mais
de uma coisa ao mesmo tempo, enviando essas coisas para diferentes
threads ou fluxos diferentes.
Por exemplo, digamos que eu lhe disse
que queria que você escrevesse
algo com a mão direita
e, ao mesmo tempo, queria que você batesse na mesa com
a mão esquerda.
Você pode fazer as duas coisas ao
mesmo tempo, porque tem dois
fios ou duas mãos para realizar essas ações.
Essa é a ideia de multithreading.
Assim, o que a Intel e os outros fabricantes fizeram foi
desenvolver uma maneira de permitir que o
software se comunicasse com seus processadores
e executasse vários threads paralelos ao mesmo
tempo em um único processador.
Isso permite que esses threads
sejam executados por meio desse processador e reduz
o tempo ocioso em que a CPU fica parada aguardando
a próxima ação.
Ao fazer isso, podemos essencialmente
tentar aumentar nossa capacidade
e passar mais coisas pelo
processador e tentar fazer mais coisas no mesmo
período de tempo.
Isso é ótimo, mas só funciona até certo ponto, e o
software precisa ser capaz de usar e entender
isso para poder informar ao sistema que você
deseja usar vários threads ao mesmo tempo.
Essa é a grande limitação quando
se está lidando com algo como hyper-threading.
Agora, outra maneira de superar
isso é o que é conhecido como multiprocessamento simétrico, ou SMP.
Agora, o SMP é a maneira tradicional de as estações
de trabalho e os servidores fazerem isso,
porque eles realmente tinham vários processadores.
Para fazer isso, é necessário ter uma placa-mãe
com dois soquetes de processador ou quatro soquetes de processador e, em
seguida, instalar dois ou quatro processadores
nessa placa-mãe.
Quando você faz isso, todos esses processadores precisam
ser do mesmo tipo e velocidade para que possam
trabalhar juntos.
E o seu sistema operacional subjacente precisa entender
como usar mais de um processador.
Por padrão, a maioria dos sistemas operacionais não faz isso.
Portanto, era necessário ter um sistema operacional baseado
em servidor, como o Windows Server 2019, para poder oferecer
suporte a vários processadores.
Por esse motivo, o SMP, ou multiprocessamento simétrico,
não era muito útil em desktops e laptops.
Em vez disso, a maioria dos desktops e laptops dependia
do hyper-threading dos processadores Intel
ou do multithreading simultâneo, ou SMT, se você estivesse
usando um processador AMD.
Portanto, o hyper-threading e o SMT funcionaram muito bem
por um longo tempo, mas acabamos atingindo um limite de
quantidade de coisas que queríamos processar
e só tínhamos um único processador para fazer isso.
Agora, como a maioria dos sistemas operacionais
não sabia como lidar com vários soquetes
ou vários processadores em uma determinada placa-mãe, os
fabricantes começaram a criar o que é conhecido como
pacote de vários núcleos.
Agora, quando me refiro
a um pacote, estou falando da CPU, o chip físico.
Agora, em vez de ter dois pacotes físicos
ou dois chips físicos em dois soquetes diferentes
na placa-mãe, o que esses
fabricantes decidiram fazer foi criar
um único pacote que funcionasse como uma única CPU.
Mas, dentro desse pacote,
havia na verdade várias CPUs ou vários processadores.
Isso significa que, para a placa-mãe,
ela parecia uma CPU física, porque era, mas dentro dela havia
vários núcleos, ou núcleos
de unidades centrais de processamento.
Isso permite que qualquer sistema operacional
se comunique com esse único processador ou pacote de processadores,
e o próprio pacote de processadores
pode dividir essas instruções
entre os vários núcleos internos da CPU.
Pense da seguinte forma.
Você tem uma casa com quatro quartos.
Se alguém chegar à porta da frente e disser: "Preciso de uma cama
para passar a noite", ele realmente não
se importará com qual das quatro opções ele receberá,
desde que tenha uma cama para passar a noite.
Assim, você entra pela porta da frente,
leva-os para um único cômodo e mostra-lhes apenas um cômodo.
É basicamente isso que esse processador de vários núcleos está fazendo.
À medida que novas pessoas entram pela porta, ele as leva
para um quarto individual e as deixa dormir lá por uma noite,
ou fazer seu processamento, e depois as envia para fora novamente.
Tudo isso está sendo tratado
pela pessoa que está na porta da frente,
que, nesse caso, é o pacote de vários núcleos.
Em seguida, ele os coloca no compartimento individual
ou no subprocessador individual de que precisa para fazer esse trabalho.
Essa é a ideia de um pacote com vários núcleos.
A maioria de nós já ouviu falar disso antes, porque,
em seu sistema, você provavelmente
tem um processador de vários núcleos.
Você provavelmente tem um processador dual-core,
o que significa que tem duas CPUs em um único chip, ou um processador
quad, o que significa que tem quatro
processadores em um único chip.
Ou você tem um processador hexa, o que
significa que você tem seis núcleos em um único chip.
Ou você tem um processador octa,
o que significa que tem oito núcleos em um único chip.
Por exemplo, em minha CPU, tenho um processador de oito núcleos
em meu computador desktop, que é um chip físico, mas tem
oito subprocessadores dentro dele.
Portanto, isso é conhecido como um processador
de oito núcleos ou de vários núcleos.
Agora, além de ter vários núcleos
e hyper-threading, você pode
combinar os dois para
que cada um desses processadores dentro do pacote,
por exemplo, no meu sistema eu tenho
o octa-core, que tem oito processadores.
Agora, dentro desse único pacote,
há oito processadores, e
cada um desses oito processadores também
pode suportar hyper-threading.
Isso significa que tenho 16 threads com oito CPUs, o que me
dá uma grande capacidade de processamento
nessa máquina específica.
Muito bem, até o momento, falamos sobre três dos
quatro assuntos que queríamos abordar nesta lição.
Já falamos sobre hyper-threading
e multithreading simultâneo, conhecido como SMT.
Falamos sobre multiprocessamento simétrico,
ou seja, ter várias CPUs em soquetes, e depois
falamos sobre essa ideia de processadores de vários
núcleos, em que você tem uma única
CPU com vários processadores dentro dela,
sejam eles dois, quatro, seis ou oito.
Agora, a última coisa sobre a qual precisamos falar é a virtualização.
Agora, a virtualização é outro recurso das CPUs, mas não se relaciona
realmente com os três que acabamos
de mencionar.
As três que acabamos de falar tratavam
de como obter mais desempenho de um único chip ou
de vários chips.
Mas quando falamos de virtualização,
estamos falando de poder emular um hardware
que realmente não existe.
Na verdade, isso é obtido
por meio da tecnologia de virtualização
da Intel, conhecida como VT, ou da virtualização
da AMD, conhecida como AMD-V.
Agora, ambos fornecem extensões de processador para
dar suporte à virtualização, que é chamada de
virtualização assistida por hardware.
E isso provavelmente
traz à tona a questão: o que é virtualização?
Bem, a virtualização é a capacidade de fazer com que um computador
finja que está executando vários outros computadores dentro dele
mesmo.
Agora, o que parece é que posso
ter um único laptop, como o meu MacBook.
E nesse MacBook, tenho um sistema operacional, o macOS.
Agora, se eu quisesse executar o Windows ou o
Linux, teria que reformatar minha máquina
e instalar esse software.
Isso seria realmente inconveniente.
Mas com a virtualização, não preciso fazer isso.
Em vez disso, posso executar
um programa como o VMware, o Virtualbox ou o Parallels e, dentro
desse software, posso criar
um computador virtual.
Posso dizer que quero que ele tenha um processador,
dois processadores ou quatro processadores.
E posso informar a quantidade de memória
e de armazenamento que desejo.
E ele criará esse computador
virtual que só existe no software.
Agora, quando executo o novo sistema operacional,
como o Windows, dentro dele, posso dizer que esse é um processador de dois núcleos.
Ele tem quatro gigabytes de RAM e um disco rígido de 50 gigabytes.
Tudo isso existe apenas no software.
Mas quando instalo o Windows nessa máquina virtual,
o Windows pensa que é um computador completo.
Ele acha que tem dois processadores completos, quatro
gigabytes completos de memória e um
disco rígido completo de 50 gigabytes.
Portanto, para o Windows,
ele acha que tem todo esse hardware físico, e é isso
que a virtualização nos permite fazer.
Ele nos permite virtualizar um computador,
fornecer hardware virtual e executar
vários sistemas operacionais
em um único host físico.
Agora, além do VT e do AMD-V, há também um segundo nível
de suporte a hardware de
virtualização que você pode procurar em alguns
processadores modernos.
Nos sistemas Intel, isso é conhecido como EPT, ou tabela
de páginas estendidas.
E quando se trata de um processador
AMD, eles chamam isso de indexação de virtualização rápida, ou RVI.
Ambos são considerados recursos de tradução de endereços
de segundo nível ou SLAT da virtualização de software que são
subjacentes e suportados por esse processador de hardware
para permitir um melhor gerenciamento da memória
virtual e proporcionar um melhor desempenho
quando se trata de usar a
memória dentro de uma máquina virtual.
Falaremos muito mais sobre virtualização
em suas próprias lições, mas, por enquanto,
quero que você entenda que
algumas CPUs têm a capacidade de fazer isso dentro do conjunto
de processadores, e os processadores
que têm esse recurso, como os que suportam
o VT da Intel ou o AMD-V da AMD, proporcionarão melhor desempenho quando você estiver
fazendo a virtualização do que
os que não suportam.
Portanto, se você for construir
uma máquina e quiser usá-la para virtualização,
como um servidor que executará
vários outros servidores virtuais, certifique-se
de que os processadores selecionados tenham
VT ou AMD-V para que possam oferecer suporte à virtualização acelerada por hardware
direto, pois isso proporcionará uma experiência muito
melhor e um desempenho muito melhor do que se você tiver que fazer a virtualização
por software.