Ubuntu no WSL 2 vs Linux nativo: o que se perde em desempenho na prática?

Escrito por
Emanuel Negromonte
Emanuel Negromonte é Jornalista, Mestre em Tecnologia da Informação e atualmente cursa a segunda graduação em Engenharia de Software. Com 14 anos de experiência escrevendo sobre...

Teste prático de desempenho e gargalos!

Com a adoção massiva do Windows Subsystem for Linux em ambientes corporativos, uma dúvida técnica fundamental paira sobre as equipes de engenharia: a conveniência de rodar o Ubuntu integrado ao Windows cobra qual preço em performance? A resposta deixou de ser uma suposição baseada na antiga camada de tradução do WSL 1 para se tornar um debate arquitetônico sobre virtualização moderna.

O SempreUpdate analisou o comportamento do sistema operacional sob estresse de desenvolvimento real. Focamos nos cenários que mais impactam o dia a dia do programador: tempo de compilação, velocidade de I/O de disco e execução de contêineres Docker.

O que está em jogo na arquitetura

Para compreender as diferenças de desempenho, é necessário entender onde o código está sendo executado. Uma instalação nativa (bare-metal) dá ao Kernel Linux acesso direto e irrestrito aos recursos de hardware da máquina: processador, memória RAM, disco NVMe e placa de rede.

o6OvpxWA wsl 2 vs linux nativo desempenho 2
Ubuntu no WSL 2 vs Linux nativo: o que se perde em desempenho na prática? 3

O WSL 2 funciona de maneira diferente. Ele não é um dual-boot, tampouco um emulador. Trata-se de um Kernel Linux real, mantido pela Microsoft, rodando dentro de uma Lightweight Utility VM (uma máquina virtual utilitária leve) gerenciada pelo hipervisor Hyper-V. Essa arquitetura reduz drasticamente o isolamento tradicional das máquinas virtuais, mas ainda impõe camadas de virtualização.

Processamento e compilação: quase um empate técnico

Quando o assunto é força bruta de processador, a perda do WSL 2 em relação ao Linux nativo é estatisticamente irrelevante para a esmagadora maioria dos projetos.

Processos de compilação pesada, como a construção de binários em Rust ou C++, ou a transpilação de grandes repositórios Node.js e TypeScript, são operações “CPU bound” (limitadas pela capacidade do processador). Como o hipervisor da Microsoft repassa as instruções da CPU com baixíssima latência (overhead virtual inferior a 5%), o tempo de compilação no WSL 2 fica quase colado ao de uma instalação nativa em um hardware idêntico.

Na prática, um projeto que leva dez minutos para compilar no Ubuntu bare-metal pode demorar cerca de dez minutos e trinta segundos no WSL 2. Para o desenvolvimento web diário, essa diferença é imperceptível.

O gargalo do I/O de disco e a armadilha do sistema de arquivos

Onde o WSL 2 perde feio para o Linux nativo é na transferência de dados através da fronteira dos sistemas operacionais. E esse é o erro mais comum cometido por desenvolvedores novatos na plataforma.

Dentro do ambiente virtualizado, o Ubuntu utiliza um disco virtual no formato ext4.vhdx. A velocidade de leitura e escrita (I/O) dentro desse sistema de arquivos nativo é excelente, operando com desempenho muito próximo ao do disco físico.

O problema ocorre quando o desenvolvedor clona um repositório git no disco do Windows (por exemplo, em C:\Users\Desenvolvedor\Projeto) e tenta rodar ferramentas Linux como npm install ou compilar o código acessando esse diretório via /mnt/c/.

Para fazer essa ponte entre o sistema de arquivos NTFS do Windows e o Kernel Linux do WSL 2, a Microsoft utiliza o protocolo de rede 9P. Essa tradução em tempo real causa um gargalo de I/O massivo. Operações com milhares de pequenos arquivos, típicas de pastas node_modules ou compilações de pacotes, podem demorar até dez vezes mais do que no Ubuntu nativo. A regra de ouro atual é obrigatória: o código precisa morar dentro do sistema de arquivos do Linux.

Consumo de memória RAM: o vilão silencioso

O Linux nativo gerencia a memória física de forma inteligente, utilizando o cache de página para acelerar leituras de disco e liberando espaço instantaneamente quando uma aplicação precisa.

No WSL 2, a alocação de memória é dinâmica, mas a devolução dessa memória ao Windows historicamente foi problemática. O Kernel Linux na máquina virtual usa a memória do host para cache de arquivos. Se você compilar um projeto grande, o processo do sistema Vmmem no Windows pode facilmente devorar 16 GB ou 32 GB de RAM e não devolver tudo rapidamente após o término do processo.

Embora atualizações recentes da Microsoft tenham implementado mecanismos de “auto-reclaim” para liberar a memória cache com mais eficiência, administradores de sistemas frequentemente precisam recorrer à criação de um arquivo .wslconfig manual para limitar rigidamente o teto de RAM que o hipervisor pode sequestrar. No bare-metal, esse microgerenciamento não é necessário.

Docker e rede: a distância para o bare-metal

No Ubuntu nativo, os contêineres Docker rodam de forma fluida e direta sobre os cgroups e namespaces do próprio Kernel Linux, sem perda de desempenho computacional ou de rede.

No Windows, utilizando o backend do WSL 2 (geralmente orquestrado pelo Docker Desktop), os contêineres rodam dentro da máquina virtual. O desempenho de processamento interno do contêiner é ótimo, mas há limitações de rede importantes. A comunicação de rede entre o host (Windows) e o contêiner passa por uma interface virtualizada.

Além disso, mapear volumes do Windows para dentro de um contêiner Docker rodando no WSL (os chamados bind mounts cruzados) sofre do mesmo atraso crônico de I/O de disco mencionado anteriormente devido ao protocolo 9P.

Veredito: o bare-metal ainda é obrigatório?

A resposta depende estritamente do perfil do projeto. Para cerca de 90% dos engenheiros de software, desenvolvedores web, programadores de infraestrutura em nuvem e estudantes, o bare-metal deixou de ser uma exigência técnica. A perda de desempenho do WSL 2 é mínima se o usuário mantiver os arquivos do projeto dentro do sistema de arquivos virtual do Linux.

No entanto, a instalação nativa do Ubuntu permanece insubstituível em três cenários de alta demanda:

  1. Treinamento de Inteligência Artificial e Machine Learning pesado: Onde o acesso direto e otimizado às GPUs e o carregamento massivo de datasets de discos físicos precisam ocorrer sem a barreira de um hipervisor.
  2. Desenvolvimento de rede de baixa latência e kernel: Quando é necessário manipular interfaces físicas, testar drivers ou roteamento em nível de hardware.
  3. Projetos monolíticos colossais: Onde a perda acumulada de 3% a 5% em compilações repetitivas ao longo de meses se traduz em horas perdidas, justificando um ambiente dedicado.

O WSL 2 é uma ponte de engenharia impressionante, mas a física e as regras de virtualização continuam as mesmas: toda camada de abstração tem seu preço operacional.

Compartilhe este artigo
Emanuel Negromonte é Jornalista, Mestre em Tecnologia da Informação e atualmente cursa a segunda graduação em Engenharia de Software. Com 14 anos de experiência escrevendo sobre GNU/Linux, Software Livre e Código Aberto, dedica-se a descomplicar o universo tecnológico para entusiastas e profissionais. Seu foco é em notícias, tutoriais e análises aprofundadas, promovendo o conhecimento e a liberdade digital no Brasil.