오래 전에 직장 동료가 “프로그래머가 알아야 할 숫자들이 있다"며 사이트를 알려 준 적이 있다. 의외로 당연한 것 같으면서도 몰랐던 사실들이 있기도 했고, 만약 최적화를 위해 어떤 수정을 가해야 한다면 어디를 손대야 할지 윤곽을 짚을 수 있는 훌륭한 데이터라고 생각한다.

해당 사이트의 슬라이더를 이리저리 옮겨서 이런저런 정보를 보면 이런 것을 알 수가 있다.

  1. CPU는 2005년쯤 극도의 효율화를 마친 것 같다.
  2. 그런 CPU성능 속에서 Zippy의 개선도 증가하지 않는다. 1KB의 사이즈이므로 디스크의 속도보다는 아무래도 CPU의 속도가 더 영향이 큰게 아닐까.
  3. 2007년에는 2KB의 데이터를 네트워크로 전송하는 것이 4μs의 시간을 가지게 되었는데, 이 시간은 2KB의 데이터를 Zippy로 압축하는 것과 같은 시간이다. 2020년에는 2KB의 데이터 전송 속도가 44ns라고 나오니까, 이제 2KB를 압축한 것을 받든 직접 만들든 시간상으로는 크게 차이가 나지 않는다는 것. Naver접속 시 대략 1초가 걸리는데 이걸 압축해서 던져도 사용자 입장에서는 아무런 불편도 느끼지 못할 정도의 매우 짧은 수치이다.
  4. 디스크 탐색은 굉장히 오래 걸리지만 디스크를 순차적으로 읽는 시간은 굉장히 빠르다. 1MB의 데이터를 순차적으로 읽으면 825μs라는데, SSD는 같은 단위의 사이즈를 읽을 시 49μs 이므로 16배 정도가 차이가 난다고 보면 되겠다.
    1. 디스크를 단순히 seek하는 것은 2ms의 시간이 든다. 순차적으로 읽기만 하더라도 디스크를 더 효율적으로 사용할 수 있다는 이야기이다.
      1. 중국의 어떤 서버 개발자의 디비 설계
      2. kafka: sequential disk access can in some cases be faster than random memory access
  5. 네트워크의 속도는 개선이 굉장히 힘든 것 같다. 같은 데이터센터를 돌든 대륙을 건너 트래픽이 돌든 그 시간은 큰 차이가 없는데, 이 정도면 빛의 한계속도 내지는 광케이블쪽의 문제가 아닐까 싶기도 하다.

어떤 것들은 몇 년이 지나도 개선되기 힘든 것이 있다고 느낀다. 북미 사람들과 게임하기에는 뭔가 기존의 룰을 깰 수 있는 새로운 것이 있어야 된다고 본다. 그럼에도 꾸준히 발전하는 것이 있는데, 돈만 많이 있다면 최적화에 머리굴릴 필요 없이 그냥 하드웨어로 엄청난 개선을 얻을 수도 있는 것 같다.

참고: