AppleのRosetta翻訳環境について
(developer.apple.com)-
Rosetta は、Appleシリコン上で x86_64 命令で作られたアプリを実行できるようにする翻訳プロセス
-
ユーザーからは Rosetta は見えない。実行ファイルが Intel 命令のみを含んでいる場合、macOS が自動的に Rosetta を起動して翻訳を開始する
-
翻訳が終わると、システムはオリジナルの代わりに翻訳済みの実行ファイルを実行する。この翻訳には実行時の時間がかかるため、アプリの起動や動作が遅くなることがある
-
システムはアプリの arm64 命令の実行を優先する。バイナリが arm64 と x86_64 の両方を持っている場合、ユーザーは強制的に Rosetta で実行するよう指定できる。たとえば特定のプラグインが arm64 をサポートしていない場合など
-
システムは同じプロセス内で arm64 と x86_64 のコードを混在させることを防ぐ。Rosetta は、動的ロードされるコードモジュールを含めて全体に適用される
翻訳できないもの
- JIT コンパイラを含むアプリは翻訳されるが、以下のものは翻訳されない
→ カーネル拡張
→ x86_64 コンピュータプラットフォームを仮想化する Virtual Machine
- Rosetta はすべての x86_64 命令を翻訳するが、AVX、AVX2、AVX512 のような新しい機能やプロセッサ機能はサポートしない
→ こうした関数がコード内にある場合は、sysctlbyname 関数などで実際に利用可能か確認してから呼び出す必要がある
- Rosetta によって翻訳されたバイナリとして実行されているかを確認するには、
sysctlbyname関数にsysctl.proc_translatedフラグを渡して確認できる
1件のコメント
公式ドキュメントですが、よく整理されているので簡単に翻訳して載せておきます。
Rosetta はエミュレーションではなく「Translation」であることが重要です。