8 điểm bởi xguru 2020-11-29 | 1 bình luận | Chia sẻ qua WhatsApp
  • Rosetta là một tiến trình dịch cho phép chạy các ứng dụng được tạo bằng lệnh x86_64 trên Apple Silicon

  • Với người dùng, Rosetta là thứ không nhìn thấy được. Khi tệp thực thi chỉ chứa các lệnh Intel, macOS sẽ tự động khởi chạy Rosetta và bắt đầu dịch

  • Khi việc dịch hoàn tất, hệ thống sẽ chạy tệp thực thi đã được dịch thay cho bản gốc. Thời gian dịch này nằm trong thời gian khởi chạy nên việc mở/chạy ứng dụng có thể chậm hơn

  • Hệ thống ưu tiên chạy lệnh arm64 của ứng dụng. Khi một binary có cả arm64 và x86_64, người dùng có thể chỉ định buộc chạy bằng Rosetta. Ví dụ khi một plugin cụ thể chưa hỗ trợ arm64

  • Hệ thống ngăn việc trộn mã arm64 và x86_64 trong cùng một tiến trình. Rosetta được áp dụng một cách nhất quán, bao gồm cả các mô-đun mã được nạp động.

Những gì không thể được dịch

  • Rosetta dịch cả các ứng dụng có chứa trình biên dịch JIT, nhưng không dịch các mục dưới đây

→ extension kernel

→ máy ảo dùng để ảo hóa nền tảng máy tính x86_64

  • Rosetta dịch mọi lệnh x86_64, nhưng không hỗ trợ các tính năng mới hoặc tính năng phụ thuộc bộ xử lý như AVX, AVX2, AVX512.

→ Nếu trong mã có các hàm này, cần kiểm tra xem thực sự có khả dụng hay không bằng hàm sysctlbyname rồi mới gọi.

  • Để kiểm tra xem có đang chạy bằng binary được Rosetta dịch hay không, có thể truyền cờ sysctl.proc_translated vào hàm sysctlbyname để xác nhận

1 bình luận

 
xguru 2020-11-29

Đây là tài liệu chính thức và được sắp xếp rất tốt, nên tôi dịch ngắn gọn rồi đăng lại.

Điểm quan trọng là Rosetta không phải là Emulation mà là "Translation".