- jemalloc, allocator memori berperforma tinggi, telah menjadi komponen fondasi yang berperan sebagai infrastruktur inti dalam stack software Meta bersama kernel Linux dan compiler
- Dalam beberapa tahun terakhir, pengembangan jemalloc perlahan menjauh dari prinsip-prinsip rekayasa inti yang sebelumnya memandunya, sehingga utang teknis menumpuk dan laju kemajuan melambat
- Dengan menerima masukan komunitas dan melalui diskusi dengan para kontributor termasuk pendiri proyek Jason Evans, repositori open source asli diaktifkan kembali (unarchived)
- Ke depan, fokus akan diarahkan pada penanganan utang teknis, peningkatan Huge-Page allocator, peningkatan efisiensi memori, dan optimasi AArch64
- Meta menegaskan kembali stewardship jangka panjang untuk jemalloc dan beralih ke arah pengembangan proyek melalui kolaborasi dengan komunitas
Posisi dan pentingnya jemalloc
- jemalloc adalah allocator memori berperforma tinggi, komponen yang secara konsisten memberikan leverage tinggi dalam stack software Meta
- jemalloc terus beradaptasi dengan perubahan hardware dan software di lapisan atas, serta berkontribusi pada stabilitas dan performa infrastruktur Meta bersama kernel Linux dan compiler
Penyimpangan dari prinsip dan refleksi
- Komponen software fondasi membutuhkan tingkat ketelitian tertinggi dalam menyeimbangkan pragmatisme dan prinsip
- Karena leverage tinggi yang diberikan jemalloc, selalu ada godaan untuk mengejar keuntungan jangka pendek, dan untuk menolaknya dibutuhkan disiplin diri organisasi yang kuat
- Dalam beberapa tahun terakhir terjadi penyimpangan bertahap dari prinsip-prinsip rekayasa inti yang memandu pengembangan jemalloc
- Beberapa keputusan memberi manfaat langsung, tetapi utang teknis yang dihasilkan justru menghambat kemajuan
- Masukan komunitas diterima dengan serius, dan dilakukan pertemuan dengan anggota komunitas termasuk pendiri proyek Jason Evans
- Ada refleksi mendalam tentang dampak stewardship terhadap kesehatan jangka panjang jemalloc, sekaligus berbagi perubahan pendekatan
- Pekerjaan untuk menghapus utang teknis dan membangun ulang roadmap jangka panjang bagi jemalloc telah dimulai
Babak baru: repositori tidak lagi diarsipkan dan rencana ke depan
- Hasil dialog dengan komunitas membuat repositori open source jemalloc asli diaktifkan kembali (unarchived)
- Meta dapat terus menjalankan peran sebagai steward proyek, dengan fokus pada pengurangan beban pemeliharaan dan modernisasi codebase
- Penanganan utang teknis: menjaga agar tetap efisien, andal, dan mudah digunakan bagi semua pengguna melalui refactoring dan perbaikan
- Huge-Page allocator (HPA): memanfaatkan Transparent Hugepages (THP) dengan lebih baik untuk meningkatkan efisiensi CPU
- Efisiensi memori: mengoptimalkan efisiensi memori melalui perbaikan mekanisme packing, caching, dan purging
- Optimasi AArch64: memastikan performa yang baik secara default pada platform ARM64
Memperkuat kolaborasi dengan komunitas
- Meta menekankan membangun kepercayaan melalui tindakan dan menargetkan perkembangan jemalloc yang sehat
- Meta menyambut masukan dan partisipasi dari komunitas, serta berharap dapat membangun masa depan jemalloc bersama
- Akan mendorong kolaborasi dan perkembangan yang berkelanjutan di dalam ekosistem open source
1 komentar
Komentar Hacker News
Saat masih bekerja di Facebook, saya pernah memelihara patch kernel untuk memperbaiki mekanisme purging di jemalloc
Patch itu tidak populer di komunitas kernel maupun keamanan, tetapi cukup efisien dalam benchmark
Masalahnya, saat memori dialokasikan ulang ke thread lain, terjadi zeroing yang memengaruhi lokalitas cache dan performa
Itu sebenarnya tindakan yang tidak perlu saat memori didaur ulang dalam domain keamanan yang sama, tetapi sulit mencapai kesepakatan tentang sejauh mana ‘domain keamanan’ harus didefinisikan
Diskusi terkait ada di milis Linux Kernel
Di HHVM kami melakukan benchmark yang luas sebelum dan sesudah patch itu diterapkan, tetapi di level sistem tidak ada perbedaan yang signifikan secara statistik
Mungkin ada perbaikan di beberapa microbenchmark, tetapi karena tidak memengaruhi performa sistem secara keseluruhan, patch itu dikeluarkan dari kernel
Baru-baru ini saya memakai mimalloc dari Microsoft lewat LD_PRELOAD untuk memanfaatkan huge page 1GB
Saya mendapat peningkatan performa sekitar 20% pada program yang intensif memori
Agak terasa aneh meningkatkan performa di Linux dengan memakai library open source dari MS
Saya merasa ranah malloc butuh lebih banyak persaingan
Aplikasi-aplikasinya ditulis dalam Rust, dan sebagian besar ditautkan secara statis
Misalnya pada app1, dibanding glibc, tcmalloc mengurangi RSS 35% dan memangkas waktu proses 30%
Seluruh hasil diuji berdasarkan repositori tcmalloc
Bahkan Turbo Pascal menyediakan API untuk mendefinisikan memory allocator sendiri
Pada akhirnya, pendekatan “one size fits all” memang sudah lama punya keterbatasan
Untuk tiap request dibuat satu pool, lalu saat request selesai seluruhnya dibebaskan sekaligus
Saya rasa malloc masih punya banyak ruang untuk berevolusi ke arah seperti ini
Jika pola alokasinya sederhana, hasilnya bahkan bisa lebih baik daripada malloc pihak ketiga
Banyak orang menganggap malloc seperti kotak hitam ajaib, padahal sebenarnya tidak sehebat itu
Tim kami bermigrasi dari glibc malloc ke jemalloc dua tahun lalu
Penggunaan memori pada layanan Python turun 15~20%
Namun di lingkungan container, pengaturan oversize_threshold sangat penting — kalau salah setel bisa memicu OOM
Saya penasaran apakah ada benchmark yang membandingkan jemalloc dan mimalloc pada layanan yang berjalan lama
Sebagai bacaan terkait, saya merekomendasikan Jemalloc Postmortem dan
Jemalloc Repositories Are Archived
Saya penasaran apakah perubahan kali ini ada hubungannya dengan kelangkaan memori global
Bisa saja hitungannya menjadi seperti “mengganti memory allocator menghemat jutaan dolar per tahun”
Peningkatan efisiensi 0.1% saja bisa menghemat 100 ribu dolar per bulan
Sumber penghematan utamanya adalah biaya pendinginan(HVAC) dan berkurangnya pembelian server
Sekarang penghematan memori juga jadi isu besar, tetapi dulu belum begitu
Kalau berdampak ke ribuan server, perbaikan kecil pun akan terlihat besar angkanya
Budaya perbaikan terukur secara kuantitatif seperti ini sudah mengakar
Lebih cepat 10% saja bisa memberi keunggulan dalam persaingan LLM
Insentif untuk meningkatkan performa sangat besar
Saat mengerjakan pemrograman level rendah di Australia, saya terkena PHK
Saya sangat suka memecahkan masalah seperti ini, tetapi pasar lokal kebanyakan hanya seputar React CRUD, jadi cukup disayangkan
Dalam proyek startup yang didanai World Bank, kami pernah menerapkan Ruby + jemalloc ke produksi
Kecepatan dan efisiensi memorinya meningkat jelas sehingga biaya AWS turun cukup besar
Itu terjadi 8 tahun lalu, jadi saya heran mengapa jemalloc masih belum menjadi standar
Mengubah sistem yang sudah berjalan memang tidak mudah, bahkan jika manfaatnya jelas
Ada juga kasus menggunakan jemalloc untuk melacak penyebab kebocoran memori
Lihat artikel blog teknis GOV.UK
Meta telah menggabungkan banyak pekerjaan yang sebelumnya dikerjakan di fork internal mereka
Bisa dilihat di PR #2863
Saya penasaran apakah ada materi yang merangkum linimasa atau sejarah jemalloc
Ini proyek open source, jadi saya bertanya-tanya kenapa Meta memegang kendali utamanya
Lihat blog Jemalloc Postmortem
Dua sisanya juga mungkin bekerja di Meta secara tidak terbuka