4 poin oleh GN⁺ 2024-03-20 | Belum ada komentar. | Bagikan ke WhatsApp
  • 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.

Belum ada komentar.