Skip to content

Instantly share code, notes, and snippets.

@artkpv
Forked from negrinho/latency.txt
Last active February 29, 2024 02:10
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save artkpv/dce2870a8241ff2c0164337422566fc5 to your computer and use it in GitHub Desktop.
Save artkpv/dce2870a8241ff2c0164337422566fc5 to your computer and use it in GitHub Desktop.
Latency Numbers Every Programmer Should Know
Latency Comparison Numbers Simplified (~2012)
---------------------------------- log2 log10
L1 cache reference 0 0 0.5 ns
Branch mispredict 3 1 5 ns
L2 cache reference 3 1 7 ns
Mutex lock/unlock 5 2 25 ns
Main memory reference 8 2 100 ns 20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy 14 4 10,000 ns 10 us
Send 1K bytes over 1 Gbps network 14 4 10,000 ns 10 us
Read 4K randomly from SSD* 18 5 150,000 ns 150 us ~1GB/sec SSD
Read 1 MB sequentially from memory 18 6 250,000 ns 250 us
Round trip within same datacenter 19 6 500,000 ns 500 us
Read 1 MB sequentially from SSD* 20 6 1,000,000 ns 1,000 us 1 ms ~1GB/sec SSD, 4X memory
Disk seek 24 7 10,000,000 ns 10,000 us 10 ms 20x datacenter roundtrip
Read 1 MB sequentially from 1 Gbps 24 7 10,000,000 ns 10,000 us 10 ms 40x memory, 10X SSD
Read 1 MB sequentially from disk 25 8 30,000,000 ns 30,000 us 30 ms 120x memory, 30X SSD
Send packet CA->Netherlands->CA 28 9 150,000,000 ns 150,000 us 150 ms
Notes
-----
The log2 and log10 columns have logarithm computations (rounded to an integer power)
relative to the first item on the list (L1 cache reference). I find that the exact
numbers are not terribly important. It is much simpler to reason about relative
dimensions in this format---simply take two elements in a column and subtract
them. For example, using the log10 column, "Read 1 MB sequentially from memory"
is about 1000000 slower than "L1 cache reference" and 10000 slower than
"Main memory reference". For very rough back-of-the-envelope computations, I often
use 2^10 ~ 10^3 and 2^3 ~ 10^1, e.g., "Send 1K bytes over 1 Gbps network" is about
16000 slower than "L1 cache reference". The logarithms were computed from the
numbers found in https://gist.github.com/jboner/2841832.
@Yolandayou1
Copy link

saltar al contenido
artkpv / latencia.txt
Bifurcado de negrinho/latency.txt
Último Activo Hace 4 años • Reportar abuso
Código
Revisiones
26
Estrellas
1
tenedores
1
Números de latencia que todo programador debería conocer
latencia.txt
Números de comparación de latencia simplificados (~2012)
---------------------------------- registro2 registro10
Referencia de caché L1 0 0 0,5 ns
Rama de predicción errónea 3 1 5 ns
Referencia de caché L2 3 1 7 ns
Bloqueo/desbloqueo mutex 5 2 25 ns
Referencia de memoria principal 8 2 100 ns 20x caché L2, 200x caché L1
Comprime 1K bytes con Zippy 14 4 10,000 ns 10 us
Envíe 1K bytes a través de una red de 1 Gbps 14 4 10,000 ns 10 us
Leer 4K aleatoriamente desde SSD* 18 5 150,000 ns 150 us ~1GB/seg SSD
Leer 1 MB secuencialmente desde la memoria 18 6 250.000 ns 250 us
Ida y vuelta dentro del mismo centro de datos 19 6 500.000 ns 500 us
Leer 1 MB secuencialmente desde SSD* 20 6 1 000 000 ns 1 000 us 1 ms ~1 GB/s SSD, memoria 4X
Búsqueda de disco 24 horas, 7 días a la semana 10 000 000 ns 10 000 us 10 ms 20x ida y vuelta del centro de datos
Leer 1 MB secuencialmente desde 1 Gbps 24 7 10 000 000 ns 10 000 us 10 ms Memoria 40x, SSD 10X
Leer 1 MB secuencialmente desde el disco 25 8 30 000 000 ns 30 000 us 30 ms Memoria 120x, SSD 30X
Enviar paquete CA->Países Bajos->CA 28 9 150.000.000 ns 150.000 us 150 ms

Notas

Las columnas log2 y log10 tienen cálculos de logaritmos (redondeados a una potencia entera)
relativo al primer elemento de la lista (referencia de caché L1). encuentro que es exactamente
Los números no son muy importantes. Es mucho más sencillo razonar sobre la relativa
dimensiones en este formato: simplemente tome dos elementos en una columna y reste
a ellos. Por ejemplo, usando la columna log10, "Leer 1 MB secuencialmente desde la memoria"
es aproximadamente 1000000 más lento que la "referencia de caché L1" y 10000 más lento que
"Referencia de la memoria principal". Para cálculos muy aproximados, a menudo
use 2^10 ~ 10^3 y 2^3 ~ 10^1, por ejemplo, "Enviar 1K bytes a través de una red de 1 Gbps" se trata de
16000 más lento que la "referencia de caché L1". Los logaritmos se calcularon a partir de la
números que se encuentran en https://gist.github.com/jboner/2841832.
Comentario

Deja un comentario

Pie de página
© 2024 GitHub, Inc.
Navegación de pie de página
Términos
Privacidad
Seguridad
Estado
Documentos
Contacto
Administrar cookies
No compartir mi información personal

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment