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

Cyril Chaboisseau cyril.chaboisseau@::1
Mer 21 Mai 23:44:03 CEST 2014


'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