애플 Rosetta Translation 환경에 대해서
(developer.apple.com)- Rosetta 는 애플실리콘에서 x86_64 명령으로 된 앱들을 실행할수 있게 해주는 번역 프로세스
- 사용자에게 Rosetta는 보이지 않음. 실행파일이 인텔 명령어들만 가지고 있을때 macOS가 자동으로 Rosetta를 실행해서 번역을 시작
- 번역이 끝나면 시스템이 오리지널 대신 번역된 실행파일을 실행함. 이 번역시간은 실행이 걸리므로 앱이 실행/동작하는게 느릴 수 있음
- 시스템은 앱의 arm64 명령어 실행을 선호함. 바이너리가 arm64 와 x86_64를 둘다 가지고 있을때 사용자는 강제로 Rosetta 로 실행되도록 지정 가능. 예를 들어 특정 플러그인이 arm64를 지원 안하거나 할때
- 시스템은 같은 프로세스 안에서 arm64 와 x86_64 코드를 섞는 것을 방지함. Rosetta 는 동적로딩 하는 코드 모듈을 포함해서 전체적으로 적용됨.
번역 될수 없는 것
- JIT를 컴파일러를 포함한 앱들을 다 번역하지만 아래 것들은 번역하지 않음
ㅤ→ 커널 확장
ㅤ→ x86_64 컴퓨터플랫폼을 가상화하는 Virtual Machine
- 로제타는 모든 x86_64 명령어를 번역하지만, AVX,AVX2, AVX512 같은 최신 또는 프로세서 기능들은 지원 안함.
ㅤ→ 이런 함수들이 코드에 있다면, sysctlbyname 함수 등으로 실제 가능한지 확인 후에 호출해야함.
- 로제타로 번역된 바이너리로 실행되는지 확인하려면 sysctlbyname 함수에 sysctl.proc_translated 플래그를 줘서 확인 가능
공식문서인데 정리가 잘 되어 있어서 간단히 번역해서 올려둡니다.
Rosetta 는 Emulation 이 아닌 "Translation" 이라는게 중요.