Journal Le microprocesseur, ce monstre de puissance qui passe son temps à attendre

Posté par (page perso) .
174
21
nov.
2018

Avez-vous déjà remarqué à quel point le microprocesseur de votre ordinateur est un composant extrêmement puissant, et à quel point le moindre accès aux données est une horreur de lenteur de son point de vue ?

Pour essayer de se représenter tout ça, on va imaginer que vous êtes un cœur de microprocesseur, ralenti d'un facteur un milliard.

Or donc, vous êtes un cœur d'un microprocesseur moderne. Vous êtes avec d'autres collègues dans un open space ; votre boulot – et vous n'avez pas le choix – c'est d'exécuter des instructions, c'est-à-dire pour vous de taper au clavier, une touche par impulsion d'horloge1. Un processeur moderne peut être cadencé à 4 GHz, ce qui fait pour vous 4 frappes par seconde, ce qui est déjà rapide.

Et voici que vous avez besoin d'une information que vous n'avez pas. Zut, flûte, raalgamaziel, il vous faut la procurer.

Est-ce qu'elle est dans le cache L1 ? Vous prenez un peu plus d'une seconde (un peu plus d'1 ns ou 4 instructions) pour lire ce post-it sur votre bureau.

Non. Est-ce qu'elle est dans le cache L2 ? Vous prenez environ cinq secondes (environ 5 ns ou 20 instructions) pour parcourir la feuille à côté de votre clavier.

Toujours pas. Est-ce que par hasard elle serait dans le cache L3 ? Vous devez vous lever et prendre entre quinze et vingt secondes (15 à 25 ns soit 60 à 100 instructions) pour consulter ce schéma accroché à un mur.

Ça commence à puer cette histoire. Où diable peut se trouver cette information indispensable ?

Est-ce un résultat de calcul que doit vous donner un collègue (donc un autre cœur) ? Selon l'organisation de votre bureau (la topologie du processeur) et l'humeur dudit collègue, vous aurez la réponse dans entre quarante secondes et deux minutes vingt (40 à 140 ns soit 160 à 560 instructions).

C'est aussi l'ordre de grandeur du temps qu'il va vous falloir patienter pour récupérer une information planquée dans les banques de mémoire du bureau d'à côté : une grosse minute à plus d'une minute et demie (70 à 100 ns, soit 280 à 400 instructions). C'est déjà très long, même par rapport à votre schéma sur le mur du bureau.

Et si jamais vous n'avez toujours pas votre information, là c'est le drame. Parce que toute autre forme de stockage va être vraiment très lente à réagir par rapport à tout ce qu'on vient de voir.

Si vos données sont sur un SSD au format M2, cas le plus favorable, vous en avez pour une petite journée (au moins 5h30) de recherche à la bibliothèque (plus de 0.02 ms, soit plus de 20 000 ns… et donc 80 000 instructions2).

Un SSD au format SATA est encore plus long, c'est comme si vos données étaient livrées par un coursier rapide : ça arrive vite, mais il faut quand même compter plus d'une journée et d'une nuit entières… (à la louche 100 μs, 400 000 instructions3).

Et si votre information n'est toujours pas là… c'est la catastrophe.

S'il faut la faire venir depuis un disque dur mécanique ou par Internet depuis une connexion fibre, non seulement vous pouvez partir en vacances, mais en plus vous n'aurez jamais assez de congés payés pour patienter jusqu'à ce que votre donnée soit arrivée, puisqu'il vous faudra environ deux mois entre la demande et l'arrivée de ce dont vous avez besoin ! (un ordre de grandeur de 5 ms… soit 5 000 000 ns et 20 000 000 instructions4 !)

Un chiffre que l'on peut tripler si la connexion Internet est une liaison cuivre ; la présence d'un WiFi dans le circuit permet probablement de concevoir intégralement un enfant.

(Tant qu'on est dans les comparaisons bizarres, si vous exécutez le code d'un jeu vidéo, vous avez un budget de 16 666 666 secondes soit plus de six mois pour le calcul d'une image pour avoir un rendu fluide. C'est énorme… tant que les données sont en mémoire, cf ci-dessus).

Mais la véritable situation catastrophique dans laquelle vous allez être véritablement bloqué sans rien faire, c'est si par malheur votre code attend la réaction d'un humain : s'il est surpris, il va mettre au moins une seconde réelle à réagir, soit un milliard de secondes pour vous, ce qui équivaut à… près de 32 ans. Vous affichez la popup en débutant votre premier boulot, l'utilisateur clique quand vous commencez à penser à votre retraite. S'il est réactif.

Et voilà qui remets à notre échelle des unités très variées (ms, ns, parfois μs) que l'on utilise peu et donc appréhende mal surtout si elles sont mélangées ! J'espère ne pas m'être trop planté dans mes calculs, et que cette petite analogie filée vous aura permis de comprendre :

  • La puissance réelle et affolante des microprocesseurs modernes ;
  • Pourquoi on a plein de niveaux de cache, des pipelines et autres techniques pour que le processeur serve pendant les attentes, et pourquoi les SSD sont aussi agréables par rapport à des disques mécaniques ;
  • Pourquoi c'est scandaleux que sur du matériel moderne on trouve des logiciels qui ne font rien de particulièrement complexe mais qui utilisent quand même tout le processeur.

Et ça c'est juste du côté matériel, sans même parler du rôle du système d'exploitation, qui va profiter d'une attente d'entrée/sortie pour changer de contexte ou mettre le processeur en veille. On comprends alors mieux l'intérêt des frameworks qui gèrent ces entrées/sorties de manière non bloquante.


Comme d'habitude, ce billet est placé sous licence CC-BY 4.0 et comme souvent c'est une adaptation du billet du même titre publié sur Zeste de Savoir, complété par des informations fournies en commentaires.


  1. En réalité, un microprocesseur n'exécute pas une instruction par impulsion d'horloge, pour des tas de raisons assez compliquées. Mais pour les besoins de la démonstration, on va faire comme si. 

  2. C'est énorme : 80 000 instructions, si représentées par 80 000 frappes au clavier, c'est approximativement la taille de deux des nouvelles de cette page

  3. Votre vous-processeur aurait pu recopier Alice au Pays des Merveilles

  4. Avec toujours la même équivalence et un standard de 5 caractères par mot pour l'anglais, ça laisse le temps de copier plus de deux fois l'intégrale du Trône de Fer

  • # Chipotage

    Posté par . Évalué à 10 (+13/-0).

    Si vos données sont sur un SSD au format M.2, cas le plus favorable, vous en avez pour une petite journée (au moins 5h30) de recherche à la bibliothèque (plus de 0.02 ms, soit plus de 20 000 ns… et donc 80 000 instructions2).

    Le cas le plus favorable, c'est un SSD NVMe, qui communique directement sur le bus PCI Express. Le format M.2 permet d'utiliser des SSD NVMe mais aussi SATA.

    C'est aussi possible d'utiliser des SSD NVMe sans port M.2, qui se branchent sur un connecteur PCI Express classique.

    • [^] # Re: Chipotage

      Posté par (page perso) . Évalué à 8 (+6/-0).

      Exact et la précision est toujours bienvenue même pour ce genre d'exercice.

      La connaissance libre : https://zestedesavoir.com

  • # Mais ? Ben ?

    Posté par . Évalué à 10 (+32/-0). Dernière modification le 21/11/18 à 23:10.

    Pourquoi c'est scandaleux que sur du matériel moderne on trouve des logiciels qui ne font rien de particulièrement complexe mais qui utilisent quand même tout le processeur.

    Ça te plairait d'alterner des phases de 15 secondes de travail et 6 mois de placard ? Ces logiciels essaient de donner du sens au travail du processeur. C'est du management par le bonheur.

    THIS IS JUST A PLACEHOLDER. YOU SHOULD NEVER SEE THIS STRING.

  • # Intéressante comparaison

    Posté par . Évalué à 10 (+12/-0).

    Bravo pour cette comparaison. Je n'avais jusqu'à aujourd'hui entendu que des comparaisons à base de ns, µs, ms qui donne une idée mais qui reste assez flou. Ramener tout cela au niveau humain rends les choses plus claires je trouve. Donc merci. :)

  • # fréquence dynamique

    Posté par . Évalué à 10 (+9/-0).

    Excellence mise en perspective :)

    Et ça c'est juste du côté matériel, sans même parler du rôle du système d'exploitation, qui va profiter d'une attente d'entrée/sortie pour changer de contexte ou mettre le processeur en veille.

    Oui, un CPU x86 de moins de quinze ans possède des paliers de fréquence+tension qui peuvent changer dynamiquement. C'est le but du gouverneurs CPU de gérer ces paliers.

    Mais même en dessous du controle du système d'exploitation il y a des changements dynamiques de fréquence CPU.
    Ainsi depuis dix ans on a des modes Turbo directement gérés par le CPU selon l'utilisation des cœurs et la température. Même technologie dans les cartes graphiques.
    Et à l'époque des AT, on avait le bouton "Turbo" (en fait le mode normal) et des jumpers pour régler le sous-cadençage indispensable pour les vieux jeux DOS qui sinon tournaient trop rapidement.

    • [^] # Re: fréquence dynamique

      Posté par (page perso) . Évalué à 9 (+7/-0).

      des jumpers pour régler le sous-cadençage indispensable pour les vieux jeux DOS qui sinon tournaient trop rapidement.

      rho toi aussi tu es un vieux :-) c'est vrai que le passage de 1 MHz à 4,66 MHz puis 16 MHz rendaient certains jeux injouables (ou avec des réflexes de folie).

      • [^] # Re: fréquence dynamique

        Posté par . Évalué à 7 (+6/-1). Dernière modification le 22/11/18 à 07:43.

        D'où le bouton turbo des PC jusqu'aux 486 : redescendre la fréquence du PC pour retomber dans je ne sais quel standard (style 286 je crois).

        Bouton Turbo mal nommé parce que activé c'est simplement la vitesse normale, et désactivé c'est un CPU fortement ralenti.

        (oups déjà dit plus haut, un modérateur peut supprimer ce commentaire)

        • [^] # Re: fréquence dynamique

          Posté par (page perso) . Évalué à 9 (+8/-0).

          Voila on glande tranquillement sur LinuxFr et paf, vous avez répondu à une énigme de mon adolescence que je n'avais pas encore résolue (du moins je n'ai même pas essayé de la résoudre) : l'énigme de ce bouton turbo qui épatait les copains :).

        • [^] # Re: fréquence dynamique

          Posté par . Évalué à 10 (+11/-0). Dernière modification le 22/11/18 à 09:35.

          Bouton Turbo mal nommé

          Parle pour toi, utilisateur, commercialement c'est bien mieux comme ça.

        • [^] # Re: fréquence dynamique

          Posté par (page perso) . Évalué à 3 (+2/-0).

          roh ouai ce bon vieux turbo, qui faisait passer mon 386 de 8 à 16Mhz.
          Autant dire qu'il était toujours actif :d

  • # Et la RAM ?

    Posté par (page perso) . Évalué à 2 (+1/-0). Dernière modification le 22/11/18 à 09:11.

    Excellente comparaison, merci ;)
    Par contre, tu oublies aussi l'accès en RAM (DDR4 ..) non ?

    Edit: Ah pardon, c'est les banques mémoires du bureau de juste à coté ! lu trop vite, désolé ;)

    • [^] # Re: Et la RAM ?

      Posté par (page perso) . Évalué à 3 (+1/-0). Dernière modification le 22/11/18 à 09:32.

      J'avoue, je n'ai pas donné la correspondance dans le langage informatique « habituel » pour ce point.

      La connaissance libre : https://zestedesavoir.com

  • # durée de vie

    Posté par . Évalué à 9 (+9/-0).

    Il manque quand même une donnée de base dans tout ce comparatif : la durée de vie.
    Environ 100 ans pour un homme, environ 5 ans en temps réel pour le processeur (ou 10 ans, voire plus pour ceux qui ne changent pas souvent de machine).

    Mais avec la mise en perspective, le facteur un milliard, attendre une info pendant un mois ou deux quand tu vis 5 millards d'années… c'est beaucoup moins choquant que lorsque tu as moins de 100 ans devant toi.

    • [^] # Re: durée de vie

      Posté par (page perso) . Évalué à 7 (+5/-0).

      Je ne l'ai pas mis pour deux raisons :

      Parce que je n'avais pas de valeur de comparaison pertinente : dans l'immense majorité des cas, le processeur est en fin de vie non pas parce qu'il est intrinsèquement hors service, mais parce qu'il est dépassé pour l'usage qui en est fait par du matériel plus récent (puissance supérieure, consommation inférieure, processeur encore OK mais plus les composants autour…)

      Parce que du coup on se retrouve avec un problème d'échelle dans le sens inverse : 5 ans réels en nanosecondes, c'est 1,6 x 1017 donc l'équivalent, comme tu le dis, c'est 5 milliards d'année, une durée que personne ne se représente vraiment.
      D'autant que les échelles de vie et de réactivité ne sont pas les mêmes : tu pourrais te dire que sur 5 milliards d'année tu pourrais te permettre sans souci de passer 100 ans sur un calcul en tant que processeur ; mais ça serait l'équivalent de plus de 3 secondes pour un utilisateur… donc probablement beaucoup trop long.

      La connaissance libre : https://zestedesavoir.com

      • [^] # Espérance de vie

        Posté par . Évalué à 3 (+2/-0).

        Il y a aussi l'espérance de vie. L'être humain (moyen) a besoin de dormir 8h par jour soit 1/3 de sa vie. Quel est l'impact du manque de repos sur un microprocesseur ? Quelle serait l'espérance de vie d'un processeur tout le temps occupé ? Réfléchir fait chauffer le composant (cerveau ou microprocesseur). Le chaud, contrairement au froid, n'est pas bon conservateur.

        Pour résumer : est-ce qu'une partie du temps d'attente de microprocesseur n'est pas aussi du temps de repos nécessaire à sa bonne santé sur le long terme ?

        • [^] # Re: Espérance de vie

          Posté par (page perso) . Évalué à 4 (+2/-0).

          Si le processeur et son système de refroidissement sont correctement conçus il peut tourner à 100% en permanence sans aucun soucis.

          La connaissance libre : https://zestedesavoir.com

          • [^] # Re: Espérance de vie

            Posté par . Évalué à 1 (+0/-0).

            Mais pendant combien de temps ?

            • [^] # Re: Espérance de vie

              Posté par (page perso) . Évalué à 2 (+0/-0).

              Normalement assez longtemps pour qu'il soit rendu obsolète par du matériel plus récent.

              La connaissance libre : https://zestedesavoir.com

            • [^] # Re: Espérance de vie

              Posté par (page perso) . Évalué à -2 (+2/-5). Dernière modification le 26/11/18 à 14:56.

              De ce que je constate sur mes machines de calcul :

              • au moins jusqu'à 12 ans, en moyenne, pour du matériel qui a déjà 12 ans,

              • de moins en moins longtemps sur du matériel de plus en plus récent…

              (de là à y voir une certaine forme de programmation de l'obsolescence conçue par des… dans un but… de… mondial… Ah, faut que je reprenne un cachet anti-complot).

    • [^] # Re: durée de vie

      Posté par (page perso) . Évalué à 10 (+10/-0).

      Mais avec la mise en perspective, le facteur un milliard, attendre une info pendant un mois ou deux quand tu vis 5 millards d'années… c'est beaucoup moins choquant que lorsque tu as moins de 100 ans devant toi.

      Ah ! Ça, ça collerait avec la théorie selon laquelle la terre est un ordinateur contrôlée par des souris !

  • # Concevoir un enfant ?

    Posté par . Évalué à 8 (+9/-2).

    Un chiffre que l'on peut tripler si la connexion Internet est une liaison cuivre ; la présence d'un WiFi dans le circuit permet probablement de concevoir intégralement un enfant.

    Deux minutes quoi…

  • # Comparaison parlante

    Posté par (page perso) . Évalué à 8 (+6/-0).

    J'avais déjà vu ce genre de comparaison mais pour quelque chose de plus parlant je pense: parler en distance uniquement plutôt qu'en distance. C'était à un GUADEC je crois, mais je n'arrive plus à retrouver. Mais en gros tu avais des cercles concentriques sur un planisphère pour montrer la distance à parcourir pour aller chercher l'information (cette distance étant intuitivement liée au temps: plus c'est loin plus c'est long d'y aller).
    Tu te retrouvais donc, comme toi, à accéder au cache sur un papier sur ton bureau, ou alors à devoir aller à l'autre bout du monde récupérer l'information.

    Il y a aussi (précis mais pas assez visuel à cause des changements d'échelle je trouve) :
    Latency Numbers Every Programmer Should Know

    • [^] # Re: Comparaison parlante

      Posté par (page perso) . Évalué à 5 (+3/-0).

      Ce genre de graphique est très pratique pour retrouver rapidement dans quelle échelle de grandeur tu es (j'avais celui-ci en tête), mais c'est clair que les changements d'échelle ne permettent pas une bonne comparaison entre les différents éléments.

      C'est triste de constater à quel point nous pauvres humains sommes mal équipés pour appréhender les nombres.

      La connaissance libre : https://zestedesavoir.com

      • [^] # Re: Comparaison parlante

        Posté par (page perso) . Évalué à 10 (+9/-0).

        C'est triste de constater à quel point nous pauvres humains sommes mal équipés pour appréhender les nombres.

        C,est parce qu'on en a trop inventé.
        On aurait pu s'arrêter à :
        un, deux, beaucoup !

        • [^] # Re: Comparaison parlante

          Posté par . Évalué à 5 (+3/-0).

          C'est encore de trop.

          Pourquoi autant de chiffres alors que 0 et 1 suffissent.

          Oh… wait.

        • [^] # Re: Comparaison parlante

          Posté par . Évalué à 2 (+1/-1). Dernière modification le 23/11/18 à 14:35.

          C'est parce qu'on en a trop inventé.
          Un, deux… beaucoup

          C'est clair.

          D'ailleurs dans sa vidéo sur les nombre archi-méga-super-géants (où l'on parle de nombres qui dépassent l'entendement mais qui ont servi dans au moins une démonstration), science4all commence par dire que 5 c'est déjà un grand nombre : si on te montre 5 cartes et qu'il faut les compter, tu ne les appréhenderas pas d'un coup, mais tu feras d'un œil 3+2=5.

          • [^] # Re: Comparaison parlante

            Posté par (page perso) . Évalué à 8 (+7/-1). Dernière modification le 23/11/18 à 15:49.

            si on te montre 5 cartes et qu'il faut les compter, tu ne les appréhenderas pas d'un coup, mais tu feras d'un œil 3+2=5.

            C'est ce que je me dis toujours quand je compte sur les 3+2 doigts de chacune de mes 1+1 mains.

            • [^] # Re: Comparaison parlante

              Posté par . Évalué à 3 (+1/-0).

              oui mais 12 phalanges, que tu peux pointer avec ton pouce, sur une seule main
              on aurait donc pu compter en base 12 des le debut plutot qu'en base 10

              soit la possibilité de compter jusqu'à 12x12 (144) avec une seule main :p

              • [^] # Re: Comparaison parlante

                Posté par . Évalué à 4 (+2/-0).

                on aurait donc pu compter en base 12 des le debut plutot qu'en base 10

                C'était le cas

                Il me semble que le système décimal s'est imposé avec l'arrivée des chiffres indo-arabes.

              • [^] # Re: Comparaison parlante

                Posté par . Évalué à 4 (+2/-0).

                on aurait donc pu compter en base 12 des le debut plutot qu'en base 10

                Pourquoi crois-tu qu'on compte les œufs, les huîtres, … par (demi-)douzaines ? Une main pour compter (4 doigts de 3 phalanges, et le pouce qui pointe), et une main pour manipuler.

          • [^] # Re: Comparaison parlante

            Posté par . Évalué à 0 (+2/-4). Dernière modification le 23/11/18 à 21:11.

            science4all commence par dire que 5 c'est déjà un grand nombre : si on te montre 5 cartes et qu'il faut les compter, tu ne les appréhenderas pas d'un coup, mais tu feras d'un œil 3+2=5.

            Compter jusqu'à 5, même les pigeons en sont capables: http://www.slate.fr/lien/48037/pigeons-aussi-intelligents-singes

            • [^] # Re: Comparaison parlante

              Posté par . Évalué à 5 (+3/-0).

              C'est pas compter jusqu'à 5 le pb, c'est de voir qu'il y a 5 objets d'un coup d’œil (et pas 6 par exemple).

              • [^] # Re: Comparaison parlante

                Posté par . Évalué à 2 (+1/-1).

                C'est pas compter jusqu'à 5 le pb, c'est de voir qu'il y a 5 objets d'un coup d’œil (et pas 6 par exemple).

                Ce qu'on observe chez les pigeons, c'est qu'ils peuvent ordonner des ensembles variés selon le nombres d'éléments qu'ils contiennent. Ca correspond à l'idée des nombres entiers naturel.

                Si on défini la représentation mentale des nombres comme la capacité à classer des ensembles par ordre de cardinalité alors ces pigeons entraînés sont capables de se représenter des nombres jusqu'à 9.

                Pour le coup d'oeil, j'imagine que c'est l'idée d'un temps de réaction. Je me demande si c'est si important vu que les singes ont des performances similaires aux humains là-dessus. Je ne sais pas pour les pigeons.

  • # Ouate de phoque ?! Merci !

    Posté par (page perso) . Évalué à 10 (+10/-0).

    J'ai vu que ce billet a atteint une note de 146, je me suis dit « wow, ça fait beaucoup, non ? ». Alors, j'ai vérifié, et donc :

    Sincèrement, je ne pensais vraiment pas que mon idée couchée un peu à l'arrache plairait autant. Si j'avais su, j'aurais plus soigné mon texte !

    En tous cas, content que de voir que vous avez apprécié la comparaison !

    La connaissance libre : https://zestedesavoir.com

Envoyer un commentaire

Suivre le flux des commentaires

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