Kernel-based mode-setting
# Kernel-based mode-setting

Kernel-based mode-setting, ou KMS, est un procédé permettant la gestion des modes d'affichage par le noyau Linux et celui des systèmes BSD.

Sans KMS c'est le pilote graphique qui se charge de la gestion des modes d'affichage graphique, ce qui est loin d'être optimal. En effet, ce travail est déjà fait une première fois par le noyau pour l'affichage des messages durant la phase de démarrage, avant que le pilote graphique ne réinitialise à nouveau le mode d'affichage lorsqu'il est lui-même chargé.

Sur la base de KMS, une gestion plus élaborée a ensuite été développée : Atomic mode-setting.

## Historique

KMS est intégré au noyau Linux depuis la version 2.6.29. Compatible dans un premier temps uniquement avec les architectures Intel, son usage a été étendu aux autres architectures (Radeon via les pilotes radeon à compter du noyau Linux 2.6.31, puis GeForce via nouveau).

Il est peu à peu porté sur les systèmes BSD :

* FreeBSD : La version 9.1 fait usage de KMS s'agissant du pilote libre Intel ; la version 10.0 utilise quant à elle KMS pour le pilote radeon.
* OpenBSD : La version 5.4 fait usage de KMS pour les pilotes libres Intel et radeon.
* DragonFly : La version 3.6 fait usage de KMS pour les pilotes libres Intel et radeon.

## Apports

KMS permet :

* de démarrer de façon plus fluide graphiquement : l'image ne « saute » plus pendant la phase de démarrage de l'ordinateur, de même en cas de changement d'utilisateur ;
* une meilleure mise en veille du matériel – car indépendante du BIOS (dont les spécifications sont la plupart du temps tenues secrètes, ce qui complique la tâche des développeurs du noyau Linux et du serveur graphique X.Org) ;
* de conserver une interface graphique même en cas de plantage du serveur graphique X.Org ;
* de faire tourner le serveur X sans les privilèges root (procédé NRX pour "No-Root X") pour une sécurité accrue.

### Atomic mode-setting, KMS Planes

La gestion atomique des modes d'affichage (en anglais atomic mode-setting) est un mode dans lequel la préparation d'une nouvelle image est vue atomiquement. L'ensemble des modifications se fait hors écran, dans un tampon. Lorsqu'elles sont terminées, une validation est opérée, et l'image modifiée ne sera affichée qu'à l'intervalle de rafraîchissement vertical (VBLANK) suivant et que si elle est entièrement terminée. Cela simplifie le pilote puisqu'il n'a plus à se soucier de la synchronisation avec l'intervalle de rafraîchissement, permet de rendre plus efficace l'utilisation de la carte (pas de calcul pour une image qui ne sera pas affichée), et d'éviter les effets dits de tearing (décalage ou incohérence entre le haut et le bas de l'image qui paraît alors comme déchirée horizontalement). Il est également possible de préparer plusieurs images à l'avance, selon la taille du tampon. Ce mode est notamment présenté au FOSDEM de février 2015 et est intégré petit à petit dans les différents pilotes.

Par ailleurs, grâce à cette gestion atomique, les applications telles que le serveur graphique X.Org ou un compositeur Wayland/Mir peuvent changer les paramètres de tous les plans graphiques (exposés par l’interface de programmation universal plane, intégrée dans le noyau Linux 3.15) à la fois ; on évite aussi, par exemple, au compositeur d’utiliser les shaders plutôt que les plans graphiques pour le rendu vidéo. Ces plans graphiques sont plus efficaces (autant du point de vue de la consommation énergétique que du point de vue de la bande passante mémoire) car ils sont généralement capables d’afficher les vidéos dans leur format natif (YUV) sans avoir à être convertis en RVB. De plus, ils sont généralement capables de redimensionner la taille d’une image de façon matérielle. Sans la gestion atomique des plans graphiques, il est impossible pour un compositeur de migrer dynamiquement le rendu d’une image d’un plan graphique à un autre et donc, puisqu'on ne peut pas garantir quand la mise à jour se fera, on doit toujours utiliser les shaders ou toujours utiliser le même plan graphique pour la même fenêtre.

La conception de la gestion atomique des modes d'affichage dans le noyau Linux est adaptée à différents usages, du bureau aux smartphones, ce qui permettra à terme de réduire les divergences entre la pile graphique Linux historique et celle modifiée pour Android.

