Programmer(SW engineer)가 알아야 할 서버 동작 별 지연 시간(Latency Numbers)



1. 성능 관련 사이트 소개

성능 관련하여 요새 이런저런 자료들을 찾아보고 있습니다. 그러던 와중 Programmer(SW engineer)가 알아야 할 서버 동작 별 지연 시간(Latency Numbers) 와 관련된 내용을 알게 되었습니다. 2010년 Google의 Jeff Dean 은 Stanford에서 컴퓨팅 시스템과 관련된 숫자에 대하여 설명하였습니다.. 이후, Colin Scott이라는 엔지니어가 자신의 github에 이 수치를 정리하여 아래와 같이 올려놓게 되었습니다.

https://colin-scott.github.io/personal_website/research/interactive_latency.html 에 들어가면 이러한 데이터를 시각화한 자료를 확인할 수 있습니다.

image

image

image

실제 성능은 위와 같이 나타나게 되는데요. 원하는 연도를 마음대로 지정할 수 있는데, 2000, 2010, 2020의 수치를 비교해보니 2000년도와 2010년도는 확실히 Computer 성능이 증가하는 것이 보이네요. 하지만 2010년도 이후로는 크게 수치가 증가하는 것처럼 보이지는 않습니다.

2. 실제 성능 정리

동작 성능
L1 캐시 참조 (L1 cache reference: 1ns) 1ns
CPU 분기 오예측 (Branch mispredict) 3ns
L2 캐시 참조 (L2 cache reference: 4ns) 4ns
뮤텍스 잠금/해제 (Mutex lock/unlock: 17ns) 17ns
주 메모리 / DRAM 참조 (Main memory reference) 100ns
Zippy(현재 Snappy)로 1KB 압축 (Compress 1KB wth Zippy) 2000ns 또는 2μs
상품 네트워크를 통해 2000바이트 보내기 (Send 2,000 bytes over commodity network) 44ns
솔리드 스테이트 드라이브(SSD) 랜덤 읽기 (SSD random read) 16μs
주 메모리에서 순차적으로 1,000,000바이트 읽기 (Read 1,000,000 bytes sequentially from memory) 3μs
동일한 데이터 센터에서 왕복 네트워크 요청 (Round trip in same datacenter) 500μs
SSD에서 순차적으로 1,000,000바이트 읽기 (Read 1,000,000 bytes sequentially from SSD) 49μs
디스크(하드 드라이브/자기 드라이브) 탐색 (Disk seek) 2ms
디스크에서 순차적으로 1,000,000바이트 읽기 (Read 1,000,000 bytes sequentially from disk) 825μs

위의 데이터 표를 살펴보면 대략적인 성능에 대하여 알 수 있습니다. 캐시 레지스터, DRAM, SSD 속도가 어마어마하게 차이가 나는 것을 확인할 수 있습니다.

캐시 1ns –(x100)–> DRAM 100ns –(x1600)–> 16μs

이러한 점들을 고려하여 향후 시스템 설계를 효율적으로 진행하는데 사용하면 좋을 것 같습니다.

reference