Beranda Page Title ebpf Apa itu eBPF?
Jelajahi IBM Instana Observability
Desain abstrak mewakili aktivitas sistem operasi
Apa itu eBPF?

Extended Berkeley Packet Filter (eBPF) adalah teknologi pemrograman yang memungkinkan pengembang untuk menulis program yang efisien, aman, dan tidak mengganggu yang berjalan langsung di ruang kernel sistem operasi (OS) Linux.

Karena mereka dapat menjalankan program sandbox dalam konteks khusus, seperti kernel OS, eBPF dapat memperluas fitur peranti lunak yang ada pada saat runtime tanpa memodifikasi kode sumber kernel, memuat modul kernel, atau mengganggu eksekusi program secara keseluruhan. Teknologi eBPF merupakan evolusi dari Berkeley Packet Filter (BPF) yang asli, yang menyediakan cara sederhana untuk memilih dan menganalisis paket jaringan dalam program ruang pengguna. Tetapi di luar penyaringan paket, program BPF tidak memiliki fleksibilitas untuk menangani tugas-tugas yang lebih kompleks di dalam kernel.

Menyadari kebutuhan akan teknologi yang lebih serbaguna, komunitas Linux mengembangkan eBPF, yang dibangun di atas fitur-fitur backend BPF tetapi memperluas kemampuan pemrograman di dalam kernel. Fungsionalitas tingkat lanjut dari program eBPF memungkinkan pengembang untuk mengimplementasikan proses penyaringan paket yang disempurnakan, melakukan analisis kinerja kelas atas, dan menginstal firewall dan protokol debugging di pusat data di lokasi dan lingkungan cloud-native.

Kemajuan dalam teknologi eBPF telah mendorong pengembang peranti lunak untuk memperluas aplikasinya ke semua sistem operasi, sehingga platform berbasis non-Linux dapat memanfaatkan kemampuan pelacakan, jaringan, dan pemantauan yang canggih dari eBPF.1 Bahkan, Yayasan eBPF—perpanjangan dari Linux Foundation yang anggotanya antara lain Google, Meta, Netflix, Microsoft, Intel, dan Isovalent—telah berinvestasi besar-besaran dalam perluasan kompatibilitas OS untuk program-program eBPF, dengan harapan pada akhirnya dapat memperluas kegunaan pemrograman eBPF.2

Minta demo Instana

Dapatkan demo IBM Instana Observability untuk melihat bagaimana Anda bisa mencapai observabilitas dan pemantauan full-stack dalam hitungan menit.

Konten terkait

Berlangganan buletin IBM

Komponen program eBPF

Komponen utama program eBPF adalah:

Kode bytecode eBPF

Program eBPF awalnya ditulis dalam subset C terbatas dan kemudian dikompilasi menjadi bytecode eBPF menggunakan alat seperti LLVM, yang berfungsi sebagai arsitektur back-end eBPF untuk bahasa pemrograman front-end seperti Clang. Bytecode pada dasarnya adalah serangkaian instruksi terbatas yang mematuhi arsitektur set instruksi eBPF dan mencegah kesalahan runtime.

Penerjemah eBPF/kompiler JIT2

Teknologi kernel Linux mampu menerjemahkan bytecode eBPF menjadi tindakan yang dapat dieksekusi, tetapi kompiler just-in-time (JIT) menawarkan kinerja yang unggul. Kompiler JIT dapat menerjemahkan bytecode ke dalam kode mesin asli untuk platform perangkat keras tertentu dengan cepat. 

Pemuat ruang pengguna

Pemuat ruang pengguna adalah program di ruang pengguna yang memuat kode bytecode eBPF ke dalam kernel, melampirkannya ke pengait yang sesuai dan mengelola peta eBPF yang terkait. Contoh pemuat ruang pengguna termasuk alat seperti BPF Compiler Collection (BCC) dan bpftrace.   

peta eBPF

Peta eBPF adalah struktur data dengan pasangan kunci-nilai dan akses baca-tulis yang menyediakan ruang penyimpanan bersama dan memfasilitasi interaksi antara program kernel eBPF dan aplikasi ruang pengguna. Dibuat dan dikelola menggunakan panggilan sistem, peta eBPF juga dapat digunakan untuk mempertahankan status di antara berbagai iterasi program eBPF.

Pemverifikasi eBPF

Verifikator—komponen penting dari sistem eBPF—memeriksa bytecode sebelum dimuat ke dalam kernel untuk memastikan program tidak mengandung operasi yang berbahaya, seperti loop tak terbatas, instruksi ilegal, atau akses memori di luar batas. Hal ini juga memastikan bahwa semua jalur data dari program berakhir dengan sukses.

Pengait eBPF

Hooks adalah titik-titik dalam kode kernel di mana program eBPF dapat dilampirkan. Ketika kernel mencapai hook, kernel akan mengeksekusi program eBPF yang dilampirkan.

Berbagai jenis hook seperti tracepoint, kprobe, dan antrean penerimaan paket jaringan memberikan program eBPF akses data yang luas dan memungkinkannya melakukan berbagai operasi. Tracepoints, misalnya, memungkinkan program untuk memeriksa dan mengumpulkan data tentang kernel atau proses lainnya, sementara kait kontrol lalu lintas dapat digunakan untuk memeriksa dan memodifikasi paket jaringan.

Fungsi pembantu

Karena eBPF tidak dapat menghasilkan fungsi sembarang dan harus menjaga kompatibilitas dengan setiap versi kernel yang memungkinkan, terkadang set instruksi eBPF dasar tidak cukup bernuansa untuk melakukan operasi tingkat lanjut. Fungsi pembantu menjembatani kesenjangan ini.

Fungsi pembantu—sekumpulan fungsi kernel berbasis APIyang telah ditentukan sebelumnya yang dapat dipanggil oleh eBPF dari dalam sistem—menyediakan cara bagi program eBPF untuk melakukan operasi yang lebih kompleks (seperti mendapatkan waktu dan tanggal saat ini atau menghasilkan angka acak) yang tidak secara langsung didukung oleh set instruksi.  

Bagaimana cara kerja eBPF?

Umumnya, eBPF beroperasi sebagai virtual machines (VM) di dalam kernel Linux, yang bekerja pada arsitektur set instruksi tingkat rendah dan mengeksekusi bytecode eBPF. Namun, proses yang kompleks dalam menjalankan program eBPF cenderung mengikuti langkah-langkah utama tertentu.

Pengembang pertama-tama menulis program eBPF dan mengkompilasi bytecode. Tujuan program akan menentukan jenis kode yang sesuai. Misalnya, jika sebuah tim ingin memantau penggunaan CPU, mereka akan menulis kode yang menyertakan fungsionalitas untuk menangkap metrik penggunaan.

Setelah kompiler eBPF mengubah kode C tingkat tinggi menjadi kode bytecode tingkat rendah, pemuat ruang pengguna akan menghasilkan panggilan sistem BPF untuk memuat program ke dalam kernel. Loader juga bertanggung jawab untuk mengatasi kesalahan dan menyiapkan peta eBPF yang dibutuhkan program.

Dengan adanya bytecode dan peta program, eBPF akan menjalankan proses verifikasi untuk memastikan program aman untuk dieksekusi di dalam kernel. Jika dianggap tidak aman, panggilan sistem untuk memuat program akan gagal, dan program pemuat akan menerima pesan kesalahan. Jika program melewati verifikasi, itu diizinkan untuk dijalankan.

Dengan menggunakan interpreter atau kompiler JIT, eBPF akan menerjemahkan bytecode menjadi kode mesin yang dapat ditindaklanjuti. Namun, eBPF adalah teknologi event-driven, sehingga hanya akan berjalan sebagai respons terhadap titik hook atau event tertentu di dalam kernel (misalnya, panggilan sistem, event jaringan, inisiasi proses, idling CPU, dll.). Ketika suatu peristiwa terjadi, eBPF akan menjalankan program bytecode yang sesuai, memungkinkan pengembang untuk memeriksa dan memanipulasi berbagai komponen sistem.

Setelah program eBPF berjalan, pengembang dapat berinteraksi dengan program ini dari ruang pengguna menggunakan peta eBPF. Sebagai contoh, aplikasi dapat memeriksa peta secara berkala untuk mengumpulkan data dari program eBPF, atau memperbarui peta untuk mengubah perilaku program.

Membongkar program adalah langkah terakhir dari sebagian besar proses eksekusi eBPF. Ketika eBPF telah menyelesaikan tugasnya, loader dapat menggunakan panggilan sistem BPF lagi untuk membongkarnya dari kernel, di mana pada saat itu eBPF berhenti berjalan dan membebaskan sumber daya yang terkait. Proses pembongkaran juga dapat mencakup iterasi pada peta eBPF yang tidak lagi dibutuhkan oleh tim untuk membebaskan elemen-elemen individual yang berguna, dan kemudian menghapus peta itu sendiri (menggunakan syscall "hapus").

Contoh penggunaan dan manfaat eBPF

Teknologi eBPF telah menjadi landasan sistem Linux modern, memungkinkan kontrol yang baik atas kernel Linux dan memberdayakan perusahaan untuk membangun solusi yang lebih inovatif dalam ekosistem Linux.

eBPF telah memfasilitasi kemajuan dalam: 

Jaringan

eBPF memungkinkan pengembang untuk menginstal fitur pemrosesan paket yang lebih cepat dan lebih disesuaikan, proses penyeimbangan beban, skrip profil aplikasi, dan praktik pemantauan jaringan. Platform sumber terbuka, seperti Cilium, memanfaatkan eBPF untuk menyediakan jaringan yang aman dan dapat diskalakan untuk cluster dan beban kerja Kubernetes, serta  layanan mikro dalam kontainer lainnya. Selain itu, dengan memanfaatkan logika penerusan paket di tingkat kernel, eBPF dapat merampingkan proses perutean dan memungkinkan respons jaringan yang lebih cepat secara keseluruhan.

Observabilitas

eBPF memungkinkan pengembang melakukan instrumen pada kernel dan aplikasi ruang pengguna untuk mengumpulkan data dan metrik kinerja yang terperinci tanpa memengaruhi kinerja sistem secara signifikan. Kemampuan ini membantu organisasi untuk tetap berada di depan, memungkinkan pemantauan dan observabilitas secara real-time.

Keamanan

eBPF dapat memonitor panggilan sistem, lalu lintas jaringan, dan perilaku sistem untuk mendeteksi dan merespons potensi ancaman keamanan secara real time. Solusi TI seperti Falco, misalnya, menggunakan eBPF untuk mengimplementasikan audit keamanan runtime dan respons insiden, sehingga meningkatkan keamanan sistem secara keseluruhan.

Penyetelan kinerja

Dengan menelusuri panggilan sistem, memantau pemanfaatan CPU, dan melacak pemanfaatan sumber daya (seperti disk I/O), eBPF membantu pengembang untuk lebih mudah menyelidiki kemacetan dalam kinerja sistem dan mengidentifikasi peluang untuk pengoptimalan.

Solusi terkait
IBM Instana Observability

IBM Instana mendemokratisasikan observabilitas dengan memberikan solusi yang dapat digunakan siapa pun di DevOps, SRE, platform, ITOps, dan pengembangan untuk mendapatkan data yang diinginkan dengan konteks yang dibutuhkan. Dibangun khusus untuk cloud native namun tidak bergantung pada teknologi, platform ini secara otomatis dan terus menerus menyediakan data dengan ketelitian tinggi—granularitas 1 detik dan pelacakan menyeluruh—dengan konteks ketergantungan logis dan fisik di seluruh seluler, web, aplikasi, dan infrastruktur.

Jelajahi Instana Minta demo Instana

IBM Turbonomic

Platform pengoptimalan biaya hybrid cloud IBM Turbonomic memungkinkan Anda untuk terus mengotomatiskan tindakan penting secara real time yang secara proaktif memberikan penggunaan sumber daya komputasi, penyimpanan, dan jaringan yang paling efisien ke aplikasi Anda di setiap lapisan tumpukan. 

Jelajahi Turbonomic Coba Turbonomic secara gratis
Ambil langkah selanjutnya

IBM Instana menyediakan observabilitas real-time yang dapat digunakan oleh semua orang dan siapa saja. Ini memberikan time to value yang cepat sambil memverifikasi bahwa strategi observabilitas Anda dapat mengikuti kompleksitas dinamis lingkungan saat ini dan masa depan. Dari seluler hingga mainframe, Instana mendukung lebih dari 250 teknologi dan terus berkembang. 

Jelajahi IBM Instana Pesan demo langsung
Catatan kaki

Foundation Mengusulkan Memajukan Adopsi eBPF di Berbagai OS, (tautan berada di luar ibm.com)" DevOps.com, 21 Agustus 2021

Kemajuan eBPF Terbaru Merupakan Pertanda Perubahan Besar pada TI (tautan berada di luar ibm.com), DevOps.com, 13 September 2023