เกี่ยวกับสภาพแวดล้อมการแปล Rosetta ของ Apple
(developer.apple.com)-
Rosetta เป็นกระบวนการแปลที่ช่วยให้สามารถรันแอปที่สร้างด้วยชุดคำสั่ง x86_64 บน Apple Silicon ได้
-
ผู้ใช้จะมองไม่เห็น Rosetta เมื่อไฟล์ปฏิบัติการมีเฉพาะคำสั่งของ Intel เท่านั้น macOS จะเรียกใช้ Rosetta โดยอัตโนมัติเพื่อเริ่มการแปล
-
เมื่อการแปลเสร็จสิ้น ระบบจะรันไฟล์ปฏิบัติการที่แปลแล้วแทนตัวต้นฉบับ เวลาที่ใช้ในการแปลจะถูกรวมอยู่ในช่วงเปิดแอป จึงอาจทำให้การเปิด/การทำงานของแอปช้าลงได้
-
ระบบจะให้ความสำคัญกับการรันคำสั่ง arm64 ของแอปก่อน เมื่อไบนารีมีทั้ง arm64 และ x86_64 ผู้ใช้สามารถกำหนดให้บังคับรันผ่าน Rosetta ได้ เช่น ในกรณีที่ปลั๊กอินบางตัวไม่รองรับ arm64
-
ระบบจะป้องกันไม่ให้มีการผสมโค้ด arm64 และ x86_64 ภายในโปรเซสเดียวกัน Rosetta จะถูกนำไปใช้กับทั้งระบบรวมถึงโมดูลโค้ดที่โหลดแบบไดนามิกด้วย
สิ่งที่ไม่สามารถแปลได้
- แม้จะสามารถแปลแอปที่มีคอมไพเลอร์ JIT ได้ทั้งหมด แต่จะไม่แปลสิ่งต่อไปนี้
→ ส่วนขยายเคอร์เนล
→ เครื่องเสมือนที่ทำ virtualization ของแพลตฟอร์มคอมพิวเตอร์ x86_64
- Rosetta แปลคำสั่ง x86_64 ได้ทั้งหมด แต่ไม่รองรับคุณสมบัติโปรเซสเซอร์หรือชุดคำสั่งรุ่นใหม่ เช่น AVX, AVX2, AVX512
→ หากมีฟังก์ชันเหล่านี้อยู่ในโค้ด ควรตรวจสอบก่อนว่าใช้งานได้จริงหรือไม่ด้วยฟังก์ชันอย่าง sysctlbyname แล้วจึงค่อยเรียกใช้
- หากต้องการตรวจสอบว่ากำลังรันด้วยไบนารีที่ถูกแปลโดย Rosetta หรือไม่ สามารถตรวจสอบได้โดยส่งแฟล็ก
sysctl.proc_translatedให้กับฟังก์ชันsysctlbyname
1 ความคิดเห็น
เป็นเอกสารทางการและสรุปได้ดี เลยแปลแบบสั้น ๆ แล้วนำมาลงไว้
สิ่งสำคัญคือ Rosetta ไม่ใช่ Emulation แต่เป็น "Translation"