Journal Amélioration des performances graphiques du noyau 3.12

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
36
25
oct.
2013

Bonjour nal,

Tenez vous bien, en effet Michael Larabel le créateur et principal rédacteur du site phoronix.com s'est rendu compte que la nouvelle version du noyau linux améliorait très notablement les performances graphiques sous linux, benchmarks à l'appui (on est chez phoronix je le rappelle):

The AMD Radeon Performance Is Incredible On Linux 3.12

Je résume ici: des améliorations allant de 51% à 86% sur les performances des cartes graphiques Radeon pour le test Reaction Quake 3!

Et donc fort pertinemment l'auteur des benchs s'est demandé pourquoi ce soudain gain de performance.

Après avoir traqué chaque commit, installé chaque noyau et benché le tout, il a trouvé la cause de l'amélioration: le gouverneur CPU (ondemand).

le commit en cause:
cpufreq: ondemand: Change the calculation of target frequency

Le gouverneur "à la demande" calcule la charge en terme de fréquence et augmente celle-ci si load_freq est plus grand que up_threshold multiplié par la fréquence courante ou moyenne. Cette méthode semble produire des oscillations de fréquence entre le min et le max à cause de, par exemple, une charge relativement faible peut saturer la fréquence CPU minimum et mener le CPU à monter au maximum. A ce moment, le CPU va retourner à la fréquence minimum à cause du peu de charge demandé.

Le changement de méthode de calcul de charge et de fréquence cible sur la base des deux observations suivantes:

  • Le calcul de la charge ne doit pas dépendre de la fréquence courante ou moyenne mesurée. Par exemple, la 80% de charge à 100Mhz n'est pas forcément équivalent à 8% à 1000MHz dans le prochain échantillon d'intervalle.

  • Il doit être possible d'augmenter la fréquence cible à n'importe quelle autre valeur présente dans la table des fréquences proportionnelle à la charge absolue, plutôt qu'uniquement à la fréquence maximum, de manière à ce que:

Fréquence cible = C * charge à laquelle on prend C = policy->cpuinfo.maxfreq/100

Testé sur un intel i7-3770 CPU @ 3.40GHz et sur un Quad core 1500MHz Krait. Le benchmark Phoronix de compilation du noyau Linux 3.1 montre une augmentation de ~1.5% des performances. cpufreqstats (time_in_state) montre que les fréquences moyennes [de la plage des fréquences] sont plus utilisées, avec ce patch. Les fréquences les plus hautes et les plus basses sont moins utilisées d'environs 9%.

[rjw: Nous avons lancé plusieurs autres tests sur des noyaux avec la modification appliquée et dans la grande majorité des cas on constate que l'amélioration des performances améliore aussi la consommation d'énergie. Le changement est justifié aussi par la simplification générale du code en question.]

L'auteur a de plus fait de nouveaux tests et ô bonheur les performances s'améliorent aussi avec le driver catalyst d'amd!

Bref tout ceci n'augure que du bon aussi bien niveau performances qu'économie d'énergie. Je sais pas vous mais moi j'en salive d'avance.

NdA: toutes les traductions sont des traductions libres de l'auteur du journal.

  • # max ?

    Posté par  (site web personnel) . Évalué à 4.

    Est-ce que des tests de performances, avec la fréquence maximum ont été fait ? Sinon, c'est un peu logique que les mécanismes de baisse de fréquences introduisent des latences et de la lenteur.

    "La première sécurité est la liberté"

    • [^] # Re: max ?

      Posté par  . Évalué à 3.

      Phoronix fait ses tests dans des configurations stock out of the box par défaut, et donc avec les variations automatiques de fréquence par défaut (régulateur ondemand).
      Les développeurs du pilote libre radeon, et en particulier Marek Olsak (payé maintenant par AMD) qui était intervenu sur le forum de phoronix, font toujours leurs tests à la fréquence max.

  • # Performance

    Posté par  . Évalué à 3.

    Il n'y a rien d'étonnant, quand on sait qu'on veut le maximum de performance, autant changer le gouverneur pour "performance" au lieu de faire confiance à "ondemand".

    Ce problème décrit de "ondemand" est bien connu de certains jeux, en particulier sous wine. Du coup, pour ceux qui changent déjà à la main leur gouverneur, il n'y aura aucun gain de performance, par contre cela leur évitera de changer de gouverneur avant et après la session de jeu.

    J'aurai utilisé un titre de journal moins sensationnel du coup. Plutot du genre: "amélioration du gouverneur ondemand" ou bien "correction d'un bug de linux" XD. Et du coup cela améliore les performances globales, pas seulement graphiquement.

    • [^] # Re: Performance

      Posté par  . Évalué à 10.

      Il n'y a rien d'étonnant, quand on sait qu'on veut le maximum de performance, autant changer le gouverneur pour "performance" au lieu de faire confiance à "ondemand".

      Non, moi je ne veux pas me préoccuper de ça. Je veux que mon PC économise le maximum d'électricité mais qu'il me fournisse la puissance maximale quand j'en ai besoin. Ça marche très bien sous Windows. Visiblement c'était foireux sur Linux, ça été corrigé, c'est cool.

      Cela dit, il y des projets en cours pour retravailler tout ça (pilote power driver) donc j'espère que ça sera encore mieux dans les mois à venir.

      • [^] # Re: Performance

        Posté par  . Évalué à 4.

        Ça marche très bien sous Windows.

        Ou pas. J'ai l'exemple précis d'une personne qui jouait à Diablo 3 et dont le jeu ramait par moment sur son PC portable. Jusqu'au jour où il avait découvert qu'il pouvait indiquer à Windows qu'il voulait le mode performance maximale (par effet de bord son PC chauffait plus du coup). Ce jour là je lui ai dis que c'était pareil sur linux, on choisit le mode que l'on veut (powersave, ondemand, performance). Ce n'est pas pour rien que ces trois modes existent, sinon seul ondemand existerait si c'était parfait.

        Je veux que mon PC économise le maximum d'électricité mais qu'il me fournisse la puissance maximale quand j'en ai besoin

        Je veux la même chose, mais quand on n'a pas le choix et qu'on tombe à moins de 1fps dans le jeu en fonction des séquences et qu'on constate que c'est à cause du gouverneur, cela met juste la haine à tel point que j'avais été déçu sur le coup.

        Personne ne veut se préoccuper de son gouverneur, moi le premier, mais des fois on n'a pas le choix. Alors c'est bien qu'ils améliorent "ondemand" car personnellement cela m'embette et je trouve cela ridicule de changer de mode de gouvernance quand je veux jouer.

        C'est juste qu'il n'y a rien d'étonnant qu'en améliorant le gouverneur par défaut ondemand, alors cela améliore les performances pour atteindre une performance proche ou égale au gouverneur "performance". D'où ma déception en lisant l'article par rapport à son titre, que je renommerai en "Mise à jour du gouverneur ondemand pour améliorer les performances globales". Après c'est un journal écrit à partir d'un article de phoronix… xD

        • [^] # Re: Performance

          Posté par  . Évalué à 3.

          Au fond, il ya besoin de 2 modes, avec un passage automatique (et transparent) de l'un à l'autre :
          - un mode économe quand l'ordinateur est sur batterie
          - un mode performant quand l'ordinateur est sur secteur

          C'est ce que fait Windows de base non ?

          BeOS le faisait il y a 20 ans !

          • [^] # Re: Performance

            Posté par  . Évalué à 8. Dernière modification le 25 octobre 2013 à 15:16.

            Tu ne veux pas être en mode performant sur secteur si tu n’en as pas absolument besoin, parce que ça chauffe, ça fait du bruit (ventilateur) et la chaleur réduit la durée de vie des composants (un portable qui chauffe à fond 24h/24 ne fera pas de vieux os…)

            Pour Windows je sais pas, mais ce que fait le pilote proprio nvidia c’est carrément interdire le mode performant quand tu es sur batterie (mais bon là on parle plus du CPU).

          • [^] # Re: Performance

            Posté par  . Évalué à 2.

            Encore heureux que non, le proc chauffe suffisamment comme ça et ça fait longtemps que les ventilo de cpu peuvent moduler leur vitesse en fonction de la température qui elle varie en fonction de la fréquence du proc (en plus du voltage), eux même dépendant de la charge de la machine.

            Et pour les ATI/AMD, c'est pareille tu as une fonction d'économie d'énergie qui est la bienvenue en été

            Et oui sur certains jeux le onDemand de windows ou celui d'AMD n'est pas tip top, faut forcer les fréquence minimum.

            Ce n'est pas parce qu'une machine est sur secteur que tu veux qu'elle consomme un maximum, sinon ta facture EDF (ou autre concurrent) va être salée.

            Il ne faut pas décorner les boeufs avant d'avoir semé le vent

          • [^] # Re: Performance

            Posté par  (site web personnel) . Évalué à -3.

            C'est ce que fait Windows de base non ?

            windows change au mode que tu désignes pour chaque cas.
            économe sur secteur et performance sur batterie si ça te chante. Bon ok ce n'est pas par défaut.

            Mais surtout, ce qu'on demande, c'est que ça s'adapte au besoin : des fois, j'ai besoin de perfs maximales sur batterie (je joue) et des fois j'ai besoin que ça chauffe pas trop même sur secteur.

            L'idée reste donc que l'utilisateur dit juste si il priorise la faible conso ou la perf, c'est tout (perso, j'ai mis "économie" pour les deux avec comme seule différence la durée pour la mise en veille de l'écran, par exemple), il ne devrait pas à avoir à changer sa politique suivant ce qu'il fait (la machine doit être capable de comprendre)

            Finalement, on constate que le titre du journal va un peu vite en conclusion, car si on joue, actuellement on met sur "performance" car Linux n'était pas capable de correctement gérer le mode "ondemand" (hum… On est en 2013 non? bon ok les gros jouers ne sont pas sous Linux) alors que Windows le fait depuis des lustres (désolé, mais j'ai rarement vu Windows passer en mode basse fréquence quand Diablo est lancé, on contraire), les performances ne s'améliorent pas sur la vidéo, on a juste optimisé la gestion des fréquences.

            Un grand titre pour surtout dire qu'on a corrigé un bug (mauvais algo qui prennait que 2 valeurs, min et max, plutôt que l'ensemble des valeurs possibles, c'est bien ça?) dans le programme "ondemand" :).

            • [^] # Re: Performance

              Posté par  . Évalué à 2.

              désolé, mais j'ai rarement vu Windows passer en mode basse fréquence quand Diablo est lancé

              Même sur batterie ? Même sur une machine surdimensionnée par rapport au jeu demandé ? Le fait que ça n'arrive pas sur ton windows ne veut pas dire que ça n'arrive sur aucun windows; le mien (un 7 familial 64bits), par exemple, à une fâcheuse tendance à changer de mode lorsqu'il passe sur batterie (enfin avait, j'ai enfin trouvé où lui dire de ne pas changer de mode) (ça m'arrivait sur SW tor, et path of the exile), et crois moi ça se sent lorsqu'il passe en mode économie d'énergie.

              Par contre je te rejoins sur le titre qui est très grandiloquent, pour juste une correction/amélioration dans l’ordonnanceur

              Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • # Pourquoi les constructeurs augmentent le nombre de points de fonctionnement tension/fréquence?

    Posté par  . Évalué à -2.

    Moi ce que je retiens c'est que les gens qui modifient cpufreq n'ont pas l'air de maitriser le sujet.

    dans la grande majorité des cas on constate que l'amélioration des performances améliore aussi la consommation d'énergie.

    D'un point de vue énergétique si on a une charge de 50% il est plus efficace de rester a un point de fonctionnement de 50% que d'osciller entre min et max (même sans compter le cout d'un changement de fréquence).
    Ils auraient voulu faire un patch pour optimiser la gestion de l’énergie, ils seraient allé dans cette direction. Dommage que ça soit par hasard…

    • [^] # Re: Pourquoi les constructeurs augmentent le nombre de points de fonctionnement tension/fréquence?

      Posté par  . Évalué à 10.

      D'un point de vue énergétique si on a une charge de 50% il est plus efficace de rester a un point de fonctionnement de 50% que d'osciller entre min et max

      Moi je pense que c'est beaucoup plus compliqué que ça.

    • [^] # Re: Pourquoi les constructeurs augmentent le nombre de points de fonctionnement tension/fréquence?

      Posté par  (site web personnel) . Évalué à -1.

      D'un point de vue énergétique si on a une charge de 50% il est plus efficace de rester a un point de fonctionnement de 50% que d'osciller entre min et max (même sans compter le cout d'un changement de fréquence).

      lol (désolé, trop gros), tu ne connais pas grand chose…
      avec tout 50%, ta machine va se tourner les pouces pendant qu'elle n'a rien à faire, et le travail va durer plus longtemps quand elle a quelque chose à faire donc plus long donc plus de conso --> énorme conso en perspective.

      La gestion de conso est loin d'être aussi simpel que tu l'imagines (il y en a certains qui se sont amusé à tester, certes je n'ai plus le lien en tête, et genre pour une tache donnée il vaut mieux être "à fond" pendant un court laps de temps et s'endormir ensuite que d'être "moyen", ça aide la batterie et la satisfaction utilisateur sur la durée du travail, double gain)

      Dommage que ça soit par hasard…

      vas-y, propose ta méthode complète, et benche, qu'on rigole…

      • [^] # Re: Pourquoi les constructeurs augmentent le nombre de points de fonctionnement tension/fréquence?

        Posté par  . Évalué à 2.

        Le ON/OFF c'est simple en effet… Et encore, une veille efficace ça a aussi un cout temporel et énergétique. Et comme tu ne sais jamais quand tu seras réveillé, tu comprendras que c'est aussi un compromis dont le résultat dépend de l'utilisation.
        Donc oubli le "a fond" et veille c'est HS dans le contexte du patch dont on parle. Ici le patch permet de passer plus de temps a un point de fonctionnement plutôt que d'osciller entre min et max. Et d'un point de vue énergétique, pour qui connait le changement dynamique de tension et de fréquence, c'est évidement plus efficace.

        Et sinon, pourquoi les constructeurs augmentent-ils le nombre de points de fonctionnement tension/fréquence?

    • [^] # Re: Pourquoi les constructeurs augmentent le nombre de points de fonctionnement tension/fréquence?

      Posté par  (site web personnel) . Évalué à 3. Dernière modification le 25 octobre 2013 à 17:23.

      Le problème est que tu ne réduis que la consommation d'énergie pour le cpu, or la consommation reste la même pour les caches par exemple. Si la tache est plus longue, cela n'est plus rentable d'être à 50% de fréquence.

      J'avais lu qu'il y avait plus à gagner à baisser la fréquence des DRAM, dans le cas de calcul cpu bound, et à baisser celle du cpu dans le cas memory bound.

      Intel avait conçu les points de fonctionnement comme une protection thermique, et non une baisse de consommation. Très souvent le on/off est plus efficace. Surtout si le off implique la coupure de l'alimentation du bloc logique (mais c'est très long à réveiller ~100ms ?).

      "La première sécurité est la liberté"

      • [^] # Re: Pourquoi les constructeurs augmentent le nombre de points de fonctionnement tension/fréquence?

        Posté par  . Évalué à 3.

        Effectivement on peut toujours argumenter, au final ça dépend de ce que le processeur doit exécuter.

        Une chose est sure, aujourd'hui Intel présente son "speedStep" comme un compromis performance/consommation. Donc j'imagine que leur architecture est aussi conçu pour que ça aie un intérêt, notamment au niveau des caches et du multicœur.

        Dans le contexte du patch on a un cœur qui est charge a X%, donc soit on est I/O bound, soit on est pas bound parce qu'on a un monstre de puissance sous le capot. Dans les 2 cas changer la tension et la fréquence est avantageux d'un point de vue énergétique, et il est préférable d’être au plus proche de la fréquence nécessaire que d'osciller entre min et max (voir les courbes du lien que je donne). Précisément ce que fait le patch.
        Si on est cpu bound, on reste a la vitesse maximum cela va de soit…

        Pour que le ON/OFF dans ce contexte soit avantageux par rapport au changement de tension/fréquence, il faut un état de veille qui réduit la consommation statique, donc un état de veille profond qui demande trop de temps pour y entrer/en sortir. Plus une grosse dégradation de l’expérience utilisateur.

        • [^] # Re: Pourquoi les constructeurs augmentent le nombre de points de fonctionnement tension/fréquence?

          Posté par  (site web personnel) . Évalué à 3.

          Je ne sais pas si les x86 fonctionnent de la même façon, mais les Omap3 avaient une gestion distincte concernant les caches. Ils n'avait que 2 modes : On ou rétention. La consommation statique est aussi proportionnel à la tension d'alimentation. Les caches prennent une grosse partie de ces puces, 30% à vue de nez. Si on baisse la tension/fréquence cpu, sans faire de même avec les caches, la puissance restant la même, l'énergie consommée augmente pour un cycle cpu.

          "La première sécurité est la liberté"

    • [^] # Re: Pourquoi les constructeurs augmentent le nombre de points de fonctionnement tension/fréquence?

      Posté par  . Évalué à 3.

      https://linuxfr.org/news/gestion-de-l%C3%A9nergie-se-d%C3%A9p%C3%AAcher-de-ne-rien-faire

      En résumé, la seule façon logique d'utiliser un processeur est de le faire fonctionner aussi rapidement que possible afin de lui permettre de passer le plus de temps possible en état de sommeil, situation dans laquelle la fréquence et la tension sont au minimum. La seule façon logique.
      Matthew Garrett

      Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

      • [^] # Re: Pourquoi les constructeurs augmentent le nombre de points de fonctionnement tension/fréquence?

        Posté par  . Évalué à 2.

        Il omet de préciser que passer en veille n'est pas gratuit. Par exemple quand tu éteins le cache, il faudra ensuite remettre l'alimentation, synchroniser l'horloge et puis surtout recharger le cache. Entrer et sortir de veille n'est pas anodin, tout ceci a un cout temporel et énergétique. Plus tu as une veille efficace, plus son cout est important (plus il faut une période d’inactivité longue pour que ça soit rentable).

        Maintenant imagine que tu as une charge de travail a peu prêt stable et repartie dans le temps. On est en 2013 et tu a un processeur a plus de deux cœurs. Tu écoutes de la musique en surfant sur le web, tout en téléchargeant la dernière version de ta distribution préférée, tu as 50 services qui tournent en arrière plan… Supposons que ta charge de travail tourne autour de 20 30% des capacités d'un cœur. Pour simplifier disons que un cœur est en veille profonde. Mais pour le deuxième cœur, impossible de se mettre en veille -suffisamment profonde pour être suffisamment efficace- dans ce contexte. Hors, ici, entre rester a la fréquence min et basculer régulièrement au max, et rester a des tensions/fréquences intermédiaires au plus prêt de la charge de travail, la 2eme solution est consomme moins d’énergie. Exactement ce dont parle le patch: min/max versus point intermédiaire.

        Mise en veille et changement de tension/fréquence sont complémentaires. Mais dans le contexte du patch, la mise en veille est juste hors sujet.

        • [^] # Re: Pourquoi les constructeurs augmentent le nombre de points de fonctionnement tension/fréquence?

          Posté par  . Évalué à 2.

          Il me semble que la majeure partie du travail d'intel consiste à rendre les changements d'état (quelque soit le niveau de sommeil) les plus rapides possibles. Le fait que le cache soit vidé ne me semble pas si gênant que ça car c'est déjà ce qui se produit lorsque l'on fait travailler plusieurs tâches.

          L'idée globale de Matthew Garret c'était de dire qu'il ne faut pas manuellement choisir la fréquence, mais plutôt laisser ondemande choisir le meilleur.

          Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

          • [^] # Re: Pourquoi les constructeurs augmentent le nombre de points de fonctionnement tension/fréquence?

            Posté par  . Évalué à 2.

            Il me semble que la majeure partie du travail d'intel consiste à rendre les changements d'état (quelque soit le niveau de sommeil) les plus rapides possibles.

            Oui. Et aussi a rendre les changements de P-state le plus rapide possible.

            Le fait que le cache soit vidé ne me semble pas si gênant que ça car c'est déjà ce qui se produit lorsque l'on fait travailler plusieurs tâches.

            en fait non. Ça a peut être existé sur certaine architecture, mais c'est généralement faux.

            L'idée globale de Matthew Garret c'était de dire qu'il ne faut pas manuellement choisir la fréquence, mais plutôt laisser ondemande choisir le meilleur.

            Jusqu'ici je suis d'accord. Rester a la fréquence min est idiot. Mais je ne suis pas d'accord avec la première citation.

            En résumé, la seule façon logique d'utiliser un processeur est de le faire fonctionner aussi rapidement que possible afin de lui permettre de passer le plus de temps possible en état de sommeil, situation dans laquelle la fréquence et la tension sont au minimum. La seule façon logique.

            Si en plus il définit le sommeil comme fréquence et tension minimales alors il se plante en beauté.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.