8 puntos por xguru 2020-11-29 | 1 comentarios | Compartir por WhatsApp
  • Rosetta es un proceso de traducción que permite ejecutar apps hechas con instrucciones x86_64 en Apple Silicon.

  • Para el usuario, Rosetta no es visible. Cuando un ejecutable solo contiene instrucciones de Intel, macOS ejecuta Rosetta automáticamente y comienza la traducción.

  • Cuando termina la traducción, el sistema ejecuta el binario traducido en lugar del original. Como este tiempo de traducción ocurre durante el arranque, la ejecución o el funcionamiento de la app puede ser más lento.

  • El sistema prefiere ejecutar instrucciones arm64 de la app. Cuando un binario incluye tanto arm64 como x86_64, el usuario puede forzar que se ejecute con Rosetta. Por ejemplo, cuando cierto plugin no es compatible con arm64.

  • El sistema evita mezclar código arm64 y x86_64 dentro del mismo proceso. Rosetta se aplica de forma integral, incluidos los módulos de código cargados dinámicamente.

Cosas que no se pueden traducir

  • Traduce apps que incluyen compiladores JIT, pero no traduce lo siguiente:

→ extensiones del kernel

→ máquinas virtuales que virtualizan la plataforma de hardware x86_64

  • Rosetta traduce todas las instrucciones x86_64, pero no es compatible con funciones modernas o características del procesador como AVX, AVX2 y AVX512.

→ Si ese tipo de funciones existe en el código, deben invocarse solo después de verificar si realmente están disponibles con la función sysctlbyname, entre otras.

  • Para comprobar si se está ejecutando con un binario traducido por Rosetta, se puede verificar pasando el flag sysctl.proc_translated a la función sysctlbyname.

1 comentarios

 
xguru 2020-11-29

Es documentación oficial y está bien organizada, así que la traduzco brevemente y la dejo aquí.

Lo importante es que Rosetta no es una emulación, sino una "traducción".