Microsoft ได้เปิดรหัสสำหรับระบบการจัดสรรหน่วยความจำ mimalloc

Microsoft ได้เปิดไลบรารีภายใต้ใบอนุญาต MIT มิมัลลอค จากการใช้งานระบบจัดสรรหน่วยความจำที่สร้างขึ้นสำหรับส่วนประกอบรันไทม์ของภาษา Koka и ยัน. Mimalloc ได้รับการปรับใช้เพื่อใช้ในแอปพลิเคชันมาตรฐานโดยไม่ต้องเปลี่ยนโค้ด และสามารถทำหน้าที่เป็นการแทนที่ฟังก์ชัน malloc อย่างโปร่งใส รองรับการทำงานบน Windows, macOS, Linux, BSD และระบบที่คล้าย Unix อื่นๆ

คุณสมบัติหลักของ mimalloc คือการใช้งานที่กะทัดรัด (โค้ดน้อยกว่า 3500 บรรทัด) และประสิทธิภาพสูงมาก ใน ทำการทดสอบแล้ว mimalloc มีประสิทธิภาพเหนือกว่าไลบรารีการจัดสรรหน่วยความจำที่แข่งขันกันทั้งหมด รวมถึง เจมัลลอค, tcmalloc, สมาลลอค, rpmalloc и สะสม.

เพื่อประเมินประสิทธิภาพชุดที่มีอยู่ การทดสอบมาตรฐาน ในการทดสอบบางอย่าง mimalloc เร็วกว่าระบบอื่นหลายเท่า ตัวอย่างเช่น ในการทดสอบการย้ายอ็อบเจ็กต์ระหว่างเธรดที่ต่างกัน mimalloc ปรากฏว่าเร็วกว่า tcmalloc และ jemalloc มากกว่า 2.5 เท่า ในเวลาเดียวกัน ในการทดสอบส่วนใหญ่ การใช้หน่วยความจำก็ลดลงเช่นกัน ในบางสถานการณ์ การใช้หน่วยความจำสามารถลดลง 25%

Microsoft ได้เปิดรหัสสำหรับระบบการจัดสรรหน่วยความจำ mimalloc

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

ไลบรารีสามารถรวมไว้ในขั้นตอนการเชื่อมโยงหรือโหลดสำหรับโปรแกรมที่ประกอบไว้แล้ว (“LD_PRELOAD=/usr/bin/libmimalloc.so myprogram”) ห้องสมุดก็จัดให้มี API สำหรับการรวมฟังก์ชันการทำงานเข้ากับรันไทม์และการควบคุมพฤติกรรมแบบละเอียด เช่น สำหรับการเชื่อมต่อตัวจัดการการรีลีสหน่วยความจำแบบ Lazy และการเพิ่มตัวนับอ้างอิงที่ซ้ำซากจำเจ คุณสามารถสร้างและใช้ “ฮีป” หลายรายการในแอปพลิเคชันเพื่อกระจายไปยังพื้นที่หน่วยความจำต่างๆ ได้ นอกจากนี้ยังเป็นไปได้ที่จะปล่อยฮีปทั้งหมดโดยไม่ต้องผ่านและแยกอ็อบเจ็กต์ที่วางอยู่ในนั้น

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

ในบรรดาคุณสมบัติของ mimalloc นั้นสังเกตด้วยว่าไม่เสี่ยงต่อปัญหาท้องอืดเนื่องจากมีการกระจายตัวมาก ในกรณีที่เลวร้ายที่สุด การใช้หน่วยความจำเพิ่มขึ้น 0.2% สำหรับข้อมูลเมตา และสามารถเข้าถึง 16.7% สำหรับหน่วยความจำแบบกระจาย เพื่อหลีกเลี่ยงความขัดแย้งเมื่อเข้าถึงทรัพยากร mimalloc จะใช้การดำเนินการแบบอะตอมมิกเท่านั้น

ที่มา: opennet.ru

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