‘I/O가 병목이 아닐 수 있다’ 라는 포스트를 발견. https://news.hada.io/topic?id=7906 요약하면,

  1. 400mb 크기의 텍스트 파일을 읽어와 텍스트 파일 내 등장하는 단어들의 빈도를 세는 코드를 돌려 봤더니 텍스트 파일을 읽어오는 속도는 매우 빨랐고 텍스트 파일을 처리하는 연산 시간이 훨배 느렸다.

  2. 따라서 대량의 데이터를 처리하는 프로그램에서 텍스트 파일을 읽어오는 시간이 병목이 아닐 수 있다.

개인적으로는 좀 더 여러 관점에서 바라볼 필요가 있는 문제라고 생각.

  1. 단순히 데이터를 sequential하게 디스크에서 메모리로 올리는 속도 자체는 굉장히 빨라졌고, 그에 비해 수백mb에 달하는 데이터를 처리하는 시간 자체는 생각만큼 빨라지지는 않았다고 볼 수 있다.

  2. 하지만 위 포스트에서 다루는 데이터의 크기는 어디까지나 컴퓨터의 메모리보다 훨씬 적은 용량의 데이터이고, 컴퓨터의 메모리에 다 올릴 수 없을 정도 대량의 데이터를 여러 차례 메모리/디스크 사이에 swap in/out 하는 상황에 대한 논의는 없다. 따라서 대량의 데이터를 메모리/디스크 사이에 swap in/out 해야 하는 문제에서도 I/O가 병목이 아닐지는 아직 알지 못한다. 상황에 따라 다른 문제일 수 있다.

  • 예를 들어 다루는 데이터의 총 크기가 1tb 정도 되고 이 중에서 디스크상에 각각 다른 위치에 있는 수백 mb 정도 되는 크기의 데이터셋들을 수시로 메모리로 swap in/out 해야 하며 메모리로 가져온 데이터셋은 처음부터 끝까지 딱 한 번 훑기만 하는 문제가 있다 할 때, 이 경우에도 I/O보다 메모리를 훑는 시간이 더 오래 걸리는 것은 아닐 것이다. 이처럼 위 포스트가 I/O가 있는 모든 상황을 다루는 것은 아니기 때문에, 당장 다루는 문제의 유형에 따라 어디가 병목일지가 각각 달라진다고 봐야 한다.