프로그래머가 알아야 할 지연 시간
오래 전에 직장 동료가 “프로그래머가 알아야 할 숫자들이 있다"며 사이트를 알려 준 적이 있다. 의외로 당연한 것 같으면서도 몰랐던 사실들이 있기도 했고, 만약 최적화를 위해 어떤 수정을 가해야 한다면 어디를 손대야 할지 윤곽을 짚을 수 있는 훌륭한 데이터라고 생각한다.
해당 사이트의 슬라이더를 이리저리 옮겨서 이런저런 정보를 보면 이런 것을 알 수가 있다.
- CPU는 2005년쯤 극도의 효율화를 마친 것 같다.
- 그런 CPU성능 속에서 Zippy의 개선도 증가하지 않는다. 1KB의 사이즈이므로 디스크의 속도보다는 아무래도 CPU의 속도가 더 영향이 큰게 아닐까.
- 2007년에는 2KB의 데이터를 네트워크로 전송하는 것이 4μs의 시간을 가지게 되었는데, 이 시간은 2KB의 데이터를
Zippy
로 압축하는 것과 같은 시간이다. 2020년에는 2KB의 데이터 전송 속도가 44ns라고 나오니까, 이제 2KB를 압축한 것을 받든 직접 만들든 시간상으로는 크게 차이가 나지 않는다는 것. Naver접속 시 대략 1초가 걸리는데 이걸 압축해서 던져도 사용자 입장에서는 아무런 불편도 느끼지 못할 정도의 매우 짧은 수치이다. - 디스크 탐색은 굉장히 오래 걸리지만 디스크를 순차적으로 읽는 시간은 굉장히 빠르다. 1MB의 데이터를 순차적으로 읽으면 825μs라는데, SSD는 같은 단위의 사이즈를 읽을 시 49μs 이므로 16배 정도가 차이가 난다고 보면 되겠다.
- 디스크를 단순히
seek
하는 것은 2ms의 시간이 든다. 순차적으로 읽기만 하더라도 디스크를 더 효율적으로 사용할 수 있다는 이야기이다.
- 디스크를 단순히
- 네트워크의 속도는 개선이 굉장히 힘든 것 같다. 같은 데이터센터를 돌든 대륙을 건너 트래픽이 돌든 그 시간은 큰 차이가 없는데, 이 정도면 빛의 한계속도 내지는 광케이블쪽의 문제가 아닐까 싶기도 하다.
어떤 것들은 몇 년이 지나도 개선되기 힘든 것이 있다고 느낀다. 북미 사람들과 게임하기에는 뭔가 기존의 룰을 깰 수 있는 새로운 것이 있어야 된다고 본다. 그럼에도 꾸준히 발전하는 것이 있는데, 돈만 많이 있다면 최적화에 머리굴릴 필요 없이 그냥 하드웨어로 엄청난 개선을 얻을 수도 있는 것 같다.
참고: