สี่ปีหลังจากอัปเดตครั้งก่อน jemalloc 5.3.1 ซึ่งเป็นไลบรารีการจัดการหน่วยความจำ ก็พร้อมใช้งานแล้ว มันนำเสนอการใช้งานฟังก์ชัน malloc ทางเลือกที่ได้รับการปรับให้เหมาะสมเพื่อลดการกระจายตัวของหน่วยความจำและทำงานบนระบบมัลติโปรเซสเซอร์ เพื่อแก้ไขปัญหาการล็อกบนระบบมัลติคอร์ jemalloc ใช้พื้นที่จัดสรรหน่วยความจำแยกต่างหากสำหรับแต่ละคอร์ของ CPU ทำให้สามารถปรับขนาดได้อย่างเป็นเส้นตรงเมื่อจำนวนเธรดเพิ่มขึ้น
ในเดือนมิถุนายน ปี 2025 ผู้เขียนโครงการได้ยุติการบำรุงรักษาและเก็บถาวรคลังเก็บข้อมูล jemalloc แต่การพัฒนาได้กลับมาดำเนินต่อเมื่อเดือนที่แล้วโดย Meta ซึ่งใช้ jemalloc ในโครงสร้างพื้นฐานของตน ไลบรารีนี้ได้รับการพัฒนาขึ้นสำหรับ FreeBSD และถูกใช้เป็นค่าเริ่มต้นในระบบปฏิบัติการนั้นมาตั้งแต่ปี 2005 โค้ดของไลบรารีเขียนด้วยภาษา C และเผยแพร่ภายใต้ใบอนุญาต BSD
ท่ามกลางการเปลี่ยนแปลง:
- ฟังก์ชัน pvalloc ได้รับการพัฒนาขึ้นแล้ว ซึ่งอาจมีประโยชน์เมื่อต้องการแทนที่ตัวจัดสรรหน่วยความจำของ libc
- การตรวจจับการเรียกซ้ำสำหรับฟังก์ชัน free() ถูกเปิดใช้งานในเวอร์ชันดีบัก พารามิเตอร์ debug_double_free_max_scan ถูกเพิ่มเข้ามาเพื่อกำหนดขนาดสแต็กที่ใช้สำหรับการสแกน
- เพิ่มตัวเลือกการสร้าง "--enable-pageid" สำหรับการตั้งค่าแท็กการแมปหน่วยความจำโดยใช้ prctl ร่วมกับแฟล็ก PR_SET_VMA เมื่อเปิดใช้งานแล้ว สามารถตรวจสอบการแมปได้ผ่านทาง /proc/ /แผนที่
- เพิ่มพารามิเตอร์ "prof_bt_max" ซึ่งช่วยให้คุณสามารถกำหนดความลึกสูงสุดของสแต็กสำหรับการวิเคราะห์ประสิทธิภาพได้
- เพิ่มตัวเลือกการสร้าง "--enable-force-getenv" เพื่อบังคับให้โค้ดใช้ฟังก์ชัน getenv() ปกติแทนที่จะใช้ฟังก์ชัน secure_getenv()
- เพิ่มตัวเลือกการสร้าง "--disable-dss" เพื่อปิดการใช้งานฟังก์ชัน sbrk()
- เพิ่มพารามิเตอร์ "tcache_ncached_max" เพื่อจำกัดจำนวนรายการในแคชของเธรด
- เพิ่มตัวเลือก "calloc_madvise_threshold" เพื่อกำหนดค่าว่าจะใช้กลไกเคอร์เนล madvise หรือฟังก์ชัน memset ในการล้างหน่วยความจำที่จัดสรรผ่านฟังก์ชัน calloc ให้เป็นศูนย์
- เพิ่มตัวเลือกการสร้าง "--disable-user-config" เพื่อปิดใช้งานการโหลดการตั้งค่าจากไฟล์ /etc/malloc.conf หรือตัวแปรสภาพแวดล้อม MALLOC_CONF
- เพิ่มพารามิเตอร์ "process_madvise_max_batch" เพื่อจำกัดจำนวนบล็อกหน่วยความจำสำหรับการดำเนินการแบบกลุ่ม madvise แต่ละครั้ง
- เพิ่มพารามิเตอร์ "disable_large_size_classes" เพื่อปิดใช้งานอัลกอริธึมการคำนวณขนาดการจัดสรรหน่วยความจำแบบใหม่ ซึ่งช่วยลดภาระเมื่อจัดสรรบล็อกที่มีขนาดใหญ่กว่า 4 หน้าหน่วยความจำ
- มีการเพิ่มตัวเลือกต่างๆ ลงในยูทิลิตี้ mallctl แล้ว ได้แก่ opt.prof_bt_max, arena.name
ที่มา: opennet.ru
