Recientemente อีเมลถูกปล่อยออกมา ผ่านรายการส่งเมลของเคอร์เนล Linux และอีเมลนี้มีวัตถุประสงค์หลัก ลบโค้ดออกจากการนำสถาปัตยกรรมย่อย x32 ไปใช้ (เพื่อไม่ให้สับสนกับ x86 IA-32)
ซึ่งช่วยให้คุณใช้โมเดลการกำหนดแอดเดรสหน่วยความจำ 32 บิต (ไฮบริด x86 และ x86_64) บนระบบ x86 64 บิต
สถาปัตยกรรม x32 คืออะไร?
สิ่งสำคัญคือต้องพูดถึงสถาปัตยกรรมย่อย x32 เป็นไฮบริด x86_64 ABIซึ่งอนุญาตให้ใช้โมเดลการกำหนดแอดเดรสหน่วยความจำ 32 บิตบนระบบ 64 บิต (โปรเซสเซอร์ทำงานในโหมด 64 บิต แต่ใช้ตัวชี้ 32 บิตและการคำนวณทางคณิตศาสตร์)
เอบีไอ X32 ช่วยให้แอปพลิเคชันสามารถใช้ประโยชน์จากสถาปัตยกรรม x86_64 ได้อย่างเต็มที่เช่นการลงทะเบียนเพิ่มเติมและคำแนะนำที่เร็วขึ้น PIC ABI
ในขณะเดียวกัน ABI X32 รองรับตัวชี้หน่วยความจำ 32 บิตซึ่งช่วยประหยัดหน่วยความจำช่วยในการเติมแคชโปรเซสเซอร์ได้อย่างมีประสิทธิภาพมากขึ้นและมีผลดีต่อความเร็วโดยรวมของการเรียกใช้โค้ด
ข้อ จำกัด ของ ABI X32 คือความเป็นไปไม่ได้ที่จะกำหนดหน่วยความจำมากกว่า 4 GB จากแอปพลิเคชัน
การสนับสนุน X32 เป็นส่วนหนึ่งของเคอร์เนลลินุกซ์ตั้งแต่รุ่น 3.4 ซึ่งก่อตั้งขึ้นในเดือนพฤษภาคม 2012
นักพัฒนาจะถกเถียงกันว่าจะดำเนินการบำรุงรักษาสถาปัตยกรรมนี้ต่อไปหรือไม่
ตามที่นักพัฒนาเสนอให้ลบเทคโนโลยี x32 ยังไม่ได้รับความเป็นธรรมและไม่พบการนำไปใช้จริงในรูปแบบอุตสาหกรรมสมัยใหม่
นอกจากนี้และรหัส l x32 ใช้วิธีที่ค่อนข้างขัดแย้งในการทำงานกับการเรียกระบบซึ่งก่อให้เกิดความเสี่ยงในการขัดจังหวะการทำงานปกติหลังจากประมวลผลการเรียกใช้ระบบ
Linus Torvalds กล่าวว่าเขายินยอมที่จะลบ x32 หากไม่มีการส่งข้อโต้แย้ง หรือถ้าระบบที่ใช้สถาปัตยกรรมย่อย x32 ไม่ได้ถูกนำเสนอ
ไลนัส นอกจากนี้ยังตั้งข้อสังเกตว่าการใช้สถาปัตยกรรม x32 เห็นได้ชัดว่า จำกัด อยู่ที่การทดสอบประสิทธิภาพที่รุนแรงเนื่องจากการสนับสนุนสำหรับโครงสร้างย่อยนี้เกี่ยวข้องกับความยุ่งยากอย่างมากในการรักษาการกระจายและสภาพแวดล้อมการพัฒนา
จดหมาย:
สวัสดีทุกคน.
ฉันกำลังพิจารณาที่จะส่งแพตช์เพื่อลบการสนับสนุน x32 ออกจาก Linux อย่างจริงจัง. นี่คือปัญหาบางประการเกี่ยวกับสิ่งนี้:
- ยังไม่ชัดเจนว่ามีผู้ใช้ เท่าที่ฉันรู้มันรองรับบน Gentoo และ Debian
- วิธีการทำงานของระบบโทรนั้นแปลกมาก syscalls ส่วนใหญ่บน x32 ป้อนผ่าน * native * (เช่นไม่ใช่ COMPAT_SYSCALL_DEFINE) ด้วยจุดเข้าและนี่เป็นความตั้งใจ
ตัวอย่างเช่น adjtimex () ใช้อินพุตดั้งเดิมไม่ใช่อินพุตที่เข้ากันได้เนื่องจาก x32 struct timex ตรงกับโครงร่าง x86_64 แต่ syscall จำนวนหนึ่งมีจุดเข้าใช้งานแยกกัน - นี่คือ syscalls ที่เริ่มต้นที่ 512
สิ่งเหล่านี้เข้าสู่จุดเข้า COMPAT_SYSCALL_DEFINE
X32 syscalls ที่ * ไม่ใช่ * ในช่วง 512 จะละเมิดทุกลักษณะของ kernel syscall convention
ในตัวจัดการ syscall in_compat_syscall () จะคืนค่าจริง แต่รายการ COMPAT_SYSCALL_DEFINE ไม่ถูกเรียกสิ่งนี้เป็นเรื่องบ้าและคุณเสี่ยงต่อการทำลายสิ่งต่าง ๆ เมื่อผู้คน refactor การนำ syscall ไปใช้
และเหนือสิ่งอื่นใดไม่มีใครลองสิ่งเหล่านี้
ครั้งหนึ่ง เมื่อทดสอบ x32 หนึ่งในผู้พัฒนา Gentoo สรุปว่าการปรับปรุงประสิทธิภาพเมื่อเปลี่ยนไปใช้ ABI x32 นั้นไม่ดีเท่าที่การทดสอบสังเคราะห์แสดง จากผู้สร้าง ABI x32:
ความคืบหน้าที่สำคัญจะเห็นได้ก็ต่อเมื่อเทียบกับสถาปัตยกรรม x86 รุ่นก่อนหน้า แต่เมื่อเปรียบเทียบกับสถาปัตยกรรม x86-64 ปัจจุบันการได้รับนั้นน้อยมาก (การทดสอบ SPEC โดยผู้สร้าง x32 พบว่ามีการเร่งความเร็วสูงถึง 40% เมื่อเทียบกับ ABI x86_64 แบบคลาสสิกการทดสอบ ด้วยตัวแปลงสัญญาณ H.264 มีอัตราเร่ง 15-20%)