Quelques comparaisons de grandeurs pour mieux comprendre la notion de “performance”
Est-ce qu’un accès disque est vraiment plus lent qu’un accès en mémoire ?
Est-ce que stocker ma donnée aux US est vraiment problématique ?
Quelle débit maximum puis-je avoir sur un SSD ?
| Operation Time | in ns Time | in ms Time | Memo | | ----------------------------------------- | --------------- | ----------- | ----------------------------------- | --- | | L1 cache reference | 1 | | | | Branch misprediction | 3 | | | | | L2 cache reference | 4 | | | | Mutex lock/unlock | 17 | | | | Main memory reference | 100 | | ~100GB/sec, 100x L1 cache | | Send 2 kB over 10 Gbps network | 1,600 | 0.0016 | | | Compress 1 kB with Zippy | 2,000 | 0.002 | | | Read 1 MB sequentially from memory | 10,000 | 0.010 | | | Round trip within same datacenter | 500,000 | 0.5 | | | Read 1 MB sequentially from SSD | 1,000,000 | 1 | ~1GB/sec SSD, 100x main memory | | Read 1 MB sequentially from disk | 5,000,000 | 5 | ~200MB/sec HDD, 500x main memory | | Read 1 MB sequentially from 1Gbps network | 10,000,000 | 10 | | | Disk seek | 10,000,000 | 10 | 20x datacenter round trip | | TCP packet round trip between continents | 150,000,000 | 150 | |
Therefore, it is possible to read:
- sequentially from HDD at a rate of ~200MB per second
- sequentially from SSD at a rate of ~1 GB per second
- sequentially from main memory at a rate of ~100GB per second (burst rate)
- sequentially from 10Gbps Ethernet at a rate of ~1000MB per second
- 1 ns = 10^-9 seconds
- 1 us = 10^-6 seconds = 1,000 ns
- 1 ms = 10^-3 seconds = 1,000 us = 1,000,000 ns
On retrouve souvent ce genre de référence dans les préparation d’entretien tech “à la Google”.
Cependant, il est intéressant d’avoir ces échelles de grandeur en tête.
Quelques exemples :\
- estimer le temps nécessaire au transfert d’une vidéo
- décider si passer sur une système distribué est pertinent