Les serveurs de Meta récupèrent une technologie pensée pour le Steam Deck de Valve
Le Steam Deck, la console portable sous GNU/Linux de Valve, se retrouve partout… ou presque. En effet une technologie développée par Valve pour son petit ordinateur est maintenant employée dans certains serveurs de chez Meta. Il s'agit du scheduler (l'agenceur en français) SCX-LAVD. Un scheduler, de façon schématique, est le composant logiciel qui va définir sur quel cœur d'un processeur un programme va s'exécuter, et qui va aussi choisir la priorité de certaines tâches face à d'autres.

Le choix d'un cœur n'est absolument pas anodin dans un système moderne, qui peut combiner des cœurs basse consommation (avec des performances très faibles sur certaines tâches), des cœurs performants et des cœurs virtuels (Hyper-Threading). De même, dans beaucoup de processeurs modernes, tous les cœurs performants ne sont pas égaux : la mémoire cache de niveau 3 est souvent liée à un groupe de cœurs, avec une liaison entre les groupes qui peut être plus lente. Prenons un processeur AMD avec seize cœurs : il est composé en réalité de deux groupes de huit cœurs qui ont accès à une partie de la mémoire cache de niveau 3. Si vous exécutez un programme en assignant un cœur d'un groupe et un cœur d'un autre groupe, vous perdrez un peu en performances à cause de la liaison entre les deux zones de mémoires, par exemple. Le but d'un bon scheduler est donc de choisir les bons cœurs, en adaptant les choix à l'architecture du processeur.
Apple doit prendre en compte ce genre de contraintes dans ses puces, étant donné que le nombre de cœurs basse consommation varie en fonction des systèmes sur puce, et que les puces Ultra ont un lien entre deux groupes de cœurs qui est certes rapide, mais pas autant que l'accès direct à la mémoire cache.

Pour la priorité, c'est un peu différent, mais l'idée est la même : le Scheduler natif sous GNU/Linux est prévu pour prendre en charge de nombreux types d'appareils, qui n'ont pas tous les mêmes besoins. Il est donc plutôt conservateur sur certains choix et suffisant pour tous les usages, sans être le meilleur. Le scheduler de Valve, a contrario, a été pensé pour une machine destinée aux joueurs : certaines tâches ne peuvent pas être placées dans une file d'attente (globalement tout ce qui est lié aux jeux) parce qu'une mise à jour du système est en attente (c'est une explication avec de gros traits).
Des serveurs avec les mêmes besoins… dans un sens
Ce qui est intéressant, c'est que ce sont des choix pratiques pour des serveurs. Il y a pas mal de détails dans la présentation de Meta pour ceux que le côté (très) technique intéresse, avec les modifications effectuées par les développeurs pour bien adapter le scheduler à cet usage précis. Mais dans l'ensemble, il est assez bien adapté pour un serveur, car le principe de base reste le même : il faut une latence très faible pour la fonction primaire, qui est ici de servir des données (et pas d'exécuter un jeu de la façon la plus fluide possible1) et une bonne optimisation pour le choix des bons cœurs, en fonction des usages. le but n'est pas de faire ce qu'on appelle du temps réel, ce qui demande des réglages particuliers, mais de réduire la latence pour des tâches précises, et pour cet usage, le scheduler du Steam Deck est donc un bon choix, meilleur que le scheduler natif.
-
Bon, dans le cas du Steam Deck, c'est plutôt « avec le moins de saccades possibles ». ↩︎