8 คะแนน โดย xguru 2020-11-29 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
xguru 2020-11-29

เป็นเอกสารทางการและสรุปได้ดี เลยแปลแบบสั้น ๆ แล้วนำมาลงไว้

สิ่งสำคัญคือ Rosetta ไม่ใช่ Emulation แต่เป็น "Translation"