rapport sur l'évolution du projet FreeBSD d'avril à juin 2019. Parmi les changements notables :
- Questions générales et systémiques
- L'équipe dirigeante a décidé de créer un groupe de travail pour étudier la possibilité de transférer les textes sources du système de gestion centralisé des sources Subversion vers le système décentralisé Git.
- Des tests de fuzzing du noyau FreeBSD ont été réalisés à l'aide du système et un certain nombre d'erreurs détectées ont été corrigées. Une couche de fuzzing a été ajoutée pour les bibliothèques afin d'assurer la compatibilité avec les environnements 32 bits sur des systèmes ayant un noyau 64 bits. La possibilité d'exécuter syzkaller dans des machines virtuelles basées sur bhyve a été mise en œuvre. La prochaine étape consiste à étendre la couverture des tests des appels système, à impliquer LLVM sanitizer pour vérifier le noyau, et à utiliser netdump pour enregistrer des dumps du noyau pendant les pannes lors de tests de fuzzing, etc.
- Le travail a commencé sur la mise à jour de l'implémentation de zlib au niveau du noyau. Pour permettre l'accès du noyau au code de zlib, le répertoire contrib/zlib a été renommé en sys/contrib/zlib et le fichier d'en-tête crc.h a également été renommé pour éviter les conflits avec zlib/crc.h. Un nettoyage du code obsolète dépendant de zlib et de inflate a été réalisé. Il est prévu de permettre la compilation du noyau simultanément avec l'ancienne et la nouvelle version de zlib pour une transition progressive vers la nouvelle version des fonctions utilisant la compression ;
- L'infrastructure d'émulation de l'environnement Linux (Linuxulator) a été mise à jour. Le support des outils de débogage Linux, tels que l'outil strace, a été étendu. Le paquet linux-c7-strace a été ajouté aux ports et peut être utilisé pour le traçage des fichiers exécutables Linux au lieu des utilitaires truss et ktrace, qui ne peuvent pas encore décoder certains indicateurs et structures spécifiques à Linux. De plus, le paquet linux-ltp contenant des fichiers exécutables du Linux Test Project a été ajouté et des problèmes de compatibilité avec des fichiers exécutables compilés avec de nouvelles versions de glibc ont été résolus ;
- La mise en œuvre des opérations de nettoyage différé des liaisons aux pages physiques de mémoire (invalidation différée) dans le mécanisme pmap a été convertie pour utiliser un algorithme de traitement de file sans verrouillage, ce qui a permis de résoudre des problèmes de scalabilité lors de l'exécution d'un grand nombre d'opérations unmap en parallèle ;
- Le mécanisme de verrouillage vnode a été modifié lors de l'exécution des appels système de la famille execve(), ce qui a permis d'améliorer l'efficacité lors de l'exécution simultanée de execve() pour le même fichier (par exemple, lors d'opérations de compilation avec parallélisation du lancement du compilateur);
- Sécurité
- Dans l'hyperviseur bhyve, les améliorations de la prise en charge de la migration à chaud des environnements invités d'un hôte à un autre et des fonctionnalités de Sauvegarde/Restauration, permettant de geler le système invité tout en conservant son état dans un fichier, puis de reprendre l'exécution, ont été poursuivies.
- Grâce à l'utilisation de la bibliothèque libvdsk, la prise en charge des images disque au format QCOW2 a été ajoutée dans bhyve. L'installation d'une
de bhyve, qui a été adaptée pour utiliser des gestionnaires d'opérations de fichiers basés sur libvdsk, est requise. Pendant la période de rapport, des travaux ont également été réalisés dans libvdsk pour simplifier l'intégration du support de nouveaux formats, améliorer la performance de lecture et d'écriture, et ajouter la prise en charge de la Copy-On-Write. Parmi les tâches restantes, on note l'intégration de libvdsk dans le noyau principal de bhyve; - Un système de collecte d'informations sur le trafic a été ajouté aux ports
, permettant de créer des pièges pour les requêtes réseau malveillantes (les IP et les domaines de listes noires sont vérifiés) et d'envoyer des informations sur les activités détectées à un serveur centralisé pour le blocage ou l'analyse ultérieure des tentatives d'attaque; - Une plateforme pour détecter les attaques, analyser les journaux et suivre l'intégrité des fichiers a été ajoutée aux ports (un fork d'Ossec avec support d'intégration avec );
- Sous-système réseau
- Le driver ena a été mis à jour avec le support de la deuxième génération d'adaptateurs réseau ENAv2 (Elastic Network Adapter), utilisés dans l'infrastructure Elastic Compute Cloud (EC2) pour organiser des communications entre les nœuds EC2 à des vitesses allant jusqu'à 25 Gb/s. Le driver ena prend en charge NETMAP.
- Un nouveau stack MMC/SD basé sur le framework CAM a été intégré dans FreeBSD HEAD, permettant de connecter des appareils avec une interface SDIO (Secure Digital I/O). Par exemple, SDIO est utilisé dans les modules WiFi et Bluetooth pour de nombreuses cartes, comme la Raspberry Pi 3. Le nouveau stack permet également d'utiliser l'interface CAM pour envoyer des commandes SD depuis des applications en espace utilisateur, ouvrant la voie à la création de pilotes d'appareils fonctionnant au niveau de l'utilisateur. La création de pilotes pour les puces sans fil Broadcom, fonctionnant en mode FullMAC (où le chip exécute une sorte de système d'exploitation avec son propre stack sans fil 802.11), a commencé.
- Des travaux sont en cours pour implémenter NFSv4.2 (RFC-7862) pour FreeBSD. La nouvelle version de NFS a ajouté la prise en charge des fonctions posix_fadvise, posix_fallocate, des modes SEEKHOLE/SEEKDATA dans lseek, ainsi que l'opération de copie locale de parties de fichiers sur le serveur (sans transmission au client).
Actuellement, FreeBSD dispose déjà d'un support de base pour les opérations LayoutError, IOAdvise, Allocate et Copy. Il reste à implémenter l'opération Seek, nécessaire pour utiliser lseek(SEEKHOLE/SEEKDATA) avec NFS. Le support de NFSv4.2 est prévu pour être inclus dans FreeBSD 13.
- Systèmes de stockage et systèmes de fichiers
- Le projet de refonte du pilote du sous-système FUSE (File system in USErspace), permettant de créer des implémentations de systèmes de fichiers en espace utilisateur, touche à sa fin. Le pilote fourni initialement était obsolète et contenait de nombreux bogues. Dans le cadre du projet de modernisation, le support du protocole FUSE 7.23 a été mis en œuvre (la version 7.8, sortie il y a 11 ans, était antérieurement supportée), du code a été ajouté pour vérifier les droits d'accès côté noyau (« -o default_permissions »), des appels VOP_MKNOD, VOP_BMAP, et VOP_ADVLOCK ont été ajoutés, la possibilité d'interrompre les opérations FUSE a été permise, le support des canaux non nommés et des sockets unix dans fusefs a été ajouté, l'utilisation de kqueue pour /dev/fuse a été rendue possible, la mise à jour des paramètres de montage via « mount -u » a été autorisée, le support de l'exportation de fusefs via NFS a été implémenté, la prise en compte de RLIMIT_FSIZE a été réalisée, des drapeaux FOPEN_KEEP_CACHE et FUSE_ASYNC_READ ont été ajoutés, des optimisations de performance significatives ont été apportées et la gestion du cache a été améliorée.
- Le code de remplacement des pages mémoire dans la partition d'échange (swap pager) a été mis à jour pour ajouter le support de l'opération BIO_DELETE, permettant d'utiliser la commande TRIM lors de la suppression de blocs sur des disques SSD pour prolonger leur durée de vie.
- Support matériel
- Le travail de prise en charge des SoC ARM64 Broadcom BCM5871X avec des processeurs ARMv8 Cortex-A57, destinés à une utilisation dans des routeurs, des passerelles et des unités de stockage réseau, a été poursuivi. Au cours de la période de rapport, la prise en charge des bus internes et externes iProc PCIe a été améliorée, la prise en charge de BNXT Ethernet a été ajoutée et des travaux ont été entrepris pour activer le moteur cryptographique intégré afin d'accélérer IPsec. L'intégration du code dans la branche HEAD est attendue au second semestre.
- Le travail a commencé sur la prise en charge du SoC 64 bits NXP LS1046A basé sur le processeur ARMv8 Cortex-A72, avec un moteur intégré d'accélération du traitement des paquets réseau, un Ethernet 10 Gb, PCIe 3.0, SATA 3.0 et USB 3.0. La prise en charge de la plateforme de base (multi-utilisateur SMP) et SATA 3.0 a déjà été mise en œuvre. La prise en charge de l'USB 3.0, SD/MMC et I2C est en cours de développement. La prise en charge de l'Ethernet, GPIO et QSPI est prévue. L'achèvement du travail et l'inclusion dans la branche HEAD sont attendus au quatrième trimestre 2019.
- Les pilotes mlx5en et mlx5ib pour les adaptateurs Ethernet et InfiniBand Mellanox ConnectX-4 [Lx], ConnectX-5 [Ex] et ConnectX-6 [Dx] ont été mis à jour. La prise en charge des adaptateurs Mellanox Socket Direct (ConnectX-6) a été ajoutée, permettant d'atteindre une bande passante allant jusqu'à 200 Gb/s sur le bus PCIe Gen 3.0. Le support du pilote RShim a été ajouté pour les puces multi-cœurs « BlueField ». Le paquet mstflint a été inclus avec un ensemble d'utilitaires de diagnostic pour les adaptateurs Mellanox.
- Applications et système de ports
- Les composants de la pile graphique ont été mis à jour. Le pilote drm.ko (Direct Rendering Manager) a été porté depuis le noyau Linux 5.0. Ce pilote est considéré comme expérimental et a été ajouté à l'arbre des ports en tant que graphics/drm-devel-kmod. Étant donné que le pilote utilise le framework mis à jour Linux KPI pour la compatibilité avec l'API DRM du noyau Linux, FreeBSD CURRENT est requis pour son fonctionnement. Le pilote drm vboxvideo.ko pour le GPU virtuel VirtualBox a également été porté depuis Linux. Le paquet Mesa a été mis à jour vers la version 18.3.2 et a été converti pour utiliser LLVM depuis le port devel/llvm80 au lieu de devel/llvm60.
- L'arbre des ports FreeBSD a franchi le cap des 37000 ports, avec un nombre de PR non résolus maintenu à 2146. Au cours de la période de rapport, 7837 modifications ont été apportées par 172 développeurs. Trois nouveaux participants ont obtenu des droits de commit. Parmi les mises à jour de version significatives dans les ports, on note : MySQL 5.7, Python 3.6, Ruby 2.5, Samba 4.8, Julia 1.0, Firefox 68.0, Chromium 75.0.3770.100. Tous les ports en Go ont été convertis pour utiliser l'indicateur « USES=go ». L'indicateur « USES=cabal » a été ajouté pour le gestionnaire de paquets Cabal utilisé pour le code Haskell. Un mode de protection de la pile strict a été activé. Par défaut, la version de Python 3.6 est proposée au lieu de 2.7.
- Publication de la version de l'outil , offrant une alternative à /sbin/sysctl, utilisant pour la sortie et fournissant un ensemble étendu d'options. Nsysctl peut être utilisé pour surveiller visuellement l'état des valeurs sysctl et présenter des informations sur les objets de manière structurée. Une sortie est possible dans les formats XML, JSON et HTML ;
Source : opennet.ru
