Rapport de développement FreeBSD pour le premier trimestre 2020

Publié rapport sur le développement du projet FreeBSD de janvier à mars 2020. Parmi les changements on peut noter :

  • Questions générales et système
    • Suppression de l'ensemble de compilateurs GCC de l'arborescence des sources FreeBSD-CURRENT, ainsi que des utilitaires gperf, gcov et gtc (compilateur devicetree) inutilisés. Toutes les plates-formes qui ne prennent pas en charge Clang ont été basculées vers l'utilisation d'outils de construction externes installés à partir des ports. Le système de base livrait une version obsolète de GCC 4.2.1, et l'intégration de versions plus récentes n'était pas possible en raison de la transition de 4.2.2 vers la licence GPLv3, considérée comme inappropriée pour les composants de base de FreeBSD. Les versions actuelles de GCC, y compris GCC 9, peuvent toujours être installées à partir de packages et de ports.
    • L'infrastructure d'émulation de l'environnement Linux (Linuxulator) a ajouté la prise en charge de l'appel système sendfile, du mode TCP_CORK (requis pour nginx) et de l'indicateur MAP_32BIT (résout le problème de lancement de packages avec Mono depuis Ubuntu Bionic). Les problèmes de résolution DNS lors de l'utilisation d'une glibc plus récente que 2.30 (par exemple à partir de CentOS 8) ont été résolus.
      L'infrastructure d'intégration continue offre la possibilité d'exécuter des tâches LTP (Linux Testing Project) exécutant Linuxulator pour tester les améliorations apportées au code pour prendre en charge Linux. Environ 400 tests échouent et doivent être corrigés (certaines erreurs sont causées par des faux positifs, certaines nécessitent des correctifs triviaux, mais d'autres nécessitent l'ajout de la prise en charge de nouveaux appels système à corriger). Des travaux ont été effectués pour nettoyer le code de Linuxulator et simplifier le débogage. Des correctifs prenant en charge les attributs étendus et l'appel système fexecve ont été préparés, mais n'ont pas encore été révisés.

    • Les réunions du groupe de travail créé pour réaliser la migration des codes sources du système de contrôle de source centralisé Subversion vers le système décentralisé Git se poursuivent. Un rapport contenant des propositions de migration est en cours de préparation.
    • В RTLD (éditeur de liens d'exécution) mode d'exécution directe amélioré (« /libexec/ld-elf.so.1 {path} {arguments} »).
    • Le projet de test fuzzing du noyau FreeBSD utilisant le système syzkaller continue de se développer. Au cours de la période de référence, les problèmes dans la pile réseau et le code permettant de travailler avec les tables de descripteurs de fichiers identifiés à l'aide de syzkaller ont été éliminés. Suite au diagnostic d'erreur, des modifications ont été ajoutées à la pile SCTP pour faciliter le débogage. Des règles ont été ajoutées à l'ensemble stress2 pour identifier les régressions possibles. Ajout de la prise en charge des tests fuzz des nouveaux appels système, notamment les appels du sous-système copy_file_range(), __realpathat() et Capsicum. Les travaux se poursuivent pour couvrir la couche d'émulation Linux avec des tests de fuzz. Nous avons analysé et éliminé les erreurs relevées dans les derniers rapports Coverity Scan.
    • Le système d'intégration continue est passé à l'exécution de tous les tests de branche principale uniquement en utilisant clang/lld. Lors des tests pour RISC-V, la formation d'une image disque complète est assurée pour l'exécution de tests dans QEMU à l'aide d'OpenSBI. Ajout de nouvelles tâches pour tester les images et les machines virtuelles powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
    • Des travaux sont en cours pour transférer la suite de tests Kyua des ports (devel/kyua) vers le système de base afin de résoudre les problèmes (les packages sont installés très lentement) qui surviennent lors de l'utilisation de Kyua sur de nouvelles architectures dont le développement est réalisé à l'aide d'un émulateur ou FPGA. L'intégration dans le système de base simplifiera considérablement les tests des plates-formes embarquées et l'interface avec les systèmes d'intégration continue.
    • Un projet a été lancé pour optimiser les performances du pilote de pont réseau si_pont, qui utilise un seul mutex pour verrouiller les données internes, ce qui ne permet pas d'atteindre les performances souhaitées sur des systèmes comportant un grand nombre d'environnements jail ou de machines virtuelles réunies en un seul réseau. A ce stade, des tests ont été ajoutés au code pour éviter que des régressions ne se produisent lors de la modernisation du travail avec les serrures. La possibilité d'utiliser ConcurrencyKit pour paralléliser les gestionnaires de transfert de données (bridge_input(), bridge_output(), bridge_forward(), ...) est à l'étude.
    • Ajout d'un nouvel appel système sigfastblock pour permettre à un thread de spécifier un bloc de mémoire pour un gestionnaire de signaux rapide afin d'améliorer les performances des gestionnaires d'exceptions.
    • Le noyau ajoute la prise en charge des instructions atomiques LSE (Large System Extension) prises en charge par les systèmes ARMv8.1. Ces instructions sont nécessaires pour améliorer les performances lors de l'exécution sur les cartes Cavium ThunderX2 et AWS Graviton 2. Les modifications ajoutées détectent la prise en charge de LSE et activent dynamiquement l'implémentation atomique basée sur celles-ci. Lors des tests, l'utilisation de LSE a permis de réduire de 15 % le temps processeur consacré à l'assemblage du noyau.
    • Une optimisation des performances a été effectuée et les fonctionnalités de la boîte à outils ont été étendues pour les fichiers exécutables au format ELF.
      Ajout de la prise en charge de la mise en cache des informations de débogage DWARF, résolution des problèmes dans les utilitaires elfcopy/objcopy, ajout du traitement DW_AT_ranges,
      readelf implémente la possibilité de décoder les indicateurs PROTMAX_DISABLE, STKGAP_DISABLE et WXNEEDED, ainsi que Xen et GNU Build-ID.

  • sécurité
    • Pour améliorer les performances de FreeBSD dans les environnements cloud Azure, des travaux sont en cours pour fournir la prise en charge du mécanisme HyperV Socket, qui permet l'utilisation d'une interface socket pour l'interaction entre le système invité et l'environnement hôte sans configurer de réseau.
    • Des travaux sont en cours pour fournir des versions reproductibles de FreeBSD, permettant de garantir que les fichiers exécutables des composants du système sont compilés exactement à partir des codes sources déclarés et ne contiennent pas de modifications superflues.
    • La possibilité de contrôler l'inclusion de mécanismes de protection supplémentaires (ASLR, PROT_MAX, stack gap, mappage W+X) au niveau des processus individuels a été ajoutée à l'utilitaire elfctl
  • Systèmes de stockage et de fichiers
    • Des travaux sont en cours pour implémenter la possibilité pour NFS de fonctionner sur un canal de communication crypté basé sur TLS 1.3, au lieu d'utiliser Kerberos (mode sec=krb5p), qui se limite au cryptage uniquement des messages RPC et est implémenté uniquement dans le logiciel. La nouvelle implémentation utilise la pile TLS fournie par le noyau pour activer l'accélération matérielle. Le code NFS sur TLS est presque prêt pour les tests, mais nécessite encore du travail pour prendre en charge les certificats clients signés et adapter la pile TLS du noyau pour envoyer des données NFS (les correctifs de réception sont déjà prêts).
  • Assistance matérielle
    • Des travaux sont en cours pour ajouter la prise en charge du processeur x86 chinois Hygon basé sur les technologies AMD ;
    • Dans le cadre de CheriBSD, un fork de FreeBSD pour l'architecture des processeurs de recherche CHERI (Capability Hardware Enhanced RISC Instructions), la prise en charge du processeur ARM Morello continue d'être implémentée, qui prendra en charge le système de contrôle d'accès à la mémoire CHERI basé sur le modèle de sécurité du projet Capsicum. Chips de griotte planifient sortie en 2021. Les travaux se concentrent actuellement sur l'ajout de la prise en charge de la plate-forme Arm Neoverse N1 qui alimente Morello. Un premier portage de CheriBSD pour l'architecture RISC-V a été présenté. Le développement de CheriBSD se poursuit pour le prototype de référence CHERI basé sur l'architecture MIPS64.
    • Le portage FreeBSD se poursuit pour le SoC NXP LS64A 1046 bits basé sur le processeur ARMv8 Cortex-A72 avec un moteur d'accélération du traitement des paquets réseau intégré, Ethernet 10 Go, PCIe 3.0, SATA 3.0 et USB 3.0. Actuellement, les pilotes QorIQ et LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI sont en cours de préparation pour être transférés vers la composition principale de FreeBSD.
    • Le pilote ena a été mis à jour vers la version 2.1.1 avec la prise en charge 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 la communication entre les nœuds EC2 à des vitesses allant jusqu'à 25 Gb/s. s. Une mise à jour d'ENA 2.2.0 est en cours de préparation.
    • Les améliorations du port FreeBSD pour la plateforme powerpc64 se poursuivent. L'accent est mis sur la fourniture de performances de qualité sur les systèmes équipés de processeurs IBM POWER8 et POWER9. Au cours de la période de référence, FreeBSD-CURRENT a été transféré pour utiliser le compilateur LLVM/Clang 10.0 et l'éditeur de liens LLD au lieu de GCC. Par défaut, les systèmes powerpc64 utilisent l'ABI ELFv2 et la prise en charge de l'ABI ELFv1 a été interrompue. FreeBSD-STABLE a toujours gcc 4.2.1. Les problèmes avec les pilotes virtio, aacraid et ixl ont été résolus. Sur les systèmes powerpc64, il est possible d'exécuter QEMU sans la prise en charge des Huge Pages.
    • Les travaux se poursuivent pour mettre en œuvre la prise en charge de l'architecture RISC-V. Dans sa forme actuelle, FreeBSD démarre déjà avec succès sur la carte SiFive Hifive Unleashed, pour laquelle des pilotes ont été préparés
      UART, SPI et PRCI prennent en charge les micrologiciels OpenSBI et SBI 0.2. Au cours de la période considérée, les travaux se sont concentrés sur la migration de GCC vers clang et lld.

  • Système d'applications et de ports
    • La collection de ports FreeBSD a franchi le seuil des 39 2400 ports, le nombre de PR non fermés dépasse légèrement les 640 8146, dont 173 PR n'ont pas encore été triés. Au cours de la période de référence, 3 2.7 modifications ont été apportées par 2 développeurs. Quatre nouveaux participants ont reçu le droit de committer (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore). Ajout de l'indicateur USES=qca et suppression de l'indicateur USES=zope (en raison d'une incompatibilité avec Python 3). Des travaux sont en cours pour supprimer Python 1.13.2 de l'arborescence des ports - tous les ports basés sur Python XNUMX doivent être portés vers Python XNUMX ou seront supprimés. Le gestionnaire de packages pkg a été mis à jour vers la version XNUMX.
    • Composants de la pile graphique mis à jour et ports liés à Xorg.
      Le serveur X.org a été mis à jour vers la version 1.20.8 (précédemment livrée sur la branche 1.18), ce qui a permis à FreeBSD d'utiliser par défaut le backend udev/evdev pour gérer les périphériques d'entrée. Le package Mesa a été modifié pour utiliser l'extension DRI3 au lieu de DRI2 par défaut. Des travaux sont en cours pour conserver les pilotes graphiques, la pile de périphériques d'entrée et les composants drm-kmod (un port qui permet le fonctionnement des modules amdgpu, i915 et radeon DRM, en utilisant le framework linuxkpi pour la compatibilité avec le Direct Rendering Manager du noyau Linux). à jour.

    • Le bureau KDE Plasma, les frameworks KDE, les applications KDE et Qt sont tenus à jour et mis à jour avec les dernières versions. Une nouvelle application kstars (atlas des étoiles) a été ajoutée aux ports.
    • Des travaux ont été effectués pour éliminer les modifications régressives dans le gestionnaire de fenêtres xfwm4 apparues après la mise à jour de Xfce vers la version 4.14 (par exemple, des artefacts sont apparus lors de la décoration des fenêtres).
    • Le port Wine a été mis à jour pour publier Wine 5.0 (auparavant, la version 4.0.3 était proposée).
    • À partir de la version 1.14, le compilateur du langage Go a ajouté la prise en charge officielle de l'architecture ARM64 pour FreeBSD 12.0.
    • OpenSSH sur le système de base a été mis à jour vers la version 7.9p1.
    • La bibliothèque sysctlmibinfo2 a été implémentée et placée dans les ports (devel/libsysctlmibinfo2), fournissant une API pour accéder à la MIB sysctl et traduire les noms sysctl en identifiants d'objet (OID).
    • Une mise à jour de distribution a été générée NomadBSD 1.3.1, qui est une édition de FreeBSD adaptée pour être utilisée comme ordinateur de bureau portable amorçable à partir d'une clé USB. L'environnement graphique est basé sur un gestionnaire de fenêtres Openbox. Utilisé pour le montage de lecteurs DSBMD (le montage de CD9660, FAT, HFS+, NTFS, Ext2/3/4 est pris en charge), pour configurer un réseau sans fil - gestionnaire wifi, et pour contrôler le volume - DSBMixeur.
    • Commencé travailler sur la rédaction d'une documentation complète pour le gestionnaire de l'environnement carcéral boîte. La sortie du pot 0.11.0 est en cours de préparation, qui comprendra des outils de gestion de la pile réseau.

Source: opennet.ru

Ajouter un commentaire