Trabalho de Sistemas Operacionais
KVM(Kernel-based Virtual Machine)


Virtualização

Segundo a IBM, virtualização é a utilização de um software para criar uma camada de abstração que opera sobre o hardware, todos os componentes de hardware são gerenciados e distribuídos entre vários computadores virtuais, denominados de virtual machines (VMs). Cada máquina virtual é independente e executa um sistema operacional (SO) próprio e seus aplicativos. As máquinas virtuais não interagem diretamente com o hardware físico, são coordenadas por um software intermediário chamado hypervisor.


Hypervisor

É o software responsável por coordenar o particionamento de recursos do hardware (CPU, memória e armazenamento) e distribui-los às máquinas virtuais, tendo em vista atender de forma eficiente a demanda dinâmica de recursos adicionais exigidos pelas máquinas no decorrer da sua execução. O hardware usado como Hypervisor é chamado de host e as máquinas virtuais que operam sobre ele são denominadas de guests. São divididos em dois tipos

Kernel do Linux

É o sistema responsável por conectar todos os processos executados em uma máquina e o seus componentes de hardware. Suas funções são gerenciamento de memória, gerenciamento da comunicação entre processos (IPC), gerenciamento de arquivos, chamadas de sistema e segurança, entre outros. Um código pode ser executado pelo sistema de dois modos: modo usuário e modo Kernel, quando é executado no modo Kernel é liberado acesso total ao hardware, já o modo usuário restringe o uso de algumas funcionalidades – essa separação serve como prevenção e segurança do sistema, já que operações realizadas de formas errôneas podem comprometer todo o sistema.

KVM

O Kernel-based Virtual Machine (KVM) é um módulo do Kernel do Linux, é um projeto open source iniciado em 2006 por Avi Kivity e a partir de 2007 foi introduzido no código fonte do Kernel do Linux, está incluído em todas as versões do Linux a partir da versão 2.6.20, transforma o Linux em um hypervisor do tipo 1 (bare-metal) – executado diretamente no hardware. A integração ao Linux proporciona o aproveitamento das funcionalidades já existentes, amplamente consolidadas, e principalmente o reaproveitamento das adições e atualizações de novas funcionalidades ao sistema Linux.

O KVM torna-se atrativo porque permite que um sistema operacional hóspede (host) crie máquinas virtuais independentes, chamadas de convidados (guests), que rodam com seu próprio sistema operacional não modificado e possuem seu próprio hardware virtual privado, possuindo: placas de rede, disco rígido, dispositivos gráficos, entre outros.

Além disso, a grande variedade de Sos que o KVM suporta o torna útil para projetos que necessitam de um sistema operacional específico. Entre a gama de SOs que o KVM suporta estão: GNU/Linux, BSD, Solaris, Windows, Haiku, ReactOS, AROS, entre outros.

Funcionamento

O KVM não opera de forma singular, mas sim de forma cooperativa com um software emulador e virtualizador de processador chamado QEMU (Quick Emulator). São duas formas de comunicação entre o KVM e o QEMU, por meio do arquivo de dispositivo, utilizando a API kvm, e por páginas mapeadas na memória. A API kvm é um conjunto de chamadas de sistema ioctl, que são usadas pelo QEMU para comunicar com o KVM e controlar vários aspectos das máquinas virtuais. Quando é necessário, por exemplo, a simulação de entrada e saída de uma porta que o hardware físico não suporta, então o KVM passa o controle e as informações da solicitação para o QEMU, então o dispositivo de E/S é emulado pelo QEMU, por fim o controle é retornado para o KVM.


Figura 3: Exemplo de funcionamento.



Fonte: os Autores(2020);

Requisitos

Para poder utilizar o KVM é preciso que o processador da máquina host suporte virtualização, tanto a Intel quanto a AMD desenvolveram tecnologias de virtualização em seus processadores, sendo o intel VT-x e AMD-V, respectivamente. Para conferir se o processador é compatível com a tecnologia de virtualização é possível verificar o retorno do comando:

grep -E -c "vmx|svm" /proc/cpuinfo

Se o retorno do comando for igual a zero, significa que o processador não é compatível, se for um ou mais, então há compatibilidade. Ainda, é necessário verificar se a virtualização está habilitada, caso contrário deve-se habilitá-la na BIOS.

Instalação

Para realizar a instalação pode-se utilizar o seguinte comando:

sudo apt-get install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils
Após a instalação é necessário atribuir o seu usuário aos grupos kvm e libvirt, usando os seguintes comandos:

sudo usermod -aG libvirt $USER

sudo usermod -aG kvm $USER

Para facilitar o gerenciamento das máquinas virtuais recomenda-se utilizar o aplicativo virt-manager, é uma interface de usuário feita para gerenciar máquinas virtuais por meio da biblioteca libvirt.


Figura 4: Interface Gráfica: Virtual Machine Manager.



Fonte: Reprodução (disponivel em: https://www.virt-manager.org/wp-content/uploads/2014/01/manager.png ).

Exemplo - Criando Máquinas Virtuais
(Este texto é baseado no tutorial escrito por Fabio Silva - Kvm no Linux e pandemia, e no tuturial da RedHat - CREATING GUESTS WITH VIRT-MANAGER)

Primeiramente é necessário fazer o download da imagem do Sistema Operacional que se deseja virtualizar (em formato .ISO), elas podem ser encontradas nos sites das desenvolvedoras.

Com a máquina hóspede contendo os pacotes necessários para utilizar o KVM, bem como a interface gráfica - Virtual Machine Manager (virt-manager) e a imagem do Sistema Operacional desejado, é possível partir para a criação de máquinas virtuais.

Para tal é necessário abrir o aplicativo da interface gráfica (Virtual Machine Manager - virt-manager ), o aplicativo pode ser localizado buscando pelo nome na barra de pesquisas.
Com o aplicativo aberto, no canto superior esquerdo clique em File → New Virtual Machine;


Figura 5: Criando Máquinas Virtuais através do virt-manager.



Fonte: Reprodução (disponivel em: https://fabiosilva.com.br/2020/07/05/kvm-no-linux-e-pandemia/amp/ ).

Uma nova janela aparecerá. Marque a opção Local install media (ISO image or CDROM).

  1. Forneça o caminho do diretório onde a imagem ISO do SO foi baixada.
  2. Na próxima tela, escolha as configurações de memória e CPU da Máquina Virtual.
  3. Em seguida, configure o tamanho do armazenamento de disco para a máquina virtual, lembre-se que não pode ultrapassar o tamanho suportado pela máquina física.
  4. Nomear a máquina virtual;

  5. Executar a instalação do sistema escolhido. Com a máquina virtual já criada é possível acessá-la a partir do aplicativo virtual machine manager, usando ssh ou a interface do aplicativo.

Abaixo temos um exemplo de uma máquina virtual do sistema operacional Debian 10 sendo emulada através de KVM, o mesmo pode ser feito para diversos outros Sistemas Operacionais.


Figura 10: Máquina Virtual através do KVM.



Fonte: Reprodução (disponivel em: https://fabiosilva.com.br/2020/07/05/kvm-no-linux-e-pandemia/amp/ ).

Referências