พวกเขาเสนอตัวควบคุมหน่วยความจำใหม่สำหรับเคอร์เนลลินุกซ์

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

ตัวจัดการหน่วยความจำเป็นส่วนย่อยของระบบ Operativo แชร์หน่วยความจำระหว่างระบบปฏิบัติการและแอพพลิเคชั่นต่างๆ คำว่าหน่วยความจำหมายถึงหน่วยความจำหลัก (RAM) เป็นหลัก แต่การจัดการต้องการการสนับสนุนหน่วยความจำเสริมและหน่วยความจำแคช

ตัวจัดการหน่วยความจำ มีหน้าที่โดยเฉพาะอย่างยิ่งในการจัดสรรหน่วยความจำให้กับกระบวนการต่างๆอย่างมีประสิทธิภาพซึ่งหมายความว่าคุณต้องสามารถระบุตำแหน่งว่างของหน่วยความจำที่มีอยู่จัดสรรหน่วยความจำที่จำเป็นสำหรับกระบวนการใหม่และเรียกคืนหน่วยความจำจากกระบวนการที่ยุติ โปรแกรมจัดการกระบวนการภายในเคอร์เนล Linux คือตัวเลือกจ่ายงาน SLAB

สลาบ อาศัยระบบบล็อกและแคชที่ปรับการร้องขอหน่วยความจำให้เหมาะสม. การจัดการหน่วยความจำประเภทนี้ช่วยลดการแยกส่วนที่เกิดจากการดำเนินการจัดสรรและการย้ายตำแหน่ง

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

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

พวกเขาตั้งใจที่จะแทนที่ SLAB

โรมัน Gushchin สมาชิกของทีมวิศวกรรมเคอร์เนล Linux ที่ Facebook เขาค้นพบสิ่งที่เขาเห็นว่าเป็น "ข้อบกพร่องร้ายแรง" ในตัวจัดการ / คอนโทรลเลอร์หน่วยความจำปัจจุบัน และ rเพิ่งเสนอตัวควบคุมหน่วยความจำใหม่ บล็อก ซึ่งสัญญาว่าจะปรับปรุงการใช้หน่วยความจำระหว่าง "cgroups" หลายกลุ่ม (หรือกลุ่มควบคุม) จากหน่วยความจำ

ด้วยเหตุนี้จึงเป็นสิ่งสำคัญที่ต้องสังเกตว่า cgroups หมายถึงคุณลักษณะของเคอร์เนล Linux ที่อนุญาตให้ จำกัด นับและแยกการใช้ทรัพยากรของระบบ (โปรเซสเซอร์หน่วยความจำการใช้ดิสก์ ฯลฯ ) และคำว่า "page of slab » สามารถหลอมรวมเข้ากับกระบวนการจัดสรรหน่วยความจำโดย SLAB

ตาม Gushchin:

“ เหตุผลที่แท้จริงของการออกแบบที่มีอยู่นำไปสู่การใช้ SLAB ต่ำนั้นง่ายมาก: เพจ Slab ถูกใช้โดยพูลหน่วยความจำเดียวเท่านั้น

หากมีการจัดสรรขนาดที่กำหนดโดย cgroup เพียงไม่กี่ชิ้นหรือมีอ็อบเจ็กต์ที่ใช้งานเหลืออยู่หลังจากที่ cgroup ถูกลบออกไปหรือถ้า cgroup มีแอปพลิเคชันแบบเธรดเดียวที่จัดสรรแทบไม่มีเมล็ด แต่จะทำเช่นนั้นทุกครั้งใน CPU ใหม่: ในทุกกรณีการใช้งาน SLAB ที่ได้จะต่ำมาก

หากปิดใช้งานการคำนวณ kmem เคอร์เนลสามารถใช้พื้นที่ว่างบนหน้าไทล์สำหรับการจัดสรรอื่น ๆ «.

Gushchin ระบุว่านี่ไม่ใช่ปัญหาเมื่อไดรเวอร์ kmem ถูกนำมาใช้เป็นคุณสมบัติเสริมที่ต้องเปิดใช้งานสำหรับแต่ละพูลหน่วยความจำ

อย่างไรก็ตามตอนนี้ไดรเวอร์ kmem ถูกเปิดใช้งานโดยค่าเริ่มต้นสำหรับ cgroup v1 และ v2 และเนื่องจากระบบสมัยใหม่มักจะสร้างกลุ่ม c จำนวนมากการใช้ SLAB จึงได้ผลน้อย

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

แพตช์ที่เสนอโดย Gushchin ประกอบด้วยองค์ประกอบกึ่งอิสระสองอย่าง ได้แก่ API การโหลดหน้าย่อยที่สามารถใช้ในอนาคตเพื่อวัตถุประสงค์ทางการบัญชีและ mem_cgroup_ptr API

ทำการทดสอบด้วยคอนโทรลเลอร์ใหม่ ความทรงจำของ Gushchin แสดงให้เห็นว่าเป็นไปได้ที่จะได้รับหน่วยความจำเพิ่มขึ้นระหว่าง 35% ถึง 42% ใน Linux บนเว็บส่วนหน้าเซิร์ฟเวอร์ DNS และแคชฐานข้อมูลและภาระงานอื่น ๆ อีกมากมาย

ขณะนี้ข้อเสนอของ Gushchin อยู่ภายใต้แบนเนอร์ของ "ขอความคิดเห็น" หากได้รับการยอมรับก็สามารถรวมเข้ากับเคอร์เนลลินุกซ์รุ่นปี 2020 ได้

Fuente: https://lkml.org/


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

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

*

*

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