Le noyau Linux intégrera la possibilité d'utiliser eBPF pour créer des planificateurs de tâches

Linus Torvalds a exprimé sa volonté d'intégrer dans le noyau Linux 6.11, dont la sortie est attendue à la fin septembre, des patches mettant en œuvre le mécanisme « sched_ext » (SCX), permettant d'utiliser eBPF pour créer des planificateurs CPU, couvrant presque tous les aspects de la planification de l'exécution des tâches et de la distribution des ressources CPU. De tels planificateurs peuvent être chargés dynamiquement et exécutés à l'intérieur du noyau Linux dans une machine virtuelle eBPF, où, grâce à l'utilisation de la compilation JIT, le bytecode est traduit en instructions machine et exécuté avec la performance d'un code compilé.

Les patches proposés mettent en œuvre une nouvelle classe de planification SCHED_EXT, pour laquelle la priorité d'appel par le noyau entre les classes SCHED_IDLE et SCHED_NORMAL est définie, empêchant ainsi les gestionnaires BPF liés à SCHED_EXT d'affecter les tâches déjà attachées au planificateur de tâches standard (SCHED_NORMAL), mais permettant d'attacher à SCHED_EXT des tâches individuelles ou de déplacer pour traitement tous les processus ayant une priorité inférieure à celle d'une exécution en temps réel. Si aucun gestionnaire BPF n'est attaché à SCHED_EXT, tous les processus déplacés dans la classe SCHED_EXT seront traités à l'aide du planificateur SCHED_NORMAL. Le fonctionnement des gestionnaires BPF se résume à l'analyse des files d'attente de tâches en attente d'exécution sur le CPU (une file d'attente globale et une par cœur CPU) et au choix de la tâche à laquelle allouer des ressources CPU lors de la libération d'un cœur CPU.

Le mécanisme sched_ext simplifie la création de planificateurs spécifiques à certaines tâches, permet d'expérimenter avec différentes techniques et stratégies de planification, et autorise la création rapide de prototypes opérationnels ainsi que le remplacement à la volée des planificateurs dans des infrastructures de travail. Par exemple, il est possible, grâce à sched_ext, de créer un planificateur qui prend en compte la spécificité d'une application donnée et modifie dynamiquement la stratégie de planification de son exécution en fonction de l'état du système et d'autres facteurs complémentaires.

Actuellement, environ une dizaine de planificateurs basés sur sched_ext sont déjà en développement, dont la logique de planification des tâches est définie dans l'espace utilisateur et chargée dans le noyau sous forme de programmes BPF :

  • scx_layered — un planificateur hybride de tâches qui divise les tâches en couches, chacune avec sa propre stratégie de planification. Par exemple, scx_layered permet de placer certaines tâches dans une couche distincte, pour lesquelles des ressources CPU garanties seront fournies, ou d'augmenter la priorité de certaines applications. Le planificateur est développé par Meta. La logique de génération BPF fonctionnant dans l'espace utilisateur est écrite en Rust.
  • scx_rustland — un planificateur optimisé pour augmenter la priorité des tâches interactives en arrière-plan par rapport aux tâches qui chargent intensément le CPU. Par exemple, lors d'un test de lancement de l'application de jeu Terraria en même temps que la compilation du noyau, le planificateur scx_rustland a permis d'obtenir un FPS plus élevé dans le jeu qu'en utilisant le planificateur standard EEVDF. Le projet est développé par un employé de Canonical. La logique de génération BPF fonctionnant dans l'espace utilisateur est écrite en Rust.
  • scx_lavd — une mise en œuvre de l'algorithme de planification de tâches LAVD (Latency-criticality Aware Virtual Deadline), prenant en compte l'importance de la réduction des délais pour des tâches spécifiques et utilisant des informations sur l'avancement des processus lors de la prise de décision sur la distribution des ressources CPU. Le planificateur est développé par Igalia et Valve pour réduire les délais dans les jeux vidéo et les tâches interactives. La logique de génération BPF fonctionnant dans l'espace utilisateur est écrite en Rust.
  • scx_rusty, scx_rlfifo, scx_mitosis — des exemples de planificateurs avec des composants dans l'espace utilisateur écrits en Rust, réalisant un équilibrage entre des groupes de tâches selon la charge, un planificateur FIFO simple et un planificateur pour l'attribution de groupes de tâches aux cœurs CPU.
  • scx_central, scx_flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland — des exemples de planificateurs avec des composants dans l'espace utilisateur écrits en C, illustrant différentes capacités de sched-ext.

Le mécanisme sched_ext a été proposé pour examen par les développeurs du noyau en 2022, après quoi six versions du patch ont été publiées. Malgré l'absence de support dans la version principale du noyau, les distributions Ubuntu, Arch Linux, Fedora et NixOS offrent la possibilité d'installer sched_ext via des paquets supplémentaires. La société Canonical envisage d'inclure les composants sched-ext dans Ubuntu 24.10, tandis que Valve travaille sur l'intégration de sched_ext dans Steam Deck. Chez Meta, le planificateur basé sur sched_ext est déjà utilisé dans l'infrastructure opérationnelle.

La société Google expérimente l'utilisation de son propre framework ghOSt, permettant d'influencer les décisions du planificateur de tâches grâce à des programmes BPF. Actuellement, le travail a commencé pour porter ghOSt sur sched_ext. Google développe également un port de sched_ext pour ChromeOS avec l'intention de l'utiliser afin d'activer le planificateur hybride scx_layered pour réduire les latences sans utiliser d'extensions pour le fonctionnement en temps réel. La société Oculus développe le port de sched_ext pour Android.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster