Pular para o conteúdo

benchmarks

Por que sua construção QEMU arm64 é 40× mais lenta

Uma análise medida do braço emulado versus nativo64 Docker é construído em cinco cargas de trabalho reais e por que a penalidade varia tanto.

{autor} · {papel} · {data} · {minutos} {minutosLabel}

Adicionar linux/arm64 a uma compilação Docker leva uma linha. A consequência às vezes é uma desaceleração de 3x e às vezes de 40x, e a diferença confunde as pessoas. Não é aleatório.

O mecanismo

QEMU na emulação de modo de usuário traduz instruções arm64 em instruções x64 em tempo de execução. A tradução fixou a sobrecarga por instrução. Portanto, a penalidade varia de acordo com quantas instruções sua compilação executa - não com o tempo que leva e nem com o tamanho da imagem.

Uma compilação que copia arquivos e executa o apt-get executa relativamente poucas instruções. Uma compilação que executa um compilador executa um número enorme.

Medido

O padrão é limpo: quanto mais sua compilação é compilada, pior fica a emulação. Se o seu Dockerfile invoca um compilador, o QEMU não é uma estratégia viável.

A correção

Construa cada arquitetura em seu próprio hardware e mescle os resumos em uma lista de manifestos. É mais YAML do que uma linha de plataforma única e é a diferença entre três minutos e duas horas.

Seu próximo build pode ser duas vezes mais rápido, pela metade do preço

Comece grátis. Sair é a mesma linha, e publicamos esse diff também.