Google ได้เริ่มเปิดการใช้งานโมเดลโฟลว์ M:N

Google แนะนำ เพื่อรวมแพตช์ชุดแรกไว้ในเคอร์เนล Linux พร้อมการนำส่วนประกอบที่จำเป็นมาใช้เพื่อให้แน่ใจว่าการทำงานของโมเดลเธรด M:N ความคิดริเริ่มของ Google เกี่ยวข้องกับการเปิด API ที่กำลังพัฒนาแบบปิดประตู สลับไปที่ สำหรับเคอร์เนล Linux ซึ่งจัดเตรียมการทำงานของระบบย่อยแบบมัลติเธรดที่ใช้งานในพื้นที่ผู้ใช้ โดยใช้โมเดลเธรด M:N Google ใช้ระบบย่อยเพื่อให้แน่ใจว่าการทำงานของบริการต้องมีความล่าช้าน้อยที่สุด การกำหนดเวลาและการจัดการการกระจายเธรดจะดำเนินการทั้งหมดในพื้นที่ผู้ใช้ ซึ่งสามารถลดจำนวนการดำเนินการสลับบริบทได้อย่างมากโดยการลดการดำเนินการของการเรียกของระบบ

เพื่อให้มั่นใจถึงการทำงานของระบบย่อยที่ระบุในระดับเคอร์เนล Linux จึงมีการใช้ SwitchTo API โดยมีการดำเนินการพื้นฐานสามประการ - รอ ดำเนินการต่อ และสลับ (สลับ) เพื่อรวมไว้ในเคอร์เนล มีการเสนอรหัสของการดำเนินการใหม่ FUTEX_SWAP เสริม FUTEX_WAIT และ FUTEX_WAKEและจัดเตรียมเฟรมเวิร์กสำหรับการสร้างไลบรารีแบบมัลติเธรดในพื้นที่ผู้ใช้ FUTEX_SWAP ยังสามารถใช้เพื่อถ่ายโอนข้อความระหว่างงานได้ คล้ายกับ RPC ตัวอย่างเช่น ในปัจจุบัน หากต้องการถ่ายโอนข้อความระหว่างงานต่างๆ คุณต้องดำเนินการเรียก FUTEX_WAIT และ FUTEX_WAKE อย่างน้อยสี่ครั้ง แต่การใช้ FUTEX_SWAP จะทำให้คุณสามารถเข้าถึงได้ด้วยการดำเนินการเพียงครั้งเดียว ซึ่งจะเสร็จสิ้นเร็วขึ้น 5-10 เท่า

Google ได้เริ่มเปิดการใช้งานโมเดลโฟลว์ M:N

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

ข้อเสียเปรียบหลักของโมเดล 1:1 คือการสลับบริบทระหว่างเคอร์เนลและพื้นที่ผู้ใช้ที่มีค่าใช้จ่ายสูง โมเดล N:1 แก้ปัญหานี้ แต่สร้างโมเดลใหม่ เนื่องจากเธรดในเคอร์เนลเป็นหน่วยกำหนดตารางการดำเนินการที่แบ่งแยกไม่ได้ เธรดผู้ใช้ที่เชื่อมโยงกับเธรดเดียวในเคอร์เนลระบบปฏิบัติการจึงไม่สามารถปรับขนาดข้ามคอร์ CPU และจบลงด้วยการเชื่อมโยงกับ ซีพียูคอร์เดียว

โมเดล M:N เป็นแบบไฮบริดและกำจัดข้อเสียทั้งหมดที่อธิบายไว้ข้างต้นโดยการแมป N เธรดในพื้นที่ผู้ใช้กับเธรด M ในเคอร์เนล OS ซึ่งช่วยให้ทั้งลดค่าใช้จ่ายในการสลับบริบทและรับประกันการปรับขนาดข้ามคอร์ CPU ค่าใช้จ่ายของตัวเลือกนี้คือความซับซ้อนอย่างมากในการใช้ตัวกำหนดตารางเวลาเธรดในพื้นที่ผู้ใช้และความต้องการกลไกในการประสานการดำเนินการกับตัวกำหนดเวลาเคอร์เนล

ที่มา: opennet.ru

เพิ่มความคิดเห็น