Sebuah perpustakaan Python baharu yang dipanggil Python-BPF telah muncul, berjanji untuk membolehkan pembangun menulis program eBPF secara terus dalam Python dan bukannya membenamkan kod C dalam rentetan. Walau bagaimanapun, projek ini sudah menarik perhatian teknikal daripada komuniti pembangun mengenai butiran pelaksanaan dan kejelasan dokumentasinya.
Pemasangan dan Status:
- Tersedia melalui
pip install pythonbpf
- Status projek: Belum bersedia untuk pengeluaran
- Asal usul: Projek hackathon
- Ketersediaan: Sumber terbuka di GitHub dan PyPI
Komuniti Membangkitkan Kebimbangan Pelaksanaan
Pembangun mempersoalkan penjelasan teknikal yang diberikan oleh pencipta Python-BPF . Dokumentasi projek ini menerangkan proses kompilasi empat langkah, tetapi ahli komuniti mendapati penjelasan itu mengelirukan dan berpotensi tidak tepat. Seorang pembangun menegaskan bahawa langkah 3 dan 4 nampaknya menerangkan proses yang sama - menukar LLVM IR kepada BPF bytecode - yang menimbulkan persoalan tentang pelaksanaan sebenar.
Bahagian How it works under the hood menimbulkan lebih banyak persoalan daripada jawapan yang diberikan. Apakah perbezaan antara langkah 3 dan langkah 4? Seperti yang diterangkan, langkah 3 pergi dari LLVM IR kepada BPF (melalui llc), dan langkah 4 - pergi dari LLVM IR kepada eBPF bytecode? Itu tidak masuk akal.
Kekeliruan ini berpunca daripada dakwaan projek bahawa ia menggunakan kedua-dua pengkompil LLC dan LLVM backend dalam langkah berasingan, sedangkan ini biasanya berfungsi bersama dalam satu fasa kompilasi.
Proses Kompilasi (seperti yang diterangkan):
- Jana AST menggunakan modul
ast
Python - Keluarkan LLVM IR menggunakan livnite Numba
- Kompil LLVM IR menggunakan
llc -march=bpf -O2
- Jana fail objek eBPF dengan bytecode
Isu Dokumentasi dan Kebolehcapaian
Selain daripada kebimbangan teknikal, maklum balas komuniti menyerlahkan masalah persembahan. Beberapa pembangun menyatakan bahawa projek ini tidak mempunyai penjelasan yang betul tentang apa itu eBPF sebenarnya dan mengapa seseorang mahu menggunakannya. Dokumentasi ini mengandaikan pembaca sudah memahami teknologi Berkeley Packet Filter dan aplikasinya dalam pengaturcaraan kernel.
Pengkritik juga menegaskan isu pemformatan asas, seperti meletakkan ringkasan di akhir dan bukannya di permulaan, menjadikannya lebih sukar bagi pembaca untuk memahami tujuan projek dengan cepat.
Perbandingan dengan Penyelesaian Sedia Ada
Perbincangan mendedahkan bahawa Python-BPF bukan satu-satunya percubaan untuk membawa eBPF kepada bahasa peringkat tinggi. Ahli komuniti berkongsi contoh projek serupa dalam persekitaran pengaturcaraan lain, termasuk pelaksanaan Java dan projek Facebook Research sebelum ini yang dipanggil py2bpf yang mengambil pendekatan berbeza dengan menterjemah Python bytecode terus kepada arahan BPF .
Perbandingan ini menunjukkan bahawa walaupun pendekatan berasaskan decorator Python-BPF menarik, cabaran untuk mengkompil bahasa peringkat tinggi kepada eBPF telah ditangani sebelum ini dengan tahap kejayaan yang berbeza-beza.
Ciri-ciri Semasa Python-BPF :
- Sokongan aliran kawalan
- Peta hash (jenis peta lain dirancang)
- Operasi binari
- Fungsi pembantu untuk manipulasi peta
- Fungsi pencetakan jejak kernel
- Pembantu cap masa
- Pembolehubah global (dilaksanakan sebagai peta)
Kebimbangan Kesediaan Pengeluaran
Pencipta Python-BPF sendiri mengakui batasan yang ketara, menerangkan kod mereka sebagai hacky at best with more bugs than I could count kerana ia berasal sebagai projek hackathon. Pengakuan ini, digabungkan dengan persoalan teknikal komuniti, menimbulkan kebimbangan tentang kesediaan projek untuk kerja pembangunan yang serius.
Walaupun konsep menulis program eBPF dalam Python tulen menggunakan decorator menunjukkan janji, pelaksanaan semasa nampaknya memerlukan kerja yang besar sebelum ia boleh bersaing dengan alat yang telah ditetapkan seperti BCC atau pembangunan C asli untuk pengaturcaraan eBPF .
eBPF (extended Berkeley Packet Filter) adalah teknologi yang membolehkan program kecil berjalan dalam kernel Linux sebagai tindak balas kepada peristiwa, biasanya digunakan untuk aplikasi pemantauan, rangkaian dan keselamatan.