Apa itu eBPF?

Wanita sedang menggunakan tablet digital untuk memasuki pusat data

Penyusun

Chrystal R. China

Staff Writer, Automation & ITOps

IBM Think

Michael Goodwin

Staff Editor, Automation & ITOps

IBM Think

Apa itu eBPF?

eBPF adalah teknologi pemrograman berbasis peristiwa yang memungkinkan pengembang untuk menulis program yang efisien, aman, dan non-intrusif yang berjalan langsung di ruang kernel sistem operasi Linux (OS), secara efektif “memperluas” kernel OS.

Kernel dalam sistem operasi merupakan komponen yang sangat stabil, sesuai dengan tujuan desainnya. Kernel mendukung seluruh OS, jadi—berdasarkan desainnya—bisa menjadi rumit dan padat karya untuk mengubah atau memodifikasi. eBPFs menjawab tantangan ekstensibilitas ini dengan memungkinkan pengembang menjalankan program kotak pasir dalam konteks istimewa, seperti kernel OS.

Tumpukan OS dapat dipecah menjadi tiga lapisan logis: lapisan perangkat keras, lapisan kernel dan lapisan pengguna. Kernel layer adalah inti dari sebuah sistem operasi. Ini berada di antara lapisan fisik—yang menampung semua perangkat keras fisik, memori dan komponen penyimpanan OS—dan lapisan pengguna—yang menampung browser web dan aplikasi pada OS.

Aplikasi dan browser di ruang pengguna harus berkomunikasi dengan komponen lapisan fisik untuk menyelesaikan tugas masing-masing, tetapi setiap komponen lapisan fisik memiliki protokol komunikasi dan persyaratan kompatibilitas tertentu. Di sinilah lapisan kernel (atau ruang kernel) berperan. Kernel menafsirkan panggilan sistem dan memungkinkan aplikasi untuk berkomunikasi secara efektif dengan komponen jaringan fisik.

Alat eBPF membantu pengembang lebih mudah memperluas fitur perangkat lunak yang ada saat waktu proses tanpa memodifikasi kode sumber kernel, memuat modul kernel (potongan kode yang dapat dimuat yang dapat memperluas fungsi kernel) atau mengganggu ruang kernel.

Teknologi eBPF mewakili evolusi dari Berkeley Packet Filter (BPF) asli, yang menyediakan cara sederhana untuk memilih dan menganalisis paket jaringan dalam program ruang pengguna. Tetapi di luar pemfilteran paket, program BPF tidak memiliki fleksibilitas untuk menangani 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. Fitur canggih dari program eBPF-dan pendekatan sandbox mereka—memungkinkan pengembang untuk menerapkan proses pemfilteran paket yang disempurnakan, meningkatkan kemampuan pengamatan ruang kernel dan pemantauan, melakukan analisis kinerja kelas atas, dan menegakkan kebijakan keamanan tingkat kernel di pusat data lokal dan lingkungancloud-native.

Apa itu EBPF

Komponen program eBPF

Komponen utama program eBPF adalah:

Bytecode eBPF

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

Penerjemah eBPF/compiler JIT

Teknologi kernel Linux dapat mengubah bytecode eBPF menjadi tindakan yang dapat dieksekusi, tetapi kompiler just-in-time (JIT) menawarkan kinerja yang unggul. Kompiler JIT dapat mengubah bytecode menjadi kode mesin asli untuk platform perangkat keras tertentu sesuai kebutuhan.

Pemuat ruang pengguna

Pemuat ruang pengguna adalah program di ruang pengguna yang memuat kode bytecode eBPF ke dalam kernel, melampirkannya ke hook 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 melalui panggilan sistem, peta eBPF juga dapat digunakan untuk mempertahankan status di antara berbagai iterasi program eBPF.

Pemverifikasi eBPF

Verifikator—sebuah 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. Verifikator juga membantu memastikan bahwa semua jalur data program berakhir dengan sukses.

Titik eBPF

Hook atau kait adalah titik-titik dalam kode kernel di mana program eBPF dapat dilampirkan. Ketika kernel mencapai hook, kernel menjalankan program eBPF terlampir.

Berbagai jenis hook seperti tracepoints, kprobe, uprobe, dan antrian penerima paket jaringan memberikan program eBPF akses data yang luas dan memungkinkan mereka untuk menyelesaikan berbagai operasi. Tracepoints, misalnya, memungkinkan program untuk memeriksa dan mengumpulkan data tentang kernel atau proses lainnya, sementara hook kontrol lalu lintas dapat digunakan untuk memeriksa dan memodifikasi paket jaringan. Dan kprobe dan uprobe memfasilitasi pelacakan dinamis di tingkat kernel dan tingkat pengguna.

Jalur data ekspres (XDP)

XDP adalah jalur data kinerja tinggi yang mempercepat pemrosesan paket di tingkat driver dan memfasilitasi transfer lintas lapisan komunikasi. XDP memungkinkan sistem eBPF untuk membuat keputusan perutean data sebelum paket data mencapai kernel.

Integrasi xDP dengan kernel Linux (pada pertengahan 2010-an) pada akhirnya memungkinkan pengembang untuk menerapkan fungsi load balancing berbasis EBPF yang mampu mengelola lalu lintas data bahkan di pusat data tersibuk sekalipun.

Fungsi pembantu

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

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

Desain 3D bola yang menggelinding di lintasan

Berita + Insight AI terbaru 


Temukan insight dan berita yang dikurasi oleh para pakar tentang AI, cloud, dan lainnya di Buletin Think mingguan. 

Bagaimana cara kerja eBPF?

Umumnya, eBPFs beroperasi sebagai mesin virtual (VM) di dalam kernel Linux, yang bekerja pada arsitektur set instruksi tingkat rendah dan menjalankan 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 fungsi 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 program bytecode dan peta, eBPF akan menjalankan proses verifikasi untuk mengonfirmasi bahwa program aman untuk dijalankan di 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 mengonversi bytecode menjadi kode mesin yang dapat ditindaklanjuti. Namun, eBPF adalah teknologi yang digerakkan oleh peristiwa, sehingga berjalan sebagai respons terhadap titik hook atau peristiwa tertentu di dalam kernel (panggilan sistem, peristiwa jaringan, inisiasi proses, idling CPU, misalnya). Ketika suatu peristiwa terjadi, eBPF menjalankan program bytecode yang sesuai, memungkinkan pengembang untuk memeriksa dan memanipulasi berbagai komponen sistem.

Ketika program eBPF sedang 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 ‘delete’ (hapus)).

IBM Power

Memodernisasi dan mengotomatiskan dengan IBM Power

Joe Cropper, IBM Master Inventor, STSM, IBM Power Hybrid Cloud Platform, akan memandu Anda melalui demo tentang bagaimana IBM Power dapat membantu modernisasi aplikasi Anda.

eBPF vs. BPF

Berkeley Packet Filter (BPF) awalnya dikembangkan sebagai mekanisme untuk pemfilteran paket dalam sistem berbasis Unix, memungkinkan kode tingkat pengguna untuk menentukan filter yang dapat secara efisien menangkap dan memproses paket jaringan di dalam kernel. Oleh karena itu, pendekatan ini meminimalkan kekuatan pemrosesan yang diperlukan untuk mentransfer data yang tidak perlu ke ruang pengguna dan dapat merampingkan dan mengoptimalkan jaringan komputer.

BPF menggunakan agen kernel untuk memproses paket di titik masuk tumpukan jaringan. Setelah program BPF dikembangkan, dimuat ke ruang kernel oleh agen kernel BPF, yang Verify keakuratannya sebelum melampirkannya ke soket yang relevan. Akibatnya, di ruang pengguna, hanya paket yang cocok dengan filter program BPF yang dapat menerima data dari soket tertentu. Fitur pengamanan ini membatasi akses program ke area memori yang diizinkan dan mencegah kerusakan kernel potensial.

EBPF pertama kali muncul pada tahun 2014, di mana pada titik itu mewakili evolusi signifikan dari konsep BPF asli. Selain contoh penggunaan jaringan asli, aplikasi eBPF diperluas untuk menyertakan panggilan sistem dan fungsi lainnya, itulah sebabnya pengembang sering menyebutnya sebagai "Berkeley Packet Filter yang sepenuhnya diperluas."

Salah satu bidang utama di mana eBPF unggul adalah pemantauan kinerja jaringan. Bidang ini memungkinkan tim TI untuk melakukan analisis real-time dan pemecahan masalah dengan memberikan insight terperinci tentang perilaku jaringan, metrik kinerja, dan hambatan. eBPF memainkan peran kunci dalam keamanan jaringan, pemantauan dan penyaringan panggilan sistem dan aktivitas jaringan, menegakkan kebijakan keamanan jaringan dan mendeteksi anomali sistem.

eBPF juga menawarkan pengembang alat yang berharga untuk melacak dan membuat profil aplikasi kernel dan ruang pengguna dan menjalankan tindakan kustom dan transformasi data saat data melintasi kernel, semakin meningkatkan keserbagunaan dan utilitasnya. Karena kemampuan ekspansif ini (yang jauh melampaui pemfilteran paket), eBPF sekarang diakui sebagai istilah yang berdiri sendiri, bukan akronim untuk Filter Paket Berkeley yang diperpanjang.

Kemajuan dalam teknologi eBPF telah mendorong pengembang perangkat 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

Meskipun BPF meletakkan dasar untuk pemfilteran paket yang efisien, eBPF tidak dapat disangkal memperluas cakupannya. eBPF modern menyediakan alat komprehensif untuk observabilitas, kinerja, dan keamanan yang dioptimalkan dalam sistem Linux. Kemampuannya untuk menjalankan program dinamis yang ditentukan pengguna di dalam kernel menciptakan kemungkinan baru untuk pemantauan dan manajemen sistem, menjadikan eBPF alat yang sangat diperlukan bagi pengembang perangkat lunak dan pemrogram komputer.

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 program yang lebih inovatif dalam ekosistem Linux.

eBPF telah memfasilitasi kemajuan dalam:

Jaringan dan penyaringan 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, menerapkan eBPF untuk menyediakan jaringan yang aman, dapat diskalakan, dan dapat diamati untuk klaster Kubernetes dan beban kerja, dan  layanan mikro kontainer lainnya.

eBPF juga membantu tim TI memberlakukan aturan sederhana dan kompleks di awal jalur acara untuk perutean lalu lintas yang lebih efektif, penyaringan konten, dan pencegahan kerugian. Menggunakan logika penerusan paket tingkat kernel, EBPF dapat meminimalkan latensi, merampingkan proses routing, dan memungkinkan respons jaringan keseluruhan yang lebih cepat.

Observabilitas

Karena aplikasi dipecah menjadi layanan mikro, pengamatan ke dalam ruang pengguna dapat menjadi menantang. EBPF memberikan alat pemantauan sudut pandang ruang kernel sehingga pengamatan tetap utuh menyeluruh.

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 tetap unggul, memungkinkan pemantauan dan observabilitas real-time untuk setiap komponen jaringan (dan dependensinya).

Pemantauan real-time

EBPF dapat memantau panggilan sistem, lalu lintas jaringan, dan perilaku sistem di tingkat kernel dan soket untuk melakukan deteksi dan menanggapi potensi ancaman keamanan secara real time. Falco (alat keamanan waktu proses cloud-native) misalnya, menggunakan eBPF untuk mengimplementasikan audit keamanan runtime dan respons insiden, sehingga meningkatkan keamanan sistem secara keseluruhan.

Penyetelan kinerja

Banyak alat bantu eBPF yang dapat melacal panggilan sistem, memantau penggunaan CPU usage, dan melacak penggunaan sumber daya (salah satu contohnya disk I/O). Berbagai fitur ini dapat membantu para pengembang dengan mudah menyelidiki hambatan dalam kinerja sistem, mengimplementaskan protokol debugging dan mengidentifikasi peluang pengoptimalan.

Kebijakan keamanan

EBPF dapat menginstal dan menerapkan kebijakan keamanan tingkat kernel (filter lalu lintas jaringan, firewall, dan pembatasan perilaku, misalnya) dan pemeriksaan keselamatan untuk mencegah aktor jahat dan pengguna yang tidak sah mengakses jaringan.

eBPF dalam arsitektur layanan mikro

Dalam arsitektur layanan mikro, visibilitas ke dalam beban kerja produksi di dalam kontainer sangat penting. Namun, alat observabilitas tradisional mungkin kesulitan untuk mengimbangi layanan mikro yang terkontainerisasi.

Kontainer bersifat fana menurut desain; mereka dibuat saat dibutuhkan dan dihancurkan segera setelah memenuhi tujuannya. Setiap kontainer bertindak seperti host individu, dan dalam lingkungan produksi, volume metrik yang mereka buat dapat dengan mudah membanjiri alat pemantauan aplikasi, jaringan, dan Pemantauan infrastruktur standar. Mesin virtual dapat berperilaku serupa, tetapi sifat kontainer yang bersiklus cepat dapat mempersulit penangkapan telemetri.

Selain itu, kontainer sering diterapkan dalam jumlah besar di lingkungan cloud, membuat visibilitas menjadi lebih menantang.

eBPF, yang berjalan pada tingkat kernel host atau kontainer, memungkinkan pengembang untuk mengumpulkan telemetri dari entitas data berumur pendek. Ini membantu mengintegrasikan visibilitas jaringan, aplikasi, dan infrastruktur ke dalam layanan berbasis EBPF terpadu. Dengan eBPF, pengembang dapat menangkap data tentang proses, penggunaan memori, aktivitas jaringan, dan akses file di tingkat kontainer, bahkan jika kontainer tidak diterapkan di cloud.

eBPF dan Kubernetes

Demikian pula, dalam lingkungan terkontainerisasi berbasis Kubernetes, eBPF menggunakan satu antarmuka dan perangkat tunggal untuk mengumpulkan data dari klaster yang berbeda sehingga tim TI tidak perlu menggunakan agen ruang pengguna individual untuk menyelesaikan tugas pengumpulan data di seluruh jaringan. Alat eBPF dapat berjalan pada node bidang kontrol (untuk pemantauan server API, misalnya) dan memantau node pekerja untuk menghasilkan insight, menghubungkan titik data dan insight dari kedua jenis node untuk pengamatan klaster yang disesuaikan.

Solusi terkait
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloud adalah OpenShift Container Platform (OCP) yang dikelola sepenuhnya.

Jelajahi Red Hat OpenShift
Solusi Penyimpanan Virtual untuk Virtualisasi Server dan Desktop

Virtualisasi penyimpanan yang aman, andal, dan efisien untuk lingkungan VMware dengan IBM Spectrum Virtualize.

Jelajahi solusi penyimpanan
Solusi Infrastruktur Cloud

Temukan solusi infrastruktur cloud yang tepat untuk kebutuhan bisnis Anda dan tingkatkan sumber daya sesuai permintaan.

Jelajahi solusi cloud
Ambil langkah selanjutnya

Red Hat OpenShift on IBM Cloud adalah OpenShift Container Platform (OCP) yang dikelola sepenuhnya.

Jelajahi IBM Red Hat OpenShift Buat akun IBM Cloud gratis Anda