หลังจากสองทศวรรษของการพัฒนาและการนำไปใช้อย่างแพร่หลายในแพลตฟอร์มหลักต่างๆ ตัวจัดสรรหน่วยความจำ jemalloc ได้ถึงจุดสิ้นสุดของวงจรการพัฒนาอย่างแข็งขัน ผู้สร้างโปรเจกต์ประกาศว่าการพัฒนาต้นน้ำได้สิ้นสุดลงแล้ว ซึ่งเป็นการปิดฉากยุคหนึ่งของเครื่องมือจัดการหน่วยความจำที่มีอิทธิพลมากที่สุดในการคอมพิวติ้งสมัยใหม่
jemalloc เริ่มต้นการเดินทางในปี 2004 เป็นส่วนหนึ่งของโปรเจกต์ภาษาโปรแกรมที่เรียกว่า Lyken แต่พบจุดประสงค์ที่แท้จริงเมื่อถูกรวมเข้ากับ FreeBSD ในปี 2005 ตัวจัดสรรนี้ถูกออกแบบมาเพื่อตอบสนองความต้องการที่เพิ่มขึ้นสำหรับการจัดการหน่วยความจำแบบหลายเธรด ขณะที่คอมพิวเตอร์เปลี่ยนไปสู่สถาปัตยกรรมหลายโปรเซสเซอร์ ความสำเร็จของมันนำไปสู่การนำไปใช้โดยโปรเจกต์หลักต่างๆ รวมถึง Mozilla Firefox ซึ่งช่วยแก้ปัญหาการแยกส่วนหน่วยความจำที่สำคัญบนระบบ Windows
ไทม์ไลน์การพัฒนา jemalloc
- 2004: แนวคิดเริ่มต้นเป็นส่วนหนึ่งของภาษาโปรแกรมมิ่ง Lyken
- 2005: เริ่มการรวมเข้ากับ FreeBSD
- 2007: Mozilla Firefox นำมาใช้เพื่อแก้ปัญหาการกระจัดกระจายของหน่วยความจำใน Windows
- 2009-2017: ช่วงการพัฒนาโดย Facebook/Meta พร้อมการปรับปรุงครั้งใหญ่
- 2016: เริ่มการพัฒนา Huge Page Allocation (HPA)
- 2024: การพัฒนา upstream อย่างแข็งขันสิ้นสุดลง
การลงทุนของบริษัทขับเคลื่อนนวัตกรรม
ช่วงเวลาเติบโตที่สำคัญที่สุดของตัวจัดสรรเกิดขึ้นในช่วงที่อยู่ที่ Facebook (ต่อมาเป็น Meta ) ซึ่งได้รับประโยชน์จากข้อมูลเทเลเมทรีขนาดใหญ่จากเวิร์กโฟลว์ที่แตกต่างกันหลายพันแบบ ข้อมูลประสิทธิภาพในโลกแห่งความเป็นจริงนี้มีค่าอย่างมากสำหรับการปรับปรุง ช่วยให้นักพัฒนาสามารถตัดสินใจอย่างมีข้อมูลเกี่ยวกับการปรับปรุงเส้นทางเร็วและกลยุทธ์การหลีกเลี่ยงการแยกส่วน การลงทุนของบริษัทในการพัฒนา jemalloc รวมถึงการสร้างทีมเฉพาะและการนำโครงสร้างพื้นฐานการทดสอบที่ครอบคลุมมาใช้
อย่างไรก็ตาม การอภิปรายในชุมชนเผยให้เห็นว่าการเปลี่ยนแปลงล่าสุดของ Meta ที่เน้นผลตอบแทนจากการลงทุนมากกว่าการพัฒนาเทคโนโลยีหลักได้ยุติโมเมนตัมการก้าวไปข้างหน้าของโปรเจกต์อย่างมีประสิทธิภาพ ฟีเจอร์ Huge Page Allocation (HPA) ซึ่งอยู่ในการพัฒนาตั้งแต่ปี 2016 เพิ่งหยุดนิ่งเมื่อหนี้ทางเทคนิคสะสมขึ้นโดยไม่มีการปรับโครงสร้างที่เหมาะสม
ผู้ใช้งาน jemalloc หลัก
- FreeBSD (ตัวจัดสรรหน่วยความจำเริ่มต้นของระบบ)
- ฐานข้อมูล Redis
- Mozilla Firefox (เวอร์ชันที่แยกออกมา)
- แอปพลิเคชัน Ruby on Rails
- Android (เดิมใช้งาน ปัจจุบันถูกแทนที่แล้ว)
- โครงสร้างพื้นฐานของ Meta/Facebook
ความท้าทายทางเทคนิคและผลกระทบต่อชุมชน
ทีมพัฒนาเผชิญกับอุปสรรคทางเทคนิคหลายประการตลอดการวิวัฒนาการของ jemalloc เวอร์ชันแรกๆ ประสบปัญหาการแยกส่วนที่รุนแรงภายใต้เวิร์กโหลดบางอย่าง โดยเฉพาะกับแอปพลิเคชัน KDE บังคับให้ต้องออกแบบอัลกอริทึมการจัดสรรใหม่ทั้งหมด การตัดสินใจในภายหลัง เช่น การลบการสนับสนุน Valgrind ในเวอร์ชัน 5.0.0 สร้างความขัดแย้งกับผู้ใช้ภายนอกที่พึ่งพาความสามารถในการดีบักเหล่านี้
Jemalloc ยังคงเป็น malloc ที่มีประสิทธิภาพดีที่สุดสำหรับใช้งานทั่วไปที่ใช้งานได้ง่ายในความเห็นของผม TCMalloc ดีมาก แต่เป็นฝันร้ายที่จะใช้หากคุณไม่ได้ใช้ bazel
ชุมชนกำลังต่อสู้กับสิ่งที่จะเกิดขึ้นต่อไป แม้ว่า jemalloc จะยังคงพร้อมใช้งานอย่างไม่มีกำหนดเนื่องจากการอนุญาตโอเพนซอร์ส ผู้ใช้กำลังสำรวจทางเลือกอื่นเช่น mimalloc และ tcmalloc สำหรับโปรเจกต์ในอนาคต นักพัฒนาบางคนเรียกร้องให้มีการเปิดตัวเวอร์ชัน 6.0 ครั้งสุดท้ายพร้อมการตั้งค่าเริ่มต้นที่ทันสมัยก่อนที่โปรเจกต์จะถูกเก็บถาวรอย่างเต็มรูปแบบ
ตัวเลือกการจัดสรรหน่วยความจำอื่น ๆ
- mimalloc: เพิ่งได้รับการนำมาใช้โดย CPython มีประสิทธิภาพเทียบเคียงกับ jemalloc
- tcmalloc: ตัวจัดสรรหน่วยความจำประสิทธิภาพสูงของ Google ต้องใช้ระบบ build Bazel
- snmalloc: ทางเลือกใหม่ที่ชุมชนเริ่มให้ความสนใจ
- glibc malloc: ตัวจัดสรรหน่วยความจำมาตรฐานของระบบที่มีประสิทธิภาพต่ำกว่า
มองไปข้างหน้า
แม้จะสิ้นสุดลง แต่ผลกระทบของ jemalloc ต่อเทคโนโลยีการจัดสรรหน่วยความจำไม่สามารถประเมินค่าได้มากเกินไป ปัจจุบันมันทำหน้าที่เป็นตัวจัดสรรเริ่มต้นบน FreeBSD และขับเคลื่อนโครงสร้างพื้นฐานที่สำคัญสำหรับแอปพลิเคชันนับไม่ถ้วน ตั้งแต่ฐานข้อมูล Redis ไปจนถึงเซิร์ฟเวอร์ Ruby on Rails อิทธิพลของโปรเจกต์ขยายไปเกินการใช้งานโดยตรง ได้สร้างแรงบันดาลใจให้กับตัวจัดสรรหน่วยความจำอื่นๆ มากมายและมีส่วนร่วมในการวิจัยที่มีค่าในสาขานี้
การสิ้นสุดของการพัฒนา jemalloc เน้นย้ำถึงความท้าทายที่กว้างขึ้นในการรักษาโปรเจกต์โครงสร้างพื้นฐานโอเพนซอร์ส แม้ว่าซอฟต์แวร์จะยังคงทำงานตามที่เป็นอยู่ การขาดการพัฒนาอย่างต่อเนื่องหมายความว่ามันอาจค่อยๆ กลายเป็นสิ่งที่ไม่เหมาะสมเมื่อสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์พัฒนาไป ในตอนนี้ ผู้ใช้ที่มีอยู่สามารถพึ่งพาประสิทธิภาพที่พิสูจน์แล้วของ jemalloc ต่อไป ในขณะที่โปรเจกต์ใหม่อาจต้องพิจารณาทางเลือกที่เกิดขึ้นใหม่ในภูมิทัศน์การจัดสรรหน่วยความจำ
อ้างอิง: jemalloc Postmortem