Il existe trois principaux paramètres de performance qui régissent l'optimisation du noyau, dont l'un est rarement discuté dans le contexte des deux autres et presque jamais soumis à des tests de référence. Cela a réduit et faussé notre perception de la performance :
- Le débit : Ce qui est testé et discuté par les médias. Une mesure de la quantité de données pouvant passer à travers le processeur dans un laps de temps donné.
- Efficacité énergétique : Ce qui est également souvent testé ; en fonction de la manière dont vous le mesurez, le coût (en énergie ou en chaleur) pour traiter une certaine quantité de données ou pour maintenir un système en fonctionnement sur une certaine période de temps. Cela a des répercussions à la fois sur la durée de vie de la batterie des ordinateurs portables et sur le coût de fonctionnement des serveurs ou d'autres matériels "toujours actifs".
- Latence : Presque jamais testée, mais tout aussi importante. C'est une mesure du temps moyen nécessaire à un signal ou à des données pour voyager à travers un chemin, généralement mesuré en millisecondes. Le mot "jitter" décrit les variations de latence au fil du temps, et est un sous-composant de la performance en matière de latence.
Il s'agit d'un cas classique de "voici 3 options, choisissez-en 2". Vous pouvez avoir le débit et l'efficacité énergétique, mais au détriment de la latence. Vous pouvez avoir le débit et une faible latence, mais au détriment de l'efficacité énergétique. Vous pouvez avoir une faible latence et une efficacité énergétique, mais cela se fera au détriment du 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 millisecondes aux CPU pour "se réveiller" de différents niveaux d'états de veille (plus le sommeil est profond, plus il faut de temps pour se réveiller), ce qui rend l'échelle de fréquence du CPU horrible en termes de performances en matière de latence et probablement l'une des plus grandes sources de problèmes. C'est pourquoi même les systèmes Mac OS bénéficient énormément de la désactivation de l'échelle de la fréquence du CPU pour éviter les dépassements et les sous-dépassements de tampon (un dépassement de tampon se produit lorsque le traitement prend trop de temps pour se terminer et se rerouter, et donc la dernière partie est jetée car le tampon se remplit ; tandis qu'un sous-dépassement se produit lorsqu'il n'y a pas suffisamment de remplissage du tampon à temps pour le traitement. les deux sont couramment appelés "xruns" et indiquent une perte potentielle de données)
Un autre exemple est constitué par les cœurs logiques et le multi-threading symétrique, qui est un sous-ensemble de la "course au sommeil" en utilisant tous les cœurs de manière plus efficace, mais au prix d'augmenter le temps nécessaire à l'achèvement de chaque processus individuel. Cela est également bon pour l'efficacité énergétique et le débit, mais pas pour la latence, qui est liée à la manière dont des tâches individuelles "critiques pour la mission" peuvent être accomplies de manière fiable et rapide, et non à un groupe total de tâches.
-générique : pour tout cas d'utilisation n'impliquant pas de latence et de routage garanti d'une certaine quantité d'informations dans le processeur et vers leur destination. Le mode générique fournit en général les meilleures performances en termes de débit ainsi que d'efficacité énergétique, mais dépriorise la latence
les noyaux -lowlatency, -rt et -temps réel offrent des nuances variables d'attention accrue à la latence, au détriment croissant ou à la dépriorisation du débit et/ou de l'efficacité énergétique. Les cas d'utilisation déterminent lesquels sont les plus adaptés à quelles circonstances, et ce ne sont pas les seules options. Par exemple, il y a aussi https://liquorix.net/ qui prétend être optimisé pour la plupart des scénarios d'utilisation courants en faisant de petits sacrifices en matière de débit pour des gains relativement importants en performances de latence.
Il y a des éléments de cette question qui se chevauchent de manière confuse avec d'autres questions, et certains éléments de cette question deviennent obsolètes alors que les distinctions de performance entre les lignes de noyaux disparaissent. Par exemple, le noyau -generic 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, le noyau -générique peut désormais gérer des latences d'environ 20 ms avec une certaine fiabilité (aucun ou peu de dépassements ou de sous-dépassements de tampon).
Je pense honnêtement que cette fragmentation découle :
- d'un sous-produit des logiciels open source, où vous obtenez une divergence des lignes de noyaux et des logiciels en général pour les optimiser pour des cas d'utilisation spécifiques (oui, "-generic" est un cas d'utilisation spécifique, juste un qui couvre spécifiquement la plupart des cas d'utilisation :) et
- du fait de pratiquement ignorer l'importance de l'optimisation des performances en matière de latence pour l'expérience de l'utilisateur -generic 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 un génie ou une vision!). Le résultat a été un léger compromis en termes de performances de débit pour un système qui gère mieux les problèmes de latence. Ainsi, Mac OS X -- et sa déclinaison iOS -- ont fini par dominer le marché de la production multimédia numérique. Avec un seul noyau. Et les utilisateurs non-multimédia ne se plaignent pas des performances de débit de Mac OS X constamment inférieures, car personne ne se soucie réellement d'avoir 29 sec contre 30 sec pour transcoder un fichier, ou de 4.75 sec contre 5 sec pour démarrer un programme (même les testeurs de performance et les "fanatiques de la performance" ne remarquent pas ce genre de disparités au quotidien, et tout le monde se soucie de savoir si l'UX donne des saccades et si l'audio présente des problèmes. C'est une question psychologique liée à l'importance de la latence et de la réactivité, et non une question de performances de débit (qui est la seule chose que les guerres des benchmarks considèrent), et jusqu'à présent seul Mac OS X a vraiment pris en compte cela dans la conception de tout un système d'exploitation.
https://liquorix.net/ pourrait être plus en phase avec le noyau de Mac en termes de ses priorités de performances ajustées (je le confirme actuellement). Et c'est la direction que prend le noyau -generic, je crois (et j'espère). Ce sera suffisant pour 90 et quelques pourcent des utilisateurs, sauf ceux aux extrêmes qui ont VRAIMENT besoin d'un. Tout le débit dont ils peuvent disposer ou b. d'une latence et d'une jittering sans problèmes. Et pour ces cas, il y aura toujours une sorte de noyau ou de noyaux personnalisés. Je crois que la NASA crée ses propres noyaux, mais je pourrais me tromper :)