본문 바로가기

시스템 디자인

개발자라면 외워야 하는 지연 시간 14가지

 

 

지연시간 목록 (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(메모리 랜덤 접근) 중 어떤 게 더 빠른지와도 관련이 있다. 

 

 

위 표의 결론

  • 디스크 탐색은 가능한 한 피해야 한다.
  • 데이터를 전송 전에 압축하는 것이 좋다.
  • 데이터 센터간 전송에 시간이 걸린다.

 

왜 외워야 할까?

성능 최적화를 위해 어떤 최적화가 얼마나 효과적인지 판단할 수 있기 때문이다. 

 


참고자료