แนะนำไลบรารี Aya สำหรับสร้างตัวจัดการ eBPF ใน Rust

มีการนำเสนอไลบรารี 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

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