ขณะนี้ GCC มีแบ็กเอนด์สำหรับการคอมไพล์เป็น eBPF

รวมอยู่ในชุดคอมไพเลอร์ GCC บุญธรรม รหัสสำหรับการคอมไพล์โปรแกรมสำหรับล่าม bytecode ที่สร้างไว้ในเคอร์เนล Linux eGMP. ด้วยการใช้การคอมไพล์ JIT รหัสไบต์ของเคอร์เนลจึงถูกแปลทันทีเป็นคำสั่งของเครื่องและดำเนินการด้วยประสิทธิภาพของโค้ดเนทีฟ แพตช์ที่รองรับ eBPF ได้รับการยอมรับ ไปยังสาขาที่มีการพัฒนารุ่น GCC 10

นอกจากแบ็กเอนด์สำหรับการสร้างโค้ดไบต์แล้ว GCC ยังมีพอร์ต libgcc สำหรับ eBPF และเครื่องมือสำหรับการสร้างไฟล์ ELF ที่ทำให้สามารถรันโค้ดในเครื่องเสมือน eBPF โดยใช้ตัวโหลดที่เคอร์เนลจัดเตรียมไว้ แพตช์เพื่อรองรับ eBPF ใน GCC ได้รับการจัดเตรียมโดยวิศวกรจาก Oracle ซึ่งมีอยู่แล้ว ที่ให้ไว้ รองรับ eBPF ใน GNU binutils โปรแกรมจำลองและแพตช์สำหรับ GDB ยังอยู่ระหว่างการพัฒนาซึ่งจะช่วยให้คุณสามารถดีบักโปรแกรม eBPF ได้โดยไม่ต้องโหลดลงในเคอร์เนล

โปรแกรมสำหรับ eBPF สามารถกำหนดได้ในชุดย่อยของภาษา C คอมไพล์และโหลดลงในเคอร์เนล ก่อนดำเนินการ ล่าม eBPF จะตรวจสอบรหัสไบต์เพื่อใช้คำสั่งที่ได้รับอนุญาตและกำหนดกฎเกณฑ์บางอย่างในโค้ด (เช่น ไม่มีการวนซ้ำ)
เริ่มแรกใช้เครื่องมือที่ใช้ LLVM เพื่อคอมไพล์ eBPF บน Linux การสนับสนุน eBPF ใน GCC นั้นน่าสนใจเนื่องจากช่วยให้คุณใช้ชุดเครื่องมือเดียวเพื่อสร้างเคอร์เนล Linux และโปรแกรม eBPF โดยไม่ต้องติดตั้งการขึ้นต่อกันเพิ่มเติม

ในรูปแบบของโปรแกรม eBPF คุณสามารถสร้างตัวจัดการการดำเนินการเครือข่าย กรองการรับส่งข้อมูล จัดการแบนด์วิธ ตรวจสอบระบบ สกัดกั้นการเรียกระบบ ควบคุมการเข้าถึง นับความถี่และเวลาของการดำเนินการ และดำเนินการติดตามโดยใช้ kprobes/uprobes/tracepoints

ที่มา: opennet.ru

เพิ่มความคิดเห็น