8 pontos por xguru 2020-11-29 | 1 comentários | Compartilhar no WhatsApp
  • O Rosetta é um processo de tradução que permite executar, no Apple Silicon, apps compostos por instruções x86_64.

  • Para o usuário, o Rosetta é invisível. Quando um executável contém apenas instruções Intel, o macOS inicia automaticamente o Rosetta e começa a tradução.

  • Quando a tradução termina, o sistema executa o binário traduzido no lugar do original. Como esse tempo de tradução faz parte da execução, a inicialização/operação do app pode ficar mais lenta.

  • O sistema prefere executar instruções arm64 do app. Quando um binário contém tanto arm64 quanto x86_64, o usuário pode forçar a execução via Rosetta. Por exemplo, quando um plugin específico não oferece suporte a arm64.

  • O sistema impede a mistura de código arm64 e x86_64 no mesmo processo. O Rosetta é aplicado de forma abrangente, incluindo módulos de código carregados dinamicamente.

O que não pode ser traduzido

  • O sistema traduz até mesmo apps que incluem compiladores JIT, mas não traduz os itens abaixo.

→ Extensões de kernel

→ Máquinas virtuais que virtualizam a plataforma computacional x86_64

  • O Rosetta traduz todas as instruções x86_64, mas não oferece suporte a recursos mais recentes ou específicos do processador, como AVX, AVX2 e AVX512.

→ Se essas funções estiverem no código, elas devem ser chamadas apenas após verificar se realmente estão disponíveis, por meio da função sysctlbyname ou equivalente.

  • Para verificar se o binário está sendo executado após tradução pelo Rosetta, é possível usar a flag sysctl.proc_translated na função sysctlbyname.

1 comentários

 
xguru 2020-11-29

É um documento oficial, mas está tão bem organizado que resolvi fazer uma tradução rápida e postar aqui.

É importante que o Rosetta seja uma "tradução", e não uma emulação.