รีเซต

ระบบแปลโค้ดแอป x86 มาทำงานบน Windows on ARM อย่างไร ?

ระบบแปลโค้ดแอป x86 มาทำงานบน Windows on ARM อย่างไร ?
แบไต๋
8 พฤศจิกายน 2566 ( 05:52 )
110
ระบบแปลโค้ดแอป x86 มาทำงานบน Windows on ARM อย่างไร ?

เป็นอันที่ทราบกันดี Windows นั้นผูกกับชิปตระกูล x86 มาตั้งแต่ยุคแรก ต่อมา AMD ออก x86-64 และ Intel ก็ใช้ด้วยก็ยังยึดตามนี้มาตลอด

ปัจจุบันทั้ง Windows 10 และ Windows 11 สนับสนุนชิป ARM64 อย่างสมบูรณ์ Windows ทำงานได้ดีบน CPU เหล่านี้ แต่แอปส่วนใหญ่ยังไม่ได้เปิดตัวเวอร์ชันที่เข้ากันได้กับ ARM แม้ว่า Windows จะสามารถทำงานบนชิป ARM ได้ แต่ก็ยังถือว่ามีจำนวนโปรแกรมไม่มาก

www.extremetech.com

แต่ Windows on ARM ปัจจุบันรองรับการรันแอป x86-64 จากสถาปัตยกรรมของ AMD64/Intel64 เดิมบนชิป ARM (เดิมที รองรับเฉพาะ x86 ที่เป็น 32 บิตเท่านั้น) เนื่องจากทาง Microsoft ได้ใส่ระบบแปลภาษาแอป (ลักษณะเดียวกับ Rosetta 2 ที่อยู่บนเครื่อง Mac ที่ใช้ชิปตระกูล ARM ภายใต้ชื่อ Apple Silicon) จาก x86-64 มาเป็น ARM64 เพื่อรันแอปแม้แอปนั้นไม่ได้เขียนขึ้นมาเพื่อ ARM โดยตรง

ดังนั้นแนวคิดในการแปลโค้ดแอปที่สร้างขึ้นสำหรับโปรเซสเซอร์ประเภทหนึ่งเพื่อให้สามารถรันบนโปรเซสเซอร์อีกประเภทหนึ่งได้ไม่ใช่เรื่องใหม่ เพราะ Apple ก็เคยทำลักษณะนี้มาในยุคที่ให้ชิป x86 รันแอปเก่าของชิป PowerPC ได้ และมีอีกหลายระบบปฏิบัติการที่ทำในลักษณะนี้

หลักการทำงานและประสิทธิภาพ

หลักการแปลภาษาโค้ดแอป x86 และ x86-64 มาเป็น ARM64 เมื่อคุณเรียกใช้แอป x86, x86-64 บน Windows on ARM จะนำบล็อกโค้ดของแอป x86, x86-64 มาคอมไพล์สด ๆ (Real time) เมื่อทำงานบนชิป Arm (ซึ่งการทำงานมีความคล้าย Emulator จำลองการเล่นเกมเครื่องต่าง ๆ มาเล่นบน PC) และ Windows จะต้องแคชโค้ดทั้งหมดที่แปล ซึ่งหมายความว่าไม่จำเป็นต้องแปลซ้ำแล้วซ้ำอีกในส่วนที่ใช้บ่อย

แต่ก็ยังมีปัญหาที่ตามมา ประสิทธิภาพจะแย่ลงในแอปที่ใช้งานแบบนี้เมื่อเปรียบเทียบกับแอปที่มีโค้ดที่ออกแบบมาสำหรับ ARM64 โดยตรง และแต่ละแอปประสิทธิภาพลดลงไม่เท่ากัน ทำให้ยากที่จะบอกว่าสูญเสียประสิทธิภาพไปมากเพียงใดจากการรันโค้ดที่ถูกแปลบน Windows และข้อมูลการทดสอบมีน้อยมาก แต่ถ้าเปรียบเทียบ Rosetta 2 ของ Apple (ซึ่งแปลแอป x86-64 เป็น ARM64 เช่นกันบนฝั่ง Mac) จะสูญเสียไปประมาณ 20% ซึ่งทำได้ดีกว่าของ Windows แต่โดยปกติแล้วการจำลองและแปลภาษาโค้ดแอปจะส่งผลให้ประสิทธิภาพลดลงไม่ว่าจะเกิดอะไรขึ้นก็ตาม

เหตุใดแอป x86 จึงไม่สามารถทำงานได้บน Arm หากไม่มีการจำลอง

แอปที่เขียนขึ้นมาเพื่อสถาปัตยกรรมต่าง ๆ เช่น x86/x86-64, Arm และ CPU ประเภทอื่น ๆ ขึ้นอยู่กับความแตกต่างในสถาปัตยกรรม ในที่นี้กำลังพูดถึงสถาปัตยกรรมชุดคำสั่ง (ISA) เป็นการออกแบบขั้นพื้นฐานที่สุดของโปรเซสเซอร์หรือชิป CPU และเป็นตัวกำหนดว่าบางสิ่งที่เรียบง่าย เช่น การคูณ หรือสิ่งที่ซับซ้อน และการสื่อสารไปยัง Hardware เมื่อเขียนแอปด้วยโค้ดภาษาเดียวกัน ก็จะทำงานได้ทันที เปรียบเสมือนคนพูดภาษาเดียวกันทำงานด้วยกัน เมื่อโปรแกรมมีโค้ดภาษาคนละตัวกับชิป ก็จะเปรียบเสมือนคนคุยคนละภาษากันแล้วไม่เข้าใจ

การเปลี่ยนสถาปัตยกรรมชุดคำสั่ง (ISA) ส่งผลต่อการทำงาน ทำให้ไม่สามารถทำงานได้เลยหากชุดโค้ดภาษาและชิปไม่ตรงกัน การเปลี่ยน ISA ส่งผลต่อวิธีการทั้งขั้นพื้นฐานที่สื่อสารกับ Hardware รวมถึงค่าที่ CPU ประมวลผลและอ่าน

ชิป ARM ส่วนใหญ่จะใช้สำหรับสมาร์ตโฟน และอุปกรณ์ฝังตัว (Embedded) ต่าง ๆ และในอดีตการทับซ้อนกันระหว่างแอปพีซีและซอฟต์แวร์สมาร์ตโฟนมีน้อยมาก ทำให้แต่และแอปพัฒนาอิงตามสถาปัตยกรรมที่ใช้กันมานานในแต่ละระบบ

Windows พยายามก้าวเข้าสู่ ARM ครั้งแรกในปี 2012 (ก่อน Mac อีกนะ!) เปิดตัว Windows RT ที่มีพื้นฐานมาจาก Windows 8 แต่ก็ถือว่าเป็นความล้มเหลว เนื่องจากว่าไม่มีแอปรองรับสักเท่าไหร่เลย แอปที่เป็น “Killer App” หรือแอปเด่น ๆ ก็มีแค่ Microsoft Office 2013 เท่านั้น

Windows 8 build 9200 (win8_rtm) – BetaWiki

Office 2013 for Windows RT – The Windows RT Review (anandtech.com)

ปัญหาหลักคือต้องใช้เวลาและความเชี่ยวชาญในการเขียนซอฟต์แวร์ใหม่สำหรับ ISA ของ ARM โดยเฉพาะอย่างยิ่งหากนักพัฒนาต้องการทำให้เต็มประสิทธิภาพ นักพัฒนาที่ไม่ได้มีเวลาหรือใส่ใจในการย้ายแอปจาก ISA หนึ่งไปยังอีก ISA (x86 และ x86-64 ไปยัง ARM) อาจส่งผลให้เกิดข้อบกพร่องและจุดบกพร่อง ตัวอย่างที่เห็นได้ชัดคือ Adobe Photoshop ที่ออกเวอร์ชั่น Windows on Arm โดยตรงไม่ต้องแปลงภาษา

Lenovo

แต่ในการทดสอบบน Lenovo ThinkPad X13s ที่ใช้ชิป ARM จาก Qualcomm Snapdragon พบข้อผิดพลาดหลายประการและมีข้อความเตือน OpenGL ไม่ได้รับการสนับสนุน อย่างไรก็ตามปัจจุบันกลุ่มผู้ใช้ Windows on ARM นั้นมีจำนวนน้อยมาก เพราะไม่ใช่การย้ายไปใช้ชิป ARM แบบบังคับ เมื่อเทียบกับ Mac ที่บังคับให้ย้ายมา ARM จึงมีแรงจูงใจนักพัฒนาให้ทำแอปเพื่อรันบน ARM มากกว่าฝั่ง Windows มาก

ดังนั้น เมื่อนักพัฒนาไม่สามารถหรือไม่ทุ่มเททรัพยากรเพื่อสร้างซอฟต์แวร์เนทีฟ Microsoft จึงจำเป็นต้องพัฒนาระบบแปลภาษาแอปเป็น ARM มาไว้ใน Windows 10 on ARM เป็นต้นมา โดยเริ่มแรกรองรับเฉพาะแอป x86 32 บิตเท่านั้น

เหตุใดทำไมระบบแปลภาษาแอปเป็น ARM ช่วงแรก รองรับเฉพาะแอป x86 32 บิต

เมื่อปี 2017 Microsoft ได้เปิดตัวระบบแปลภาษาแอปเฉพาะ x86 32 บิต ณ เวลานั้น แอปประเภท x86 ที่เป็น 32 บิตมีจำนวนมากกว่า ทำให้ Windows on ARM รองรับเฉพาะการแปลภาษาแอป x86 ที่เป็น 32 บิตมารันบน ARM เท่านั้น แต่ในเวลาต่อมา แอปประเภท x86-64 มีจำนวนมากขึ้น ถึงขั้นหลายๆ แอปยุติการพัฒนาเวอร์ชั่น x86 32 บิตไปเลย ส่งผลให้เกิดปัญหาทันทีเมื่อนำมารันบน Windows on ARM ไม่สามารถรันได้

ต่อมา Microsoft ได้พัฒนาฟีเจอร์แปลภาษาแอป x86-64 รันบน ARM แต่ก็ไม่ได้ถูกเปิดมาให้ใช้งานตั้งแต่แรก ต้องสมัครเข้าร่วม Windows Insider ก่อนถึงจะใช้งานได้ โดยเพิ่มเข้ามาใน Build 21277 ในขณะนั้นที่เป็น Windows 10 แต่ปัจจุบันพร้อมใช้งานบน Windows 11 และ Windows 10 รุ่นเสถียรแล้ว

และฟีเจอร์นี้ทำงานได้ดีแค่ไหน

อย่างไรก็ตามเมื่อทดสอบกับอุปกรณ์ชิป ARM สาย Windows โดยตรงอย่าง Surface Pro X กลับทำงานได้ประสิทธิภาพไม่ดีเท่ากับ Windows on ARM ที่รันอยู่ใน Virtual Machine บนเครื่อง Mac ที่ใช้ชิป Apple Silicon ที่เป็น ARM64 จนทำให้คนยังตั้งคำถามกับทาง Microsoft

www.parallels.com

อีกทั้งเมื่อทดลองรันแอป x86-64 หลายตัว รวมถึงเกม ยังมีหลายตัวที่ใช้งานไม่ได้ หรือใช้งานได้ไม่เต็มประสิทธิภาพ บางแอปก็ช้าเกินไป ซึ่งต้องยอมรับว่าทำได้ไม่ดีเท่าการรันแอป x86-64 ของ Mac บน Apple Silicon (ARM64) ซึ่งเครื่องมือ Rosetta 2 มีประสิทธิภาพดีกว่าและรองรับแอปมากกว่า แม้บางแอปยังพบปัญหาช้าอยู่บ้างก็ตาม แต่โดยรวมถือว่าน่าพอใจกว่าของ Windows และเมื่อบวกกับมีแอปที่รองรับ ARM โดยตรงมาให้ใช้มากกว่าบน Windows เพราะซุ้มทำระบบแปลภาษาแอปมานานกว่าแล้วปล่อยออกมาทีเดียวตอมพร้อมมาก ๆ จึงให้ประสิทธิภาพที่ดีกว่าด้วย ทำให้ผู้ใช้ Mac เปลี่ยนผ่านได้อย่างราบรื่น

แต่ชิป ARM ฝั่ง Windows จริง ๆ ถ้าทำเรื่องการแปลภาษาแอปให้ดีก็อาจจะแย่งตลาด x86-64 จาก AMD/Intel ได้ เพราะมีสิ่งที่เหนือกว่า Apple Silicon ตรงที่อย่างเช่น Snapdragon 888 รวมโมเด็ม 5G ไว้ด้วย ซึ่งก็เหมือนกับชิปที่ใช้บนสมาร์ตโฟน จึงมีความได้เปรียบกว่าเรื่องการเชื่อมต่อเครือข่าย เพราะมีเซลล์ลูล่าร์ เพิ่มมาในตัวด้วย

แม้ว่าปัจจุบันมีแอปที่รองรับ Windows on ARM และใช้งานได้ดีมากกว่ายุค Windows RT แล้ว อีกทั้งการแปลแอป x86 และ x86-64 สำหรับ Windows on Arm ก็ยังจำเป็นแม้จะไม่สมบูรณ์แบบ แต่ก็ช่วยให้มีแอปให้รันได้มากขึ้น อย่างน้อยจนกว่า Windows on ARM จะถึงจุดที่นักพัฒนามองว่าคุ้มทุนและคุ้มเวลาที่จะตั้งใจพัฒนาโปรแกรมสำหรับ ARM อย่างจริงจัง เช่นเดียวกับที่ทำบน Mac

ที่มา: How does x86 translation work on Windows on Arm? (xda-developers.com)

ข้อมูลเพิ่มเติมที่นำมาอ้างอิง: Microsoft Adds 64-bit x86 Emulation to Windows on ARM | Extremetech

ยอดนิยมในตอนนี้

แท็กยอดนิยม

ข่าวที่เกี่ยวข้อง