Trois paramètres de performance majeurs régissent l'optimisation des noyaux, dont l'un est rarement discuté dans le contexte des deux autres et n'est presque jamais évalué. Cela a réduit et faussé notre perception des performances :
- Débit : Ce qui est évalué et discuté par les médias. Il s'agit d'une mesure de la quantité de données pouvant être acheminées par le processeur dans un laps de temps donné.
- Efficacité énergétique : Selon la façon dont on la mesure, il s'agit de savoir combien il est coûteux (en énergie ou en chaleur) de traiter une certaine quantité de données ou de maintenir un système en fonctionnement pendant une période donnée. Cela a des répercussions sur la durée de vie des batteries des ordinateurs portables et sur le coût de fonctionnement des serveurs ou d'autres matériels "toujours en service".
- Latence : Elle n'est presque jamais évaluée, mais elle est tout aussi importante. Il s'agit de la mesure du temps moyen nécessaire à un signal ou à des données pour parcourir un chemin, généralement mesuré en millisecondes. Le terme "gigue" décrit les variations de la latence dans le temps et constitue une sous-composante de la performance de latence.
C'est un cas classique de "voici 3 options, choisissez-en deux". Vous pouvez avoir le débit et l'efficacité énergétique, mais vous sacrifiez la latence. Vous pouvez avoir un débit et une faible latence, mais vous sacrifierez l'efficacité énergétique. Vous pouvez avoir une faible latence et une efficacité énergétique, mais cela sacrifiera le débit.
Un exemple de ce compromis est la course au sommeil : https://en.wikipedia.org/wiki/Race_to_sleep . Malheureusement, il faut toujours plusieurs ms aux CPU pour se "réveiller" à partir de différents niveaux d'états de sommeil (plus le sommeil est profond, plus il faut de temps pour se réveiller), ce qui rend la mise à l'échelle de la fréquence du CPU horrible pour les performances de latence et probablement l'un des plus grands contrevenants. C'est pourquoi même les systèmes Mac OS bénéficient énormément de la désactivation de la mise à l'échelle de la fréquence du processeur pour éviter les dépassements et les sous-dépassements de la mémoire tampon (un dépassement de la mémoire tampon se produit lorsqu'un processus prend trop de temps pour se terminer et se réacheminer, et que le dernier bit est rejeté alors que la mémoire tampon se remplit à nouveau ; tandis qu'un sous-dépassement est un échec à remplir suffisamment la mémoire tampon à temps pour le traitement.)
Il y a aussi les cœurs logiques et le multithreading symétrique, qui est un sous-ensemble de la "course au sommeil" en utilisant tous les cœurs plus efficacement, mais au prix d'une augmentation du temps nécessaire à chaque processus individuel pour se terminer. Cela est également bon pour l'efficacité énergétique et le débit, mais pas pour la latence, qui concerne la fiabilité et la rapidité d'exécution des tâches individuelles "critiques", et non la somme totale des tâches.
-générique : pour tout cas d'utilisation qui ne concerne pas la latence et l'acheminement garanti d'une certaine quantité d'informations dans le processeur et vers sa destination. En général, le générique offre les meilleures performances en termes de débit et d'efficacité énergétique, mais il ne tient pas compte de la latence.
les noyaux -lowlatency, -rt et -realtime accordent une attention plus ou moins grande à la latence, avec un sacrifice ou une privatisation croissante du débit et/ou de l'efficacité énergétique. Les cas d'utilisation déterminent quels sont les plus appropriés pour quelles circonstances, et ce ne sont pas les seuls choix. Par exemple, il y a aussi https://liquorix.net/ qui prétend être optimisé pour les scénarios d'utilisation les plus courants en faisant de petits sacrifices en termes de débit pour des gains relativement importants en termes de latence.
Certains éléments de cette question se chevauchent de manière confuse avec d'autres questions, et certaines parties de cette question deviennent obsolètes à mesure que les distinctions de performance entre les lignes de noyau disparaissent. Par exemple, le noyau -générique a inclus de nombreuses optimisations à faible latence (comme PREEMPT) qui rendent les autres noyaux spécialisés encore plus spécialisés. Il est difficile de donner des chiffres précis, mais sur mon système, -generic peut maintenant gérer des latences allant jusqu'à environ 20 ms avec une certaine fiabilité (peu ou pas de dépassement ou d'insuffisance de tampon).
Je pense honnêtement que cette fragmentation existe depuis
- un sous-produit des logiciels à code source ouvert, où l'on bifurque des lignes de noyau et des logiciels en général pour les optimiser en fonction de cas d'utilisation spécifiques (oui, "-générique" est un cas d'utilisation spécifique, mais qui se trouve couvrir la plupart des cas d'utilisation :) et
- Ignorer presque complètement l'importance de l'ajustement des performances à faible latence pour l'expérience de l'utilisateur générique dans les paradigmes Linux et Windows.
Mac OS X est différent, et vous pouvez lire pourquoi ici : https://www.cse.unsw.edu.au/~cs9242/10/lectures/09-OSXAudiox4.pdf (c'était politique et économique, pas génial et visionnaire !). Le résultat a été un léger compromis dans les performances de débit pour un système qui gère mieux les problèmes de latence. Et c'est ainsi que Mac OS X - et son dérivé iOS - a fini par s'emparer du marché de la production multimédia numérique. Avec un seul noyau. Et les utilisateurs non multimédias ne se plaignent pas des performances de débit constamment inférieures de Mac OS X, parce que personne ne se soucie de 29 secondes contre 30 secondes pour transcoder un fichier, ou de 4,75 secondes contre 5 secondes pour lancer un programme (même les évaluateurs et les "fous de performances" ne remarquent pas ce genre d'écarts au quotidien, dans le monde réel), et tout le monde se soucie de savoir si l'interface utilisateur bégaie et si le son glisse. Il s'agit d'une question psychologique liée à l'importance de la latence et de la réactivité, et non d'une question de performance de débit (qui est la seule chose que les guerres de benchmarking considèrent), et jusqu'à présent, seul Mac OS X l'a vraiment pris sérieusement en considération dans la conception d'un système d'exploitation complet.
https://liquorix.net/ est peut-être plus en accord avec le noyau Mac en termes de priorités de performance (je suis en train de le confirmer). Et c'est la direction que prend le noyau générique, je crois (et j'espère). Ce qui sera suffisant pour 90 % des utilisateurs, à l'exception de ceux qui se trouvent aux deux extrêmes et qui ont VRAIMENT besoin a. de tout le débit possible ou b. d'une latence et d'une gigue extrêmement faibles. Et pour ces cas, il y aura toujours une sorte de noyau ou de noyaux personnalisés. Je crois que la NASA développe les siens, mais je peux me tromper :)