- Setelah metodologi pembuatan kompiler JIT baru (
copy-patch) diperkenalkan di Python 3.13, diputuskan untuk mencoba menerapkannya ke PostgreSQL.
- Memperkenalkan pendekatan baru bernama
pg-copyjit, yang merupakan cara untuk meningkatkan kecepatan server PostgreSQL.
- Semua kode masih bersifat eksperimental, dan perlu ditinjau oleh ahli sebelum digunakan di lingkungan produksi nyata.
Pada awalnya tidak ada JIT, lalu muncullah kompiler JIT LLVM
- Kompilasi JIT berbasis LLVM telah diperkenalkan ke PostgreSQL, tetapi LLVM memiliki bagian yang kurang cocok untuk kompilasi JIT.
- Optimasi LLVM mahal biayanya, dan tanpa itu proses kompilasinya sendiri bisa menjadi tidak berarti.
- Estimasi biaya kueri PostgreSQL tidak berhubungan langsung dengan waktu eksekusi sebenarnya, sehingga banyak pengguna menonaktifkan kompiler JIT.
Pada 2021, copy-and-patch dijelaskan
- Diperlukan cara untuk menghasilkan kode yang cepat dan cukup baik secepat mungkin.
- Metode
copy-patch menghasilkan kode dengan cepat menggunakan stencil (fungsi templat) yang ditulis dalam C.
- Stencil disalin ke area memori baru lalu bagian yang kosong diisi, sehingga bisa langsung melompat ke fungsi yang telah “dikompilasi”.
Menerapkan copy-and-patch ke PostgreSQL
- Membangun mesin JIT baru untuk PostgreSQL tidak terlalu sulit, dan diusulkan agar LLVM dijadikan plugin sehingga kompiler JIT lain juga bisa diperkenalkan.
- Cukup dengan menyediakan satu fungsi
_PG_jit_provider_init dan menginisialisasi tiga callback: compile_expr, release_context, reset_after_error.
- Algoritma
copy-patch sederhana: mencari stencil untuk setiap opcode lalu menambahkannya, kemudian mengisi nilai yang diperlukan ke bagian yang kosong.
Status saat ini
- Berjalan di PostgreSQL 16, dan saat ini hanya mendukung AMD64.
- Pembuatan kode selesai hanya dalam beberapa ratus mikrodetik, sehingga dapat digunakan juga untuk kueri singkat.
- Belum sampai tahap optimasi, tetapi performanya sudah menunjukkan peningkatan dibanding interpreter.
- Opcode yang diimplementasikan masih sedikit, tetapi untuk kueri yang belum didukung, interpreter PostgreSQL akan menjalankannya sebagai pengganti.
Pekerjaan yang masih harus dilakukan...
- Ini masih tahap pembuktian konsep, dan belum mempertimbangkan kemudahan build atau packaging.
- Fokus saat ini adalah mengimplementasikan lebih banyak opcode dan mencari optimasi.
- Porting ke arsitektur lain juga sedang dipertimbangkan secara serius.
Ucapan terima kasih
- Menyampaikan terima kasih kepada tempat kerja saat ini, Entr’ouvert, yang mendukung rekan-rekan agar bisa meluangkan waktu untuk proyek ini.
- Juga berterima kasih kepada teman-teman DBA, dan merekomendasikan untuk mencoba PoWA.
Opini GN⁺
- Artikel ini memperkenalkan pendekatan baru untuk meningkatkan performa server database PostgreSQL. Ini bisa menjadi topik yang menarik bagi administrator database dan pengembang.
- Sebelum menerapkan kode eksperimental ke lingkungan produksi nyata, diperlukan pengujian dan verifikasi yang menyeluruh. Hal ini untuk mencegah risiko seperti kehilangan data atau downtime.
- Dibandingkan kompiler JIT yang sudah ada seperti LLVM, pendekatan
copy-patch memungkinkan pembuatan kode yang lebih cepat sehingga dapat berguna juga untuk kueri singkat.
- Jika teknologi ini diterima luas oleh komunitas PostgreSQL, hal ini bisa membuka babak baru dalam optimasi performa database seiring meluasnya dukungan untuk berbagai arsitektur.
- Dari sudut pandang kritis, ini masih tahap awal, dan bagaimana peningkatan performa tersebut akan terlihat di lingkungan produksi nyata masih memerlukan lebih banyak riset dan pengembangan.
Belum ada komentar.