Παρουσιάστηκε η βιβλιοθήκη Aya για τη δημιουργία eBPF χειριστών στο Rust

Παρουσιάζεται η πρώτη έκδοση της βιβλιοθήκης Aya, η οποία σας επιτρέπει να δημιουργήσετε χειριστές eBPF στη γλώσσα Rust που τρέχουν μέσα στον πυρήνα του Linux σε μια ειδική εικονική μηχανή με JIT. Σε αντίθεση με άλλα εργαλεία ανάπτυξης eBPF, το Aya δεν χρησιμοποιεί το libbpf και τον μεταγλωττιστή bcc, αλλά προσφέρει τη δική του εφαρμογή γραμμένη σε Rust, το οποίο χρησιμοποιεί το πακέτο libc crate για άμεση πρόσβαση στις κλήσεις συστήματος πυρήνα. Το Building Aya δεν απαιτεί εργαλεία γλώσσας C ή αρχεία κεφαλίδας πυρήνα. Ο κώδικας της βιβλιοθήκης διανέμεται υπό τις άδειες MIT και Apache 2.0.

Βασικά χαρακτηριστικά:

  • Υποστήριξη για BTF (BPF Type Format), το οποίο παρέχει πληροφορίες τύπου σε ψευδοκώδικα BPF για έλεγχο τύπου και αντιστοίχιση σε τύπους που παρέχονται από τον τρέχοντα πυρήνα. Η χρήση του BTF καθιστά δυνατή τη δημιουργία καθολικών χειριστών eBPF που μπορούν να χρησιμοποιηθούν χωρίς επαναμεταγλώττιση με διαφορετικές εκδόσεις του πυρήνα Linux.
  • Υποστήριξη για κλήσεις «bpf-to-bpf», καθολικές μεταβλητές και αρχικοποιητές, που σας επιτρέπει να σχεδιάζετε προγράμματα για eBPF με παρόμοιο τρόπο με τα κανονικά προγράμματα που χρησιμοποιούν το aya ως χρόνο εκτέλεσης που επαναπροσδιορίζει τις λειτουργίες λαμβάνοντας υπόψη την εργασία στο eBPF.
  • Υποστήριξη για διάφορους τύπους πυρήνων, συμπεριλαμβανομένων κανονικών συστοιχιών, χαρτών κατακερματισμού, στοίβες, ουρές, ίχνη στοίβας, καθώς και δομές παρακολούθησης υποδοχών και απόδοσης.
  • Δυνατότητα δημιουργίας διαφόρων τύπων προγραμμάτων eBTF, συμπεριλαμβανομένων προγραμμάτων φιλτραρίσματος και διαχείρισης κυκλοφορίας, cgroup handlers και διαφόρων λειτουργιών υποδοχής, προγραμμάτων XDP.
  • Υποστήριξη πλατφορμών για ασύγχρονη επεξεργασία αιτημάτων σε λειτουργία non-blocking tokio και async-std.
  • Γρήγορη συναρμολόγηση, χωρίς καμία σύνδεση με το συγκρότημα του πυρήνα και τα αρχεία κεφαλίδας του πυρήνα.

Το έργο εξακολουθεί να θεωρείται πειραματικό - το API δεν έχει ακόμη σταθεροποιηθεί και συνεχίζει να αναπτύσσεται. Επίσης, όλες οι προβλεπόμενες ευκαιρίες δεν έχουν ακόμη υλοποιηθεί. Μέχρι το τέλος του έτους, οι προγραμματιστές αναμένουν να φέρουν τη λειτουργικότητα του Aya σε ισοτιμία με το libbpf και τον Ιανουάριο του 2022 να δημιουργήσουν την πρώτη σταθερή έκδοση. Υπάρχουν επίσης σχέδια για συνδυασμό των τμημάτων του Aya που απαιτούνται για τη σύνταξη κώδικα Rust για τον πυρήνα του Linux με τα στοιχεία χώρου χρήστη που χρησιμοποιούνται για τη φόρτωση, την προσάρτηση και την αλληλεπίδραση με προγράμματα eBPF.

Ας θυμηθούμε ότι το eBPF είναι ένας διερμηνέας bytecode ενσωματωμένος στον πυρήνα του Linux, ο οποίος σας επιτρέπει να δημιουργείτε χειριστές λειτουργιών δικτύου, να παρακολουθείτε τη λειτουργία του συστήματος, να παρακολουθείτε κλήσεις συστήματος, να ελέγχετε την πρόσβαση, να επεξεργάζεστε συμβάντα διατηρώντας παράλληλα το χρονοδιάγραμμα, να υπολογίζετε τη συχνότητα και τον χρόνο των λειτουργιών, να εκτελείτε ιχνηλασία με χρήση kprobes/upprobes /tracepoints. Χάρη στη χρήση της μεταγλώττισης JIT, ο bytecode μεταφράζεται εν κινήσει σε οδηγίες μηχανής και εκτελείται με την απόδοση του εγγενούς κώδικα. Το XDP παρέχει εργαλεία για την εκτέλεση προγραμμάτων BPF σε επίπεδο προγράμματος οδήγησης δικτύου, με δυνατότητα άμεσης πρόσβασης στην προσωρινή μνήμη πακέτων DMA, η οποία σας επιτρέπει να δημιουργείτε επεξεργαστές υψηλής απόδοσης για εργασία κάτω από μεγάλο φόρτο δικτύου.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο