สถาปัตยกรรม Linux Kernel x32 อาจถูกยกเลิก

ลินุกซ์เคอร์เนล 4.19

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 อย่างจริงจัง. นี่คือปัญหาบางประการเกี่ยวกับสิ่งนี้:

  1. ยังไม่ชัดเจนว่ามีผู้ใช้ เท่าที่ฉันรู้มันรองรับบน Gentoo และ Debian
  2. วิธีการทำงานของระบบโทรนั้นแปลกมาก 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%)


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. รับผิดชอบข้อมูล: AB Internet Networks 2008 SL
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา