มีการนำเสนอไลบรารี Aya รุ่นแรกซึ่งช่วยให้คุณสามารถสร้างตัวจัดการ eBPF ในภาษา Rust ที่ทำงานภายในเคอร์เนล Linux ในเครื่องเสมือนพิเศษที่มี JIT ไม่เหมือนกับเครื่องมือพัฒนา eBPF อื่นๆ Aya ไม่ได้ใช้ libbpf และคอมไพเลอร์ bcc แต่นำเสนอการใช้งานของตัวเองที่เขียนด้วยภาษา Rust ซึ่งใช้แพ็คเกจ libc crate เพื่อเข้าถึงการเรียกระบบเคอร์เนลโดยตรง การสร้าง Aya ไม่จำเป็นต้องใช้เครื่องมือภาษา C หรือไฟล์ส่วนหัวของเคอร์เนล รหัสไลบรารีถูกแจกจ่ายภายใต้ลิขสิทธิ์ MIT และ Apache 2.0
คุณสมบัติหลัก:
- รองรับ BTF (รูปแบบประเภท BPF) ซึ่งให้ข้อมูลประเภทในรหัสเทียม BPF สำหรับการตรวจสอบประเภทและการแมปกับประเภทที่เคอร์เนลปัจจุบันให้มา การใช้ BTF ทำให้สามารถสร้างตัวจัดการ eBPF สากลที่สามารถใช้งานได้โดยไม่ต้องคอมไพล์ใหม่กับเคอร์เนล Linux เวอร์ชันต่างๆ
- รองรับการเรียก “bpf-to-bpf” ตัวแปรโกลบอลและตัวเริ่มต้น ซึ่งช่วยให้คุณออกแบบโปรแกรมสำหรับ eBPF ในลักษณะเดียวกันกับโปรแกรมปกติที่ใช้ aya เป็นรันไทม์ที่กำหนดฟังก์ชันใหม่โดยคำนึงถึงงานใน eBPF
- รองรับเคอร์เนลประเภทต่างๆ รวมถึงอาร์เรย์ปกติ แผนที่แฮช สแต็ก คิว ติดตามสแต็ก รวมถึงซ็อกเก็ตและโครงสร้างการติดตามประสิทธิภาพ
- ความสามารถในการสร้างโปรแกรม eBTF ประเภทต่างๆ รวมถึงโปรแกรมสำหรับการกรองและจัดการการรับส่งข้อมูล ตัวจัดการ cgroup และการดำเนินการซ็อกเก็ตต่างๆ โปรแกรม XDP
- รองรับแพลตฟอร์มสำหรับการประมวลผลคำขอแบบอะซิงโครนัสในโหมดไม่บล็อก tokio และ async-std
- การประกอบที่รวดเร็ว โดยไม่ต้องเชื่อมต่อกับชุดประกอบเคอร์เนลและไฟล์ส่วนหัวของเคอร์เนล
โครงการนี้ยังถือเป็นการทดลอง - API ยังไม่เสถียรและพัฒนาต่อไป นอกจากนี้โอกาสที่วางแผนไว้ทั้งหมดยังไม่เกิดขึ้นจริง ภายในสิ้นปีนี้ นักพัฒนาคาดว่าจะทำให้ฟังก์ชันการทำงานของ Aya มีความเท่าเทียมกับ libbpf และในเดือนมกราคม 2022 จะสร้างเวอร์ชันเสถียรรุ่นแรก นอกจากนี้ยังมีแผนที่จะรวมส่วนของ Aya ที่จำเป็นในการเขียนโค้ด Rust สำหรับเคอร์เนล Linux เข้ากับส่วนประกอบพื้นที่ผู้ใช้ที่ใช้ในการโหลด แนบ และโต้ตอบกับโปรแกรม eBPF
ขอให้เราระลึกว่า eBPF เป็นล่ามโค้ดไบต์ที่สร้างไว้ในเคอร์เนล Linux ซึ่งช่วยให้คุณสามารถสร้างตัวจัดการการดำเนินงานเครือข่าย ตรวจสอบการทำงานของระบบ สกัดกั้นการเรียกของระบบ ควบคุมการเข้าถึง ประมวลผลเหตุการณ์ในขณะที่ยังคงรักษาจังหวะเวลา คำนวณความถี่และเวลาของการดำเนินการ ดำเนินการ ติดตามโดยใช้ kprobes/uprobes /tracepoints ด้วยการใช้การคอมไพล์ JIT รหัสไบต์จึงถูกแปลทันทีเป็นคำสั่งของเครื่องและดำเนินการด้วยประสิทธิภาพของโค้ดเนทีฟ XDP จัดเตรียมเครื่องมือสำหรับการรันโปรแกรม BPF ในระดับไดรเวอร์เครือข่าย พร้อมความสามารถในการเข้าถึงแพ็กเก็ตบัฟเฟอร์ DMA ได้โดยตรง ซึ่งช่วยให้คุณสร้างโปรเซสเซอร์ประสิทธิภาพสูงสำหรับการทำงานภายใต้ภาระเครือข่ายจำนวนมาก
ที่มา: opennet.ru