Một thư viện Python mới có tên Python-BPF đã xuất hiện, hứa hẹn cho phép các nhà phát triển viết chương trình eBPF trực tiếp bằng Python thay vì nhúng mã C vào chuỗi. Tuy nhiên, dự án này đã thu hút sự giám sát kỹ thuật từ cộng đồng nhà phát triển về các chi tiết triển khai và tính rõ ràng của tài liệu.
Cài đặt và Trạng thái:
- Có sẵn thông qua
pip install pythonbpf
- Trạng thái dự án: Chưa sẵn sàng cho sản xuất
- Nguồn gốc: Dự án hackathon
- Tính khả dụng: Mã nguồn mở trên GitHub và PyPI
Cộng đồng đặt ra những lo ngại về triển khai
Các nhà phát triển đang đặt câu hỏi về giải thích kỹ thuật được cung cấp bởi những người tạo ra Python-BPF . Tài liệu của dự án mô tả một quy trình biên dịch bốn bước, nhưng các thành viên cộng đồng thấy lời giải thích này gây nhầm lẫn và có thể không chính xác. Một nhà phát triển chỉ ra rằng bước 3 và 4 dường như mô tả cùng một quy trình - chuyển đổi LLVM IR thành BPF bytecode - điều này đặt ra câu hỏi về việc triển khai thực tế.
Phần How it works under the hood đặt ra nhiều câu hỏi hơn là trả lời. Sự khác biệt giữa bước 3 và bước 4 là gì? Như được mô tả, bước 3 chuyển từ LLVM IR sang BPF (thông qua llc), và bước 4 - chuyển từ LLVM IR sang eBPF bytecode? Điều đó vô nghĩa.
Sự nhầm lẫn xuất phát từ tuyên bố của dự án rằng nó sử dụng cả trình biên dịch LLC và LLVM backend trong các bước riêng biệt, trong khi những thứ này thường hoạt động cùng nhau trong một giai đoạn biên dịch duy nhất.
Quy trình biên dịch (như đã mô tả):
- Tạo AST sử dụng module
ast
của Python - Phát sinh LLVM IR sử dụng livnite của Numba
- Biên dịch LLVM IR sử dụng
llc -march=bpf -O2
- Tạo tệp đối tượng eBPF với bytecode
Vấn đề về tài liệu và khả năng tiếp cận
Ngoài những lo ngại kỹ thuật, phản hồi từ cộng đồng làm nổi bật các vấn đề về trình bày. Một số nhà phát triển lưu ý rằng dự án thiếu giải thích thích hợp về eBPF thực sự là gì và tại sao ai đó muốn sử dụng nó. Tài liệu giả định rằng người đọc đã hiểu về công nghệ Berkeley Packet Filter và các ứng dụng của nó trong lập trình kernel.
Những người chỉ trích cũng chỉ ra các vấn đề định dạng cơ bản, chẳng hạn như đặt phần tóm tắt ở cuối thay vì ở đầu, khiến người đọc khó hiểu nhanh mục đích của dự án.
So sánh với các giải pháp hiện có
Cuộc thảo luận tiết lộ rằng Python-BPF không phải là nỗ lực duy nhất để đưa eBPF đến các ngôn ngữ cấp cao. Các thành viên cộng đồng đã chia sẻ ví dụ về các dự án tương tự trong các môi trường lập trình khác, bao gồm các triển khai Java và một dự án nghiên cứu trước đây của Facebook Research có tên py2bpf đã thực hiện một cách tiếp cận khác bằng cách dịch Python bytecode trực tiếp thành các lệnh BPF .
Những so sánh này cho thấy rằng mặc dù cách tiếp cận dựa trên decorator của Python-BPF thú vị, nhưng thách thức biên dịch các ngôn ngữ cấp cao sang eBPF đã được giải quyết trước đây với các mức độ thành công khác nhau.
Các tính năng hiện tại của Python-BPF:
- Hỗ trợ luồng điều khiển
- Hash maps (các loại map khác đang được lên kế hoạch)
- Các phép toán nhị phân
- Các hàm hỗ trợ để thao tác với map
- Các hàm in trace kernel
- Các hàm hỗ trợ timestamp
- Các biến toàn cục (được triển khai dưới dạng maps)
Lo ngại về sự sẵn sàng cho sản xuất
Chính những người tạo ra Python-BPF cũng thừa nhận những hạn chế đáng kể, mô tả mã của họ là hacky at best with more bugs than I could count vì nó bắt nguồn từ một dự án hackathon. Sự thừa nhận này, kết hợp với các câu hỏi kỹ thuật từ cộng đồng, đặt ra lo ngại về sự sẵn sàng của dự án cho công việc phát triển nghiêm túc.
Mặc dù khái niệm viết chương trình eBPF bằng Python thuần túy sử dụng decorator cho thấy tiềm năng, việc triển khai hiện tại dường như cần công việc đáng kể trước khi có thể cạnh tranh với các công cụ đã được thiết lập như BCC hoặc phát triển C gốc cho lập trình eBPF .
eBPF (extended Berkeley Packet Filter) là một công nghệ cho phép các chương trình nhỏ chạy trong kernel Linux để phản hồi các sự kiện, thường được sử dụng cho các ứng dụng giám sát, mạng và bảo mật.