# OpenVZ

OpenVZ (Open Virtuozzo) é uma tecnologia de virtualização de nível de sistema operacional baseada no kernel e no sistema operacional do Linux. Ele permite que um servidor físico execute múltiplas instâncias de sistema operacional, conhecidas como recipientes (containers), sevidores virtuais privados (SVP - ou em inglês virtual private servers) ou ambientes virtuais (AV - ou em inglês virtual environments - VEs). É similar ao FreeBSD jail e ao Solaris Containers..

## OpenVZ comparado com outras tecnologias de virtualização

Quando comparado a máquinas virtuais tais como VMware e paravirtualização tais como Xen, o OpenVZ é limitado: exige que tanto o host quanto o SO convidado sejam Linux (podendo conviver diferentes distribuições Linux em diferentes containers). Contudo, OpenVZ possui uma vantagem em relação ao desempenho: de acordo com seu site web, há apenas uma perda de desempenho de 1 a 3% para o OpenVZ comparado com a utilização de um servidor standalone. Uma avaliação independente de desempenho confirma isto. Outra mostra mais perdas significantes dependendo da métrica utilizada. O OpenVZ é uma base do Parallels Virtuozzo Containers, um software proprietário fornecido pela Parallels. O OpenVZ é licenciado sob a versão 2 da GPL. O projeto OpenVZ é assistido e patrocinado pela Parallels (o suporte comercial ao usuário não é disponibilizado pela Parallels). O OpenVZ é dividido em um núcleo padrão e ferramentas do nível de usuário.

## Kernel

O kernel do OpenVZ é um kernel do Linux modificado para adicionar suporte aos recipientes OpenVZ. O kernel modificado fornece virtualização, isolamento, gerenciamento de recurso e ponto de inspeção. A partir do vzctl 4.0, o OpenVZ pode trabalhar com Linux de kernels 3.x sem atualização, com um conjunto reduzido de funcionalidades.

### Virtualização e isolamento

Cada recipiente é uma entidade separada e comporta-se, em grande parte, como um servidor físico. Cada um tem seus próprios:

#### Arquivos

    Bibliotecas do sistema, aplicações, /proc e /sys virtualizados, bloqueios virtualizados, etc.

#### Usuários e grupos

    Cada recipiente possui seu próprio usuário raiz, bem como outros usuários e grupos.

#### Árvore de processos

    Um recipiente enxerga apenas seus próprios processos (começando do init). PIDs são virtualizados, desta forma o PID init é 1 como deveria ser.

#### Rede

    Dispositivo de rede virtual, que permite que um recipiente tenha seus próprios endereços IP, bem como um conjunto de netfilter (iptables) e regras de roteamento.

#### Dispositivos

    Se necessários, qualquer recipiente pode ser concedido acesso a dispositivos reais como interfaces de rede, portas seriais, partições de disco, etc.

#### Objetos IPC

    Memória compartilhada, semáforos, mensagens.

### Gerenciamento de recursos

O gerenciamento de recursos do OpenVZ consiste de quatro componentes: quota de disco de dois níveis, escalonador razoável de CPU, escalonador de E/S de disco e beancounters de usuários. Estes recursos podem ser alterados durante o tempo de execução de recipiente, eliminando a necessidades de reinicialização.

#### Quota de disco de dois níveis

Cada recipiente pode ter suas próprias quotas de disco, medidas em termos de blocos de disco e inodes (cerca de número de arquivos). Dentro do recipiente, é possível usar ferramentas padrões para definir quotas de disco UNIX por usuário e por grupo.

#### Escalonador de UCP

O escalonador de UCP no OpenVZ é uma implementação de dois níveis de estratégia de escalonamento.