Multikernel เป็นยูทิลิตี้ที่ยอดเยี่ยมสำหรับการเรียกใช้เคอร์เนลหลายตัวโดยไม่ต้องใช้เวอร์ชวลไลเซชัน

ประเด็นสำคัญ:
  • Multikernel Linux อนุญาตให้เรียกใช้เคอร์เนลอิสระหลายตัวพร้อมกันบนฮาร์ดแวร์โดยตรง
  • โปรแกรมนี้ใช้เคอร์เนล Linux 7.0 โดยใช้ CONFIG_MULTIKERNEL และปัจจุบันรองรับสถาปัตยกรรม x86_64
  • มันช่วยลดภาระการทำงานของระบบเวอร์ชวลไลเซชัน (KVM hypervisor) ทำให้การสลับบริบททำได้เร็วขึ้นถึง 2,5 เท่า
  • ต่างจากคอนเทนเนอร์ อินสแตนซ์จะไม่ใช้เคอร์เนลร่วมกัน ซึ่งจะช่วยป้องกันไม่ให้ความล้มเหลวหรือช่องโหว่ส่งผลกระทบต่อเซิร์ฟเวอร์ทั้งหมด
  • ใช้เครื่องมือ Kerf ร่วมกับโมดูล Lazy CMA และ DAXFS เพื่อจัดการทรัพยากรและบูตอิมเมจ Docker แบบไดนามิก

มัลติเคอร์เนล ลินุกซ์

ปีที่แล้วเราได้พูดคุยกันในบล็อกนี้เกี่ยวกับข้อเสนอจากByteDance (ผู้สร้าง TikTok)สำหรับยูทิลิตี้ที่ชื่อว่าParker (PARTitioned KERnel) ซึ่งเป็นเทคโนโลยีทดลองที่อนุญาตให้เรียกใช้เคอร์เนล Linux หลายตัวพร้อมกันได้ และตอนนี้ หลังจากผ่านไปกว่าหนึ่งปีครึ่ง ยูทิลิตี้สาธารณะตัวใหม่จากโครงการนี้ "Multikernel Linux (mklinux-v7.0-mk2)" ก็ได้ถูกปล่อยออกมาแล้ว

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

ByteDance-Parker-มัลติเคอร์เนล
บทความที่เกี่ยวข้อง:
Parker: เทคโนโลยีใหม่ที่ช่วยให้สามารถรันเคอร์เนล Linux หลายตัวได้โดยไม่ต้องจำลองเสมือน

โครงการนี้ใช้เคอร์เนล Linux 7.0 ที่เพิ่งเปิดตัวเป็นพื้นฐาน และอนุญาตให้เปิดใช้งานคุณสมบัตินี้ได้ผ่านพารามิเตอร์การกำหนดค่า CONFIG_MULTIKERNELหากปิดใช้งานตัวเลือกนี้ เคอร์เนลที่ได้จะมีลักษณะเหมือนกันทุกประการและทำงานเหมือนกับ Linux 7.0 มาตรฐาน ปัจจุบันเวอร์ชันแรกนี้ (v7.0-mk2) รองรับเฉพาะสถาปัตยกรรม x86_64และได้รับการออกแบบมาเพื่อลดช่องว่างด้านประสิทธิภาพและความปลอดภัยระหว่างการจำลองเสมือนแบบดั้งเดิมและการแยกคอนเทนเนอร์

การแยกตัวโดยไม่ส่งผลเสียต่อประสิทธิภาพการทำงาน

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

จากข้อมูลประสิทธิภาพที่เผยแพร่หลังการทดสอบบนโปรเซสเซอร์ Xeon Gold 5418Y (Sapphire Rapids) ระบบมัลติเคอร์เนลแสดงให้เห็นถึงความเร็วในการประมวลผลที่เพิ่มขึ้นอย่างมากเมื่อเทียบกับระบบปฏิบัติการแขก KVMตัวอย่างเช่น การสลับบริบทระหว่างกระบวนการเร็วขึ้น 2,5 เท่า ความหน่วงของไปป์ลดลงมากกว่าครึ่ง (2,18 เท่า) และการเรียกใช้ระบบพื้นฐาน เช่น การอ่านและการเขียน มีเวลาตอบสนองเร็วขึ้นมากกว่า 25%

เมื่อเปรียบเทียบกับคอนเทนเนอร์ Docker แบบดั้งเดิม Multikernel ให้การปกป้องที่เหนือกว่าเนื่องจากคอนเทนเนอร์ใช้เคอร์เนลของโฮสต์เดียวกัน ดังนั้นช่องโหว่ระดับเคอร์เนล การเกิดข้อผิดพลาดร้ายแรง หรือการล็อกภายในที่มากเกินไป จะส่งผลกระทบต่อผู้ใช้งานทั้งหมดในระบบนิเวศ Multikernel แต่ละสภาพแวดล้อมจะมีเคอร์เนลที่เป็นอิสระของตนเองกล่าวคือ หากอินสแตนซ์หนึ่งเกิดความล้มเหลวอย่างร้ายแรง อินสแตนซ์อื่นๆ จะยังคงทำงานต่อไปได้โดยไม่ได้รับผลกระทบ รับประกันสภาพแวดล้อมที่แยกออกจากกัน ซึ่งเหมาะสำหรับการใช้งานทุกอย่างตั้งแต่เว็บเซิร์ฟเวอร์ไปจนถึงเวิร์กโหลดการฝึกอบรม AI ที่เข้มข้น (แมชชีนเลิร์นนิง) บนฮาร์ดแวร์เดียวกัน

การมอบหมายงานและการจัดการระบบแบบไดนามิกด้วย Kerf

ระบบปฏิบัติการ Linux แบบมัลติเคอร์เนลทำงานโดยใช้เคอร์เนลหลักที่จัดการกลุ่มทรัพยากรขนาดใหญ่ (ซีพียู, แรม และอุปกรณ์ PCI) โดยใช้โครงสร้างทรีอุปกรณ์ที่มีอยู่ (เข้าถึงได้ที่ /sys/fs/multikernel/) เคอร์เนลจะแบ่งกลุ่มทรัพยากรนี้และเรียกใช้ "เคอร์เนลย่อย" ผ่านระบบย่อย kexec_file_load() ดั้งเดิม ด้วยคุณสมบัติ hotplug ของ Linux ทรัพยากรเหล่านี้สามารถย้ายระหว่างอินสแตนซ์ได้อย่างไดนามิกโดยไม่ต้องรีบูตเซิร์ฟเวอร์ ทำให้มั่นใจได้ถึงประสิทธิภาพที่คาดการณ์ได้และปรับเปลี่ยนได้แบบเรียลไทม์

เพื่อควบคุมระบบนิเวศนี้ นักพัฒนาได้แนะนำเครื่องมือบรรทัดคำสั่ง Kerfยูทิลิตีนี้จัดการวงจรชีวิตทั้งหมดของอินสแตนซ์ โดยอาศัยโมดูลโอเพนซอร์สเสริม หนึ่งในนั้นคือ Lazy CMA ซึ่งจัดสรรหน่วยความจำทางกายภาพที่ต่อเนื่องกันในระหว่างการทำงานโดยไม่ต้องกำหนดค่าก่อนบูตใดๆ

อีกเสาหลักหนึ่งคือ DAXFS ซึ่งเป็นโมดูลที่ช่วยให้ระบบไฟล์ในหน่วยความจำสามารถแชร์กันได้โดยตรง ด้วยเหตุนี้ Kerf จึงสามารถบูตเคอร์เนลลูกภายในอิมเมจคอนเทนเนอร์ Docker ได้โดยตรง โดยใช้ประโยชน์จากระบบไฟล์โดยไม่ต้องใช้เลเยอร์จำลอง และใช้ตัวอธิบายในหน่วยความจำสำหรับการเชื่อมต่อเครือข่ายโดยไม่ต้องคัดลอกข้อมูล

เป็นที่น่ากล่าวถึงว่าเวอร์ชันแรกนี้ได้ผ่านการทดสอบความเสถียรอย่างเข้มข้นภายใต้สถาปัตยกรรมเพจจิ้ง 5 ระดับและ KASLR ที่ทำงานอยู่ ซึ่งแสดงให้เห็นว่าการกู้คืนทรัพยากรนั้นปลอดภัยอย่างสมบูรณ์แม้ว่าเคอร์เนลย่อยจะล่มก็ตาม

ด้วยการอนุญาตให้ภาระงานที่ขัดแย้งกันเนื่องจากการล็อกระบบ (เช่น กระบวนการลบลิงก์หรือเปลี่ยนชื่อจำนวนมากบนแคชเดียวกัน) ถูกแบ่งไปยังเคอร์เนลที่แยกต่างหากซึ่งสอดคล้องกับซ็อกเก็ตโปรเซสเซอร์ทางกายภาพ Multikernel Linux แสดงให้เห็นถึงความสามารถในการขยายขนาดเกินขีดจำกัดประสิทธิภาพที่กำหนดโดยเคอร์เนลแบบรวมศูนย์เพียงตัวเดียว เปิดยุคใหม่ในการรวมเซิร์ฟเวอร์และการประมวลผลคลาวด์ประสิทธิภาพสูง

สุดท้ายนี้ หากคุณสนใจเรียนรู้เพิ่มเติม สามารถดูรายละเอียดได้ที่ลิงก์ต่อไปนี้


เพิ่มเป็นแหล่งข้อมูลที่ต้องการใน Google