การพัฒนา jemalloc สิ้นสุดลงหลังจาก 20 ปี ขณะที่ Meta เปลี่ยนโฟกัสจากเทคโนโลยีหลัก

ทีมบรรณาธิการ BigGo
การพัฒนา jemalloc สิ้นสุดลงหลังจาก 20 ปี ขณะที่ Meta เปลี่ยนโฟกัสจากเทคโนโลยีหลัก

หลังจากสองทศวรรษของการพัฒนาและการนำไปใช้อย่างแพร่หลายในแพลตฟอร์มหลักต่างๆ ตัวจัดสรรหน่วยความจำ 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