매우 큰 파일 매핑

매우 큰 파일 매핑

나는 매우 큰 디스크 드라이브(2TB)를 가지고 있지만 메모리(8GB)는 많지 않습니다. 디스크 파일 시스템에 있는 대용량 파일(~200GB)에 대해 빅 데이터 실험을 실행할 수 있기를 원합니다. 디스크 대역폭 측면에서 비용이 매우 많이 들 것이라는 것을 알고 있지만 높은 I/O 사용량은 신경 쓰지 않습니다.

내가 선택한 위치에서 파일에 대한 읽기 및 쓰기 작업을 수행할 수 있도록 이 큰 파일을 C++ 배열에 로드하려면 어떻게 해야 합니까? mmap을 이 목적으로 사용할 수 있습니까? 이를 수행하려면 어떤 매개변수 옵션을 사용해야 합니까? 프로그램을 실행할 때마다 OOM 킬러를 실행하고 싶지 않습니다.

mmap이 파일 지원과 익명 매핑을 지원한다는 것을 알고 있지만 어떤 것을 사용해야 할지 완전히 확신할 수 없습니다. 개인 매핑과 공유 매핑을 사용하는 것은 어떻습니까?

답변1

익명 매핑이 아닌 파일 기반 매핑을 사용하여 파일을 mmap하는 것이 합리적입니다. 매핑된 메모리에 쓰고 변경 사항을 파일에 다시 쓰려면 공유 맵을 사용해야 합니다. 파일 지원 공유 매핑을 사용하면 OOM 킬러에 대해 걱정할 필요가 없습니다. 따라서 프로세스가 64비트라면 전체 파일을 메모리에 매핑하는 것만으로도 충분합니다. (64비트가 아니더라도 문제는 RAM 부족이 아니라 주소 공간 부족이므로 OOM 킬러는 여전히 영향을 미치지 않습니다. mmap은 실패할 뿐입니다.)

관련 정보