A virtualização é um recurso amplamente utilizado na cloud computing para criar sistemas computacionais virtuais a partir de um dispositivo físico. Apesar dos vários benefícios da virtualização, engenheiros de todo o mundo ainda buscam melhorar a sua performance e eficiência. Dessa forma, a equipe de desenvolvedores da AWS desenvolveu o Firecracker, um virtualizador capaz de criar Virtual Machines (VMs) leves e com baixo tempo de inicialização.
Antecedentes: uma abordagem de virtualização ineficiente
Atualmente, o modelo serverless é uma das opções mais adotadas no mundo todo para a implementação de aplicações, pois permite que as empresas otimizem os tempos de trabalho de suas equipes técnicas, abstraindo todas as tarefas relacionadas à gestão de software e hardware para que elas possam se concentrar principalmente nas estratégias comerciais.
Por esse motivo, a Amazon criou o AWS Lambda e o AWS Fargate, plataformas de computação serverless que permitem aos desenvolvedores executar código sem ter que pensar na configuração e manutenção dos servidores (back-end). Assim, as soluções serverless da AWS e de outros fornecedores devem ter a capacidade de dimensionar recursos computacionais, executar código o mais próximo possível do usuário final (o que reduz a latência), realizar implantações e atualizações rápidas, além de garantir a segurança da informação dos usuários.
A AWS utiliza a virtualização no Lambda e no Fargate para isolar contas de clientes diferentes e usa containers do Linux para isolar funções. Em outras palavras, a AWS utiliza uma VM para isolar e executar várias funções de um único cliente. O problema dessa abordagem é que o uso de containers não oferece a segurança necessária, além do fato de que a virtualização tradicional apresenta dificuldades de performance como o empacotamento ineficiente de funções em VMs de tamanho fixo, longos tempos de inicialização ou boot times (geralmente segundos), alto consumo de memória e de CPU (o que limita a densidade de criação de VM), assim como problemas relacionados ao hipervisor.
Com isso em mente, os engenheiros da AWS procuraram formas de otimizar seu modelo de virtualização atual através da criação de um novo modelo de implantação de VM, mas que incluísse os seguintes recursos:
- Isolar e executar funções no mesmo hardware, além de fornecer uma segurança confiável contra uma ampla variedade de ataques.
- Executar altas densidades de cargas de trabalho com pouca sobrecarga.
- Executar funções da mesma forma que aquelas que são executadas de forma nativa.
- Ter compatibilidade com uma ampla gama de softwares existentes em sua plataforma.
- Crear y eliminar funciones de forma sencilla.
- Criar e excluir funções de forma simples.
- Alocar recursos computacionais (CPU, memória) de forma eficiente e inteligente.
AWS Firecracker
Para criar uma tecnologia de virtualização mais eficiente, a AWS analisou tanto as soluções tradicionais quanto suas versões que ainda estão em desenvolvimento. Em geral, os engenheiros consideraram que as tecnologias baseadas em containers fornecem um isolamento operacional eficiente, mas não um nível de segurança confiável. Enquanto que o uso de recursos de linguagem como Java Virtual Machine (JVM) ou V8 não se encaixam nas técnicas de isolamento usadas no Lambda e Fargate.
A equipe da AWS manteve a ideia de utilizar a virtualização e desenvolveu o Firecracker, uma solução de código aberto mais eficiente para gerenciar serviços baseados em funções e containers de vários usuários (multi-tenant). O Firecracker utiliza a infraestrutura de virtualização de máquina virtual baseada no kernel Linux (KVM) para substituir o tradicional Virtual Machine Monitor (VMM) e fornecer VMs leves (também chamadas de micro VMs).
![](https://br.pynomial.com/wp-content/uploads/2022/11/FirecrackerFig1.png)
A estratégia foi criar um VMM com os componentes integrados do Linux e excluir funcionalidades não essenciais para fornecer a cada OS guest os recursos, performance e design corretos, além de poder aproveitar a velocidade e a eficiência dos containers.
O Firecracker é escrito em Rust e possui uma API REST para a configuração, gestão, iniciação e detenção de micro VMs, além de fornecer um serviço de metadados para a troca de dados entre o serviço guest e o host.
De acordo com o artigo publicado pela equipe da AWS, “as APIs REST existem para especificar o kernel guest e argumentos de inicialização, a configuração da rede, os dispositivo de bloco, as máquinas guest, assim como do cpuid, registro, métricas, limitadores de taxa e serviço de metadados”.
Performance do Firecracker
Para avaliar a eficiência do novo virtualizador, os engenheiros da AWS realizaram diversos testes usando métricas e comparando o Firecracker com outros VMMs, como Cloud Hypervisor e QEMU.
Por exemplo, em relação à métrica de tempo de inicialização, definida como “o tempo entre a criação de um processo do VMM e o instante em que o kernel guest cria seu processo de init”, o Firecracker atingiu tempos de até 125 ms e 150 ms para iniciar micro VMs em série e paralelo, respectivamente. Quando o Firecracker foi comparado a outros VMMs, este obteve tempos semelhantes ao Cloud Hypervisor e inferiores ao QEMU (até 300ms).
Para a sobrecarga de memória, a métrica foi “a diferença entre a memória usada pelo processo do VMM e o tamanho do MicroVM configurado”. Sob essa métrica, o Firecracker mostrou uma sobrecarga de 3 MB por microVM, enquanto o Cloud Hypervisor e o QEMU tiveram uma sobrecarga de 13 MB e 131 MB por VM, respectivamente.
![](https://br.pynomial.com/wp-content/uploads/2022/11/FirecrackerFig2.png)
Por fim, os engenheiros da AWS testaram o desempenho de leitura e escritura (IO performance) por meio do Fio, uma ferramenta de benchmarking de código aberto para testar redes e dispositivos de armazenamento. Para este teste, “o Fio foi configurado para executar leitura e escritura aleatória diretamente no dispositivo de bloco, usando entrada e saída direta via libaio, enquanto os SSDs NVMe locais suportavam todos os testes no servidor m5d.metal.” Os resultados mostraram algumas limitações do Firecracker em termos de largura de banda (bandwidth). Ainda assim, para latência, a figura abaixo mostra que o Firecracker tem uma sobrecarga significativamente maior para blocos grandes, mas funciona bem para blocos pequenos.
![](https://br.pynomial.com/wp-content/uploads/2022/11/FirecrackerFig3.png)
Resumo
O Firecracker é um VMM modificado e otimizado para a implementação de máquinas virtuais leves com rapidez e segurança. Seu objetivo principal é melhorar a experiência do desenvolvedor em produtos da AWS, como Lambda e Fargate, onde atualmente oferece suporte a milhões de cargas de trabalho de produção e bilhões de solicitações por mês.
O Firecracker é um projeto de trabalho que convida os desenvolvedores a realizar contribuições. O Firecracker tem licença de Apache, o que permite a você gerenciar livremente suas contribuições nos termos que você escolher.