[Linux] latence / rapidité / temps d'accès

zirst@::1 zirst@::1
Jeu 22 Mai 10:16:41 CEST 2014


Salut !

Intéressant en effet. Malgré ces chiffres étonnant, il faut quand même
garder en mémoire que tout ce qui est inférieur à 0.1s (la plupart des
trucs listés < aux communications tcp) nous semble instantané. Et ce n'est
qu'au delà de 10s que ça semble lent.

C'est aussi inquiétant en un sens. D'où va-t-on pouvoir augmenter la
rapidité d'exécution des programmes ? Sachant que ces latences ne bougent
plus et que la question de la recherche de perfs ne fait pas partie des
objectifs de formation des développeurs que ce soit pour la
parallélisation ou les optims (enfin de ce que j'ai vu, si quelqu'un a un
contre-exemple ça m'intéresse). Cela ne semble pas nécessaire pour
l'instant car la plupart des opérations peuvent se résoudre dans un délais
compris entre instantanément et rapidement (<1s). Du coup on se contente
de former des singes codeurs pour produire vite et mal en sous-effectif.


J'ajoute aux liens cette partie de Art of assembly de Randall Hyde parlant
d'optim :
https://courses.engr.illinois.edu/ece390/books/artofasm/CH25/CH25-1.html

> 'soir
>
> En 2010, j'avais envoyé sur la liste un lien parlant de la latence des
> système qui donne une bonne idée des échelles de grandeur énormes qui
> séparent un accès à un registre du CPU, aux cache L1/L2 ou L3, à la
> mémoire, au disque jusqu'à l'accès réseau à l'autre bout du monde :
> http://www.linux-mag.com/id/7589/
>
> voici le tableau retranscrit pour info :
> L1 cache reference                             0.5 ns
> Branch mispredict                              5 ns
> L2 cache reference                             7 ns
> Mutex lock/unlock                             25 ns
> Main memory reference                        100 ns
> Compress 1K bytes with Zippy               3,000 ns
> Send 2K bytes over 1 Gbps network         20,000 ns
> Read 1 MB sequentially from memory       250,000 ns
> Round trip within same datacenter        500,000 ns
> Disk seek                             10,000,000 ns
> Read 1 MB sequentially from disk      20,000,000 ns
> Send packet CA->Netherlands->CA      150,000,000 ns
>
>
> Ce tableau a été un peu amélioré par l'excellente page interactive qui
> permet de jouer avec un curseur temps pour voir l'évolution depuis 1990
> jusqu'à nos jour (en tentant même une extrapolation jusqu'en 2020)
> http://www.eecs.berkeley.edu/~rcs/research/interactive_latency.html
>
> et c'est en effet assez étonnant de voir que l'on a probablement atteint
> un plafond et que tant sur la latence interne du processeur, le cache
> L1 ou L2 ou les accès mémoire, ça ne bouge plus depuis presque 10 ans
>
> Il n'y a guère que pour les gros transferts RAM (merci aux DDR2 DDR3 et
> autres technos permettant de paralléliser), et les accès disques ou SSD
> où l'on va encore voir des petites améliorations mais qui ne sont pas
> non plus transcendantes (à moins de trouver un nouveau type d'accès RAM
> ultra rapide)
>
> Néanmoins, ces nombres sont en effet assez peu parlant pour le néophyte
> ce qui est corrigé grâce à ce tableau qui met en perspective ces nombres
> de l'infiniment petit (0,3ns d'un cycle CPU) en le ramenant à 1 seconde
> et de montrer à quoi ça correspond pour tout les autres délais
> https://twitter.com/PieCalculus/status/459485747842523136/photo/1
> dont voici la retranscription en français
>
> Événement			Latence		mise à l'échelle
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 1 cycle CPU			 0,3 ns		 1 s
> accès cache L1		 0,9 ns		 3 s
> accès cache L2		 2,8 ns		 9 s
> accès cache L3		12,9 ns		43 s
> accès mém.			120 ns		 6 mn
> (DRAM depuis CPU)
> E/S SSD (flash)		50-150 µs	2-6 j
> E/S ddur			1-10 mn		1-12 mois
> Internet :
>  San Francisco -> NY 40 ms		 4 ans
>  SF -> Royaume-Uni	 81 ms		 8 ans
>  SF -> Australie	183 ms		19 ans
> restransmission TCP	1-3 s		105 à 317 ans
> reboot OS virtualisé  4 s		423 ans
> timeout cmd SCSI	 30 s		 3 millénaires
> reboot machine phys. 5 mn		32 millénaires
>
> oui : une fois le cycle processeur ramené à 1 seconde, ça serait 6
> minutes qu'il faudrait pour effectuer un accès à la mémoire, de 2 à 6
> jours pour un accès SSD et jusqu'à 1 an pour un accès disque dur (sans
> parlé des 32 milliers d'années pour un reboot machine... une éternité)
>
> Bref, des chiffres (pardon, nombres) que tout programmeurs devraient
> avoir en mémoire (RAM, CPU, ce que vous voulez)
>
> Bonus : voici l'article qui m'a permis de découvrir ce dernier lien
> http://javarevisited.blogspot.sg/2014/05/10-articles-every-programmer-must-read.html
> qui lui aussi est plein de ressources intéressantes
>
> --
> 	Cyril Chaboisseau
>
> Ce message est constitué d'électrons recyclés.
>


Plus d'informations sur la liste de diffusion linux