WD développe un pilote NVMe dans Rust. Expérimenter avec Rust sur FreeBSD

Lors de la conférence Linux Plumbers 2022 qui se déroule ces jours-ci, un ingénieur de Western Digital a fait une présentation sur le développement d'un pilote expérimental pour disques SSD avec l'interface NVM-Express (NVMe), écrit en langage Rust et fonctionnant sur le noyau Linux. niveau. Bien que le projet en soit encore à ses premiers stades de développement, les tests ont montré que les performances du pilote NVMe en langage Rust correspondent au pilote NVMe écrit en langage C disponible dans le noyau.

WD développe un pilote NVMe dans Rust. Expérimenter avec Rust sur FreeBSD
WD développe un pilote NVMe dans Rust. Expérimenter avec Rust sur FreeBSD

Le rapport indique que le pilote NVMe actuel en C est tout à fait satisfaisant pour les développeurs, mais que le sous-système NVMe est une bonne plate-forme pour explorer la faisabilité du développement de pilotes dans Rust, car il est assez simple, largement utilisé, a des exigences de performances élevées et a une implémentation de référence éprouvée à des fins de comparaison et prend en charge diverses interfaces (dev, pci, dma, blk-mq, gendisk, sysfs).

Il est à noter que le pilote PCI NVMe pour Rust fournit déjà les fonctionnalités nécessaires au fonctionnement, mais n'est pas encore prêt pour une utilisation généralisée, car il nécessite des améliorations individuelles. Les projets futurs incluent la suppression du code des blocs dangereux existants, la prise en charge des opérations de suppression de périphérique et de déchargement de pilote, la prise en charge de l'interface sysfs, la mise en œuvre d'une initialisation paresseuse, la création d'un pilote pour blk-mq et l'expérimentation de l'utilisation d'un modèle de programmation asynchrone pour queue_rq.

Par ailleurs, on peut noter les expérimentations menées par le groupe NCC pour développer des pilotes en langage Rust pour le noyau FreeBSD. A titre d'exemple, nous examinons en détail un simple pilote d'écho qui renvoie les données écrites dans le fichier /dev/rustmodule. Dans la prochaine phase d'expérimentation, le groupe NCC envisage la possibilité de retravailler les composants centraux du noyau dans le langage Rust pour améliorer la sécurité des opérations réseau et fichiers.

Cependant, même s'il a été démontré qu'il est possible de créer des modules simples dans le langage Rust, une intégration plus étroite de Rust dans le noyau FreeBSD nécessitera un travail supplémentaire. Par exemple, ils mentionnent la nécessité de créer un ensemble de couches d'abstraction sur les sous-systèmes et les structures du noyau, similaires aux modules complémentaires préparés par le projet Rust pour Linux. À l'avenir, nous prévoyons de mener des expériences similaires avec le noyau Illumos et d'identifier les abstractions courantes dans Rust qui pourraient être utilisées dans les pilotes écrits en Rust pour Linux, BSD et Illumos.

Selon Microsoft et Google, environ 70 % des vulnérabilités de leurs produits logiciels sont causées par une gestion non sécurisée de la mémoire. On s'attend à ce que l'utilisation du langage Rust réduise le risque de vulnérabilités causées par un travail dangereux avec la mémoire et élimine l'apparition d'erreurs telles que l'accès à une zone mémoire après sa libération et le dépassement du tampon.

Une gestion sécurisée de la mémoire est assurée dans Rust au moment de la compilation grâce à la vérification des références, au suivi de la propriété des objets et de leur durée de vie (portée), ainsi qu'à l'évaluation de l'exactitude de l'accès à la mémoire pendant l'exécution du code. Rust offre également une protection contre les débordements d'entiers, nécessite l'initialisation obligatoire des valeurs des variables avant utilisation, gère mieux les erreurs dans la bibliothèque standard, applique le concept de références et de variables immuables par défaut, propose un typage statique fort pour minimiser les erreurs logiques.

Source: opennet.ru

Ajouter un commentaire