28P by xguru 2022-11-28 | favorite | 댓글 14개
  • 면접에서 종종 묻는 질문 2가지
    • 텍스트 파일에서 단어를 세는 프로그램을 작성해 보세요
    • 이 프로그램의 성능 병목현상은 어떤 부분인가요?
  • 종종 사람들이 "파일에서 읽기" 이라는 답변을 하는데, 이젠 더 이상 그렇지 않음
  • 10-20년 전에는 그랬지만, 2022년 현재 디스크에서 시퀀셜하게 읽는 것은 매우 빠름(필자도 테스트 해보기 전에는 몰랐음)
  • 병목부분은 입력을 처리/파싱 해서 메모리에 할당하는 것 : 단어로 쪼개고, 소문자 변환하고, 해쉬테이블로 빈도를 세는 등의 작업
  • 파이썬/고 로 413MB 텍스트 파일(킹 제임스 성경을 100번 붙인 파일)을 테스트 해봤을 때
    • 읽는 것은 0.1~0.2초 면 되고, 처리가 7초에서 2초까지 걸림
  • 결론적으로 "빅데이터"를 처리하는 경우 디스크 I/O는 병목이 아닐수 있음

아무리 sequential 접근이라고 해도 언어마다, 라이브러리 마다 IO 파이프 사용 법이나 개발자 IO API요청 빈도 등 영향이 가는부분이 있어 IO가 더이상 병목이 이니라고 하는거는 전제가 필요하다고 본다

네트워크 io는 io가 아닌가? ㅋㅋㅋ

아무리 빨라져도 io는 io다 왜 프로그래밍시 io부분만을 위한 솔루션이 따로 존재하는 이유다

빅데이터 디스크를 전부 nvme ssd 로 한다고? ㅋㅋ 대체 얼마야...

디스크 I/O 로 매우 고통받으면서 플래터를 최대한 적게 움직이게 해야하는 일을 하는 저로서는 신기한 이야기이네요.
글 내용에 "시퀀셜"이라는 이야기고 있네요.
seek를 전혀 하지 않는다면 뭐 틀린 이야기가 아닐수도 있죠.

전제가 잘못된 실험입니다.

추가 설명 부탁드립니다

병목이라는 것 자체가 상대적인 시간에 대한 이야기입니다.
cpu 속도와 i/o를 비교하는게 맞습니다.
과거의 io보다 빨라졌다고 해서 io가 cpu보다 빠를 수 없습니다.

mmap을 이용하여 가상 메모리에 로드만 해놓고 실제는 cpu가 연산할 때마다 읽는 것일 수도 있습니다.
cpu와 모든 메모리(레지스터, 메인메모리, 디스크) 간의 통신도 전부 io입니다.
https://stackoverflow.com/questions/5877797/how-does-mmap-work

빅데이터를 판가름할 기준이 궁금해지네요

오늘도 지식하나 더 늘어갑니다.

https://news.ycombinator.com/item?id=33751266 에 있는 첫번째 댓글의 URL이 재미나네요.
Napkin Math (단순한 수학들)
시퀀셜 I/O는 거의 메모리 속도에 근접해 가고 있다고..

냅킨 매쓰라니 이름이 너무 매력적이네요.
UTF-8 만들때 롭 파이크가 냅킨에 끄적여서 보여줬다던가요