สถาปัตยกรรม Multikernel ของ Linux จุดประกายการถกเถียงเรื่องความปลอดภัยและความท้าทายในการแบ่งปันฮาร์ดแวร์

ทีมชุมชน BigGo
สถาปัตยกรรม Multikernel ของ Linux จุดประกายการถกเถียงเรื่องความปลอดภัยและความท้าทายในการแบ่งปันฮาร์ดแวร์

แพตช์ RFC ชุดใหม่ที่เสนอการสนับสนุนสถาปัตยกรรม multikernel สำหรับ Linux ได้จุดประกายการอภิปรายอย่างเข้มข้นในชุมชนนักพัฒนาเกี่ยวกับความเป็นไปได้และผลกระทบด้านความปลอดภัย ข้อเสนอนี้ซึ่งจะอนุญาตให้ kernel หลายตัวที่เป็นอิสระทำงานพร้อมกันบน CPU core ที่แตกต่างกันในขณะที่แบ่งปันทรัพยากรฮาร์ดแวร์ สัญญาว่าจะให้ประโยชน์เช่นการแยก fault ที่ดีขึ้นและการใช้ทรัพยากรที่ดีกว่าเมื่อเปรียบเทียบกับ virtualization แบบดั้งเดิม

องค์ประกอบหลักของสถาปัตยกรรม Multikernel

  • ระบบย่อย kexec ที่ได้รับการปรับปรุง: การติดตามและจัดการอิมเมจเคอร์เนลแบบไดนามิก
  • เฟรมเวิร์ก IPI แบบทั่วไป: การสื่อสารและส่งข้อความระหว่างเคอร์เนล
  • กลไกการบูตสตราป CPU: การสนับสนุนเฉพาะสถาปัตยกรรม (ปัจจุบันรองรับเฉพาะ x86 เท่านั้น)
  • อินเทอร์เฟซ Proc: /proc/multikernel สำหรับตรวจสอบอินสแตนซ์ที่โหลดแล้ว
  • เวกเตอร์การสื่อสار: MULTIKERNEL_VECTOR เฉพาะสำหรับการสื่อสารระหว่างเคอร์เนลใน x86

ข้อกังวลเรื่องการแบ่งปันทรัพยากรฮาร์ดแวร์ครองใจการอภิปราย

ประเด็นที่ถกเถียงกันมากที่สุดของข้อเสนอนี้มุ่งเน้นไปที่วิธีที่ kernel หลายตัวจะแบ่งปันทรัพยากรฮาร์ดแวร์โดยไม่เกิดความขัดแย้ง สมาชิกชุมชนได้แสดงความกังวลอย่างมากเกี่ยวกับอุปกรณ์ที่พึ่งพา state-keeping และ serialization ในไดรเวอร์ของพวกเขา ความท้าทายจะรุนแรงเป็นพิเศษกับอุปกรณ์ต่อพ่วงที่ซับซ้อนเช่นอุปกรณ์ USB และ Bluetooth ซึ่งผู้จำหน่ายโดยทั่วไปไม่ทดสอบสำหรับลำดับคำสั่งที่สลับกันหลายตัวจาก kernel instance ที่แตกต่างกัน

นักพัฒนาบางคนแนะนำแนวทางแบบลำดับชั้นที่ kernel หลักจะเป็นเจ้าของฮาร์ดแวร์สำคัญในขณะที่ kernel อื่นๆ สื่อสารผ่านช่องทางเฉพาะ อย่างไรก็ตาม สิ่งนี้สร้างจุดล้มเหลวเดียวที่ทำลายประโยชน์ที่สัญญาไว้บางอย่าง โดยเฉพาะสำหรับการแยก fault และการอัปเดต kernel แบบ zero-downtime

หมายเหตุ: State-keeping หมายถึงฮาร์ดแวร์ที่รักษาข้อมูลสถานะภายใน ในขณะที่ serialization หมายถึงการประมวลผลคำสั่งทีละครั้งตามลำดับที่เฉพาะเจาะจง

โมเดลความปลอดภัยทำให้เกิดคำถามเกี่ยวกับการแยก

ผลกระทบด้านความปลอดภัยของแนวทาง multikernel ได้จุดประกายการถกเถียงอย่างมาก ต่างจาก virtualization แบบดั้งเดิมที่พึ่งพาการแยกที่ช่วยด้วยฮาร์ดแวร์ โมเดลแบบร่วมมือนี้สันนิษฐานว่า kernel ทั้งหมดที่โหลดเป็นที่เชื่อถือได้ นักวิจารณ์ชี้ให้เห็นว่า kernel ที่ถูกบุกรุกบน core หนึ่งอาจสามารถ hijack core อื่นๆ ได้ โดยตั้งคำถามว่าสิ่งนี้ให้ขอบเขตความปลอดภัยที่มีความหมายหรือไม่

ผู้สนับสนุนโต้แย้งว่าแม้สถาปัตยกรรมจะไม่ป้องกันการโจมตีการดำเนินโค้ด แต่ก็สามารถจำกัดขอบเขตของการใช้ประโยชน์ทั่วไปเช่นช่องโหว่ syscall หรือการโจมตี memory mapping การแยกจะเป็นเรื่องของการจำกัดความเสียหายที่เกิดขึ้นโดยบังเอิญและการจำกัดผลกระทบของการใช้ประโยชน์มากกว่าการให้การรับประกันความปลอดภัยระดับ VM

ประโยชน์ที่อ้างว่ามี เทียบกับ ข้อกังวลของชุมชน

ประโยชน์ที่อ้างว่ามี ข้อกังวลของชุมชน
การแยกข้อผิดพลาดที่ดีขึ้น สถานะฮาร์ดแวร์ขัดแย้งกับอุปกรณ์ที่ใช้ร่วมกัน
ความปลอดภัยที่เพิ่มขึ้นผ่านการแยกส่วน ขอบเขตความปลอดภัยที่อ่อนแอเมื่อเทียบกับ VMs
การใช้ทรัพยากรที่ดีกว่า VMs จุดเสียหายเดียวที่ส่งผลต่อทั้งระบบกับเคอร์เนล "หลัก"
การอัปเดตเคอร์เนลแบบไม่หยุดทำงาน ( KHO ) การทดสอบที่จำกัดบนฮาร์ดแวร์ที่หลากหลาย
การทำงานร่วมกันของเคอร์เนลแบบเรียลไทม์และใช้งานทั่วไป ความต้องการในการประสานงานไดรเวอร์ที่ซับซ้อน

การเปรียบเทียบกับแนวทางในอดีตและทางเลือกอื่น

ข้อเสนอนี้ได้รับการเปรียบเทียบกับระบบในอดีตและโครงการวิจัยหลายแห่ง สมาชิกชุมชนสังเกตเห็นความคล้ายคลึงกับ OpenVMS Galaxy บนระบบ DEC Alpha , พาร์ติชัน IBM mainframe และระบบปฏิบัติการวิจัย Barrelfish การเปรียบเทียบเหล่านี้เน้นย้ำว่าแม้แนวคิดจะไม่ใหม่โดยสิ้นเชิง แต่การนำไปใช้ให้สำเร็จใน production kernel เช่น Linux นำเสนอความท้าทายที่เป็นเอกลักษณ์

ไม่มีทางที่เช่น ผู้จำหน่าย usb หรือ bluetooth โดยเฉลี่ยจะมี 'ลำดับคำสั่งที่สลับกันหลายตัว' ในการตั้งค่าการทดสอบของพวกเขา

การอภิปรายยังสัมผัสกับว่าแนวทางนี้ให้ข้อได้เปรียบเหนือเทคโนโลยี containerization ที่มีอยู่หรือ hardware virtualization หรือไม่ ในขณะที่สถาปัตยกรรม multikernel สามารถให้ประสิทธิภาพที่ดีกว่า VM โดยการกำจัด hypervisor overhead แต่ก็สละการรับประกันการแยกที่แข็งแกร่งที่ทำให้ virtualization น่าสนใจสำหรับ workload ที่ต้องการความปลอดภัยสูง

ความท้าทายในการนำไปใช้และแนวโน้มในอนาคต

ลักษณะ RFC ของแพตช์ชุดนี้ยอมรับว่ายังมีงานสำคัญที่เหลืออยู่ก่อนที่เทคโนโลยีจะพร้อมสำหรับการใช้งานจริง การนำไปใช้ปัจจุบันสนับสนุนเฉพาะสถาปัตยกรรม x86 และได้รับการทดสอบบนการกำหนดค่าฮาร์ดแวร์ที่จำกัด สมาชิกชุมชนเน้นย้ำว่าการทดสอบอย่างกว้างขวางในแพลตฟอร์มต่างๆ จะมีความสำคัญต่อการระบุปัญหาที่อาจเกิดขึ้น

ประวัติของผู้เขียนที่ Bytedance และการมีส่วนร่วมในเทคโนโลยี kernel อื่นๆ เช่น kernelscript ได้สร้างความมองโลกในแง่ดีอย่างระมัดระวังเกี่ยวกับศักยภาพของโครงการ อย่างไรก็ตาม นักพัฒนาหลายคนยังคงสงสัยว่าประโยชน์จะสมเหตุสมผลกับความซับซ้อนและปัญหาความน่าเชื่อถือที่อาจเกิดขึ้นหรือไม่ โดยเฉพาะอย่างยิ่งเมื่อพิจารณาถึงความสมบูรณ์ของโซลูชัน virtualization ที่มีอยู่

สถาปัตยกรรม multikernel แสดงถึงจุดกึ่งกลางที่น่าสนใจระหว่างประสิทธิภาพ bare-metal และการแยก virtualized แต่ความสำเร็จของมันจะขึ้นอยู่กับการแก้ไขความท้าทายพื้นฐานของการแบ่งปันฮาร์ดแวร์แบบร่วมมือและการรักษาความเสถียรของระบบใน kernel instance หลายตัวในท้ายที่สุด

อ้างอิง: [RFC Patch 0/7] kernel: Introduce multikernel architecture support