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.