I/O가 병목일까 아닐까?
‘I/O가 병목이 아닐 수 있다’ 라는 포스트를 발견. https://news.hada.io/topic?id=7906 요약하면,
-
400mb 크기의 텍스트 파일을 읽어와 텍스트 파일 내 등장하는 단어들의 빈도를 세는 코드를 돌려 봤더니 텍스트 파일을 읽어오는 속도는 매우 빨랐고 텍스트 파일을 처리하는 연산 시간이 훨배 느렸다.
-
따라서 대량의 데이터를 처리하는 프로그램에서 텍스트 파일을 읽어오는 시간이 병목이 아닐 수 있다.
개인적으로는 좀 더 여러 관점에서 바라볼 필요가 있는 문제라고 생각.
-
단순히 데이터를 sequential하게 디스크에서 메모리로 올리는 속도 자체는 굉장히 빨라졌고, 그에 비해 수백mb에 달하는 데이터를 처리하는 시간 자체는 생각만큼 빨라지지는 않았다고 볼 수 있다.
-
하지만 위 포스트에서 다루는 데이터의 크기는 어디까지나 컴퓨터의 메모리보다 훨씬 적은 용량의 데이터이고, 컴퓨터의 메모리에 다 올릴 수 없을 정도 대량의 데이터를 여러 차례 메모리/디스크 사이에 swap in/out 하는 상황에 대한 논의는 없다. 따라서 대량의 데이터를 메모리/디스크 사이에 swap in/out 해야 하는 문제에서도 I/O가 병목이 아닐지는 아직 알지 못한다. 상황에 따라 다른 문제일 수 있다.
- 예를 들어 다루는 데이터의 총 크기가 1tb 정도 되고 이 중에서 디스크상에 각각 다른 위치에 있는 수백 mb 정도 되는 크기의 데이터셋들을 수시로 메모리로 swap in/out 해야 하며 메모리로 가져온 데이터셋은 처음부터 끝까지 딱 한 번 훑기만 하는 문제가 있다 할 때, 이 경우에도 I/O보다 메모리를 훑는 시간이 더 오래 걸리는 것은 아닐 것이다. 이처럼 위 포스트가 I/O가 있는 모든 상황을 다루는 것은 아니기 때문에, 당장 다루는 문제의 유형에 따라 어디가 병목일지가 각각 달라진다고 봐야 한다.