지연시간 목록 (2020 버전)
출처는 다음과 같다. Latency Numbers Every Programmer Should Know 1999년부터 2020년까지 지연시간의 변화를 시각적으로 보여준다.
항목 (영문) | 항목 (국문) | 지연시간 |
L1 cache reference | L1 캐시 참조 | 1ns |
Branch mispredict | 분기 예측 오류 | 3ns |
L2 cache reference | L2 캐시 참조 | 4ns |
Mutex lock/unlock | 뮤텍스 락/언락 | 17ns |
Main memory reference | 주 메모리 참조 | 100ns |
Compress 1K bytes with Zippy | Zippy로 1KB 압축 | 2,000ns |
Send 1K bytes over 1 Gbps network | 1Gbps 네트워크로 2KB 전송 | 10,000ns = 10μs |
Read 4K randomly from SSD(1GB/sec) | SSD(1GB/초짜리)에서 4KB 랜덤 참조* | 16,000ns = 16μs |
Read 1MB sequentially from memory | 메모리에서 순차적으로 1MB read | 3,000ns = 3μs |
Round trip within same datacenter | 같은 데이터 센터 내에서 왕복 지연시간 | 500,000ns = 500μs |
Read 1 MB sequentially from SSD(1GB/sec) | SSD(1GB/초짜리)에서 순차적으로 1MB read | 49,000ns = 49μs |
Disk seek | 디스크 탐색 | 2,000,000ns = 2ms |
Read 1 MB sequentially from disk | 디스크에서 순차적으로 1MB read | 825,000ns = 825μs |
Send packet CA->Netherlands->CA | 캘리포니아에서 네덜란드까지 1패킷 왕복 지연시간 | 150,000,000ns = 150ms |
*SSD의 성능 1GB/초는 보통 순차읽기 성능이다. 랜덤 참조는 그에 비해 많이 느릴 수 있다.
L1이란
CPU 캐시(L1, L2, L3)는 CPU와 메인 메모리 사이의 속도 간극으로 인해 발생하는 병목현상을 해소하기 위한 버퍼 역할을 하는 캐시이다.
L1과 메모리의 차이로부터 알 수 있는 것들
L1과 메인메모리 접근의 시간차를 보면 L1 참조가 주메모리 참조보다 100배 빠르다는 것을 알 수 있다. L1 캐시 미스와 캐시 시트가 100배의 시간 차이를 만들어 내는 것을 통해 캐시 최적화가 성능을 크게 좌우한다는 것을 알 수 있다. 이러한 차이는 C++ STL의 std::vector(연속된 메모리 접근)와 std::list(메모리 랜덤 접근) 중 어떤 게 더 빠른지와도 관련이 있다.
위 표의 결론
- 디스크 탐색은 가능한 한 피해야 한다.
- 데이터를 전송 전에 압축하는 것이 좋다.
- 데이터 센터간 전송에 시간이 걸린다.
왜 외워야 할까?
성능 최적화를 위해 어떤 최적화가 얼마나 효과적인지 판단할 수 있기 때문이다.
참고자료
- Latency Numbers Every Programmer Should Know
- 「가상 면접 사례로 배우는 대규모 시스템 설계 기초」 2021, 알렉스 쉬
'시스템 디자인' 카테고리의 다른 글
뉴스 사이트와 캐시 교체 알고리즘(Cache Eviction Algorithm) (0) | 2025.02.27 |
---|---|
시스템 디자인을 위한 "Back-of-the-envelope calculation" (0) | 2025.02.26 |
넷플릭스가 여러 데이터센터에 걸쳐 데이터를 다중화 하는 방법 (0) | 2025.02.20 |
CAP 정리란? (0) | 2025.02.15 |
캐시 쓰기 전략과 피크에 강한 캐싱 전략 (2) | 2025.02.13 |