Numbers everyone should know
Jeffrey Dean recently gave a talk “Building Software Systems at Google and Lessons Learned” at Stanford (video). One of his slides was the following list of numbers:
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 w/ cheap algorithm | 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 |
Everyone who wants to design high-performance, scalable systems should memorize these numbers. There are many, many lessons to be learned.