Aya ไลบรารี่แรกที่สร้างตัวควบคุม eBPF ใน Rust

Linus torvalds เช่นเดียวกับนักพัฒนาจำนวนมาก เคอร์เนลและการแจกแจงแบบต่างๆ ได้แสดงความชื่นชอบเกี่ยวกับ Rust และมากกว่าหนึ่งครั้งได้มีการนำเสนอปัญหาของการใช้งานไดรเวอร์ในภาษาการเขียนโปรแกรมนี้บน Linux Kernel

และในเรื่องนี้ก็มีผลงานต่างๆ ออกมาแล้ว ซึ่ง เราได้กล่าวถึงที่นี่ในบล็อก และเราสามารถพูดถึง เช่น การทดลอง ที่ประสบความสำเร็จ จากชุดยูทิลิตี้สำรอง coreutils เขียนใหม่ใน Rust re (ซึ่งรวมถึงยูทิลิตี้เช่น sort, cat, chmod, chown, chroot, cp, date, dd, echo, ชื่อโฮสต์, id, ln และ ls)

จากสิ่งนี้ Linus torvalds ไม่ได้ให้ความสำคัญกับความคิดริเริ่มนี้อย่างเต็มที่และได้แสดงประเด็นเชิงลบ (คุณสามารถดูรายละเอียดได้ ในลิงค์ต่อไปนี้)

แม้จะมีการวิพากษ์วิจารณ์อย่างรุนแรงจากไลนัส งาน เกี่ยวกับการนำไปปฏิบัติ สนิมในเคอร์เนลยังไม่หยุดเคลื่อนไหว และเมื่อเร็วๆนี้ นำเสนอห้องสมุดอายะรุ่นแรกซึ่งช่วยให้คุณสร้างไดรเวอร์ eBPF ใน Rust ที่ทำงานภายในเคอร์เนล Linux ในเครื่องเสมือน JIT พิเศษ

ต่างจากเครื่องมือพัฒนา EBPF อื่นๆ Aya ไม่ได้ใช้ libbpf และคอมไพเลอร์ BCCแต่ เสนอการใช้งานของตัวเองที่เขียนใน Rust ซึ่งใช้แพ็คเกจลิ้นชัก libc เพื่อเข้าถึงการเรียกระบบเคอร์เนลโดยตรง การสร้าง Aya ไม่จำเป็นต้องใช้เครื่องมือภาษา C หรือส่วนหัวของเคอร์เนล

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

ต้องขอบคุณการรวบรวม JIT ทำให้ bytecode ถูกแปลเป็นคำสั่งเครื่องได้ทันที และทำงานด้วยประสิทธิภาพของโค้ดเนทีฟ XDP มีวิธีเรียกใช้โปรแกรม BPF ที่ระดับไดรเวอร์เครือข่าย ด้วยการเข้าถึงโดยตรงไปยังบัฟเฟอร์แพ็กเก็ต DMA ช่วยให้คุณสร้างไดรเวอร์ประสิทธิภาพสูงสำหรับสภาวะโหลดเครือข่ายสูง

เกี่ยวกับ อายะ

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

เช่นเดียวกับ รองรับการโทร bpf-to-bpf, ตัวแปรโกลบอลและตัวเริ่มต้นซึ่งช่วยให้สามารถออกแบบโปรแกรมสำหรับ eBPF ได้โดยการเปรียบเทียบกับโปรแกรมทั่วไปโดยใช้ aya เป็นเวลาดำเนินการ โดยยกเลิกฟังก์ชันโดยคำนึงถึงงานใน eBPF

ในทางกลับกันก็มี รองรับประเภทเคอร์เนลภายใน รวมถึงอาร์เรย์ปกติ แฮชแมป สแต็ค คิว สแต็กเทรซ และโครงสร้างสำหรับซ็อกเก็ตและการติดตามประสิทธิภาพ

tambien มีความสามารถในการสร้างโปรแกรม eBTF ประเภทต่างๆรวมถึงโปรแกรมสำหรับการกรองและการจัดการจราจร cgroup และไดรเวอร์ซ็อกเก็ตต่างๆ โปรแกรม XDP และการสนับสนุนแพลตฟอร์มสำหรับการประมวลผลคำขอแบบอะซิงโครนัสในโหมด non-blocking tokyo และ async-std
การคอมไพล์ที่รวดเร็ว โดยไม่ต้องเชื่อมโยงกับการคอมไพล์เคอร์เนลหรือส่วนหัวเคอร์เนล

สิ่งสำคัญคือต้องพูดถึงเรื่องนั้น โปรเจ็กต์ยังถือเป็นการทดลอง เนื่องจาก API ยังไม่เสถียร และยังคงพัฒนาต่อไป นอกจากนี้ ยังใช้ฟังก์ชันที่คิดไว้ไม่ครบทั้งหมด

ภายในสิ้นปีนี้ นักพัฒนาหวังว่าจะทำให้การทำงานของ Aya เทียบเท่ากับ libbpf และในเดือนมกราคม พ.ศ. 2022 ได้สร้างเวอร์ชันเสถียรครั้งแรก มีการวางแผนที่จะรวมส่วน Aya ที่จำเป็นในการเขียนโค้ด Rust สำหรับเคอร์เนล Linux เข้ากับส่วนประกอบพื้นที่ผู้ใช้ที่ใช้ในการโหลด แนบ และโต้ตอบกับโปรแกรม eBPF

ในที่สุด หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติม เกี่ยวกับเรื่องนี้ คุณสามารถ ตรวจสอบรายละเอียดในลิงค์ต่อไปนี้


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. รับผิดชอบข้อมูล: AB Internet Networks 2008 SL
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา