2013-02-04 3 views
4

거대한 기상 파일이 있습니다. 램에 맞추기에는 너무 큽니다.ssd 및 mmap을 사용하여 동시 파일 읽기 향상

많은 동시 임의 읽기를 수행해야합니다. 그래서 SSD + mmap이 성능을 향상시킬 수 있다고 생각합니다.

하지만 동시 mmap 읽기는 어떻게됩니까? 어떻게 조직되어야합니까?

enter image description here

답변

1

(데이터 구조 및 스레드간에 공유 자원에 대한 경합) 동시성 이유가 왜 다른 스레드에서 독립적으로 동일한 파일을 열려고하는 것? 그렇지 않다면, 나는 그 일을하는 이유를 볼 수 없습니다. 그것은 단지 궁극적으로 동일한 객체에 매핑되는 다른 메모리 매핑 (각 스레드에 하나씩)을 추적하고 더 많은 파일 설명자를 소비해야하므로 커널을 약간 더 어렵게 만들 것입니다 (매우 큰 숫자가 아니면 파일을 여러 번 mmap 할 때 더 많은 주소 공간을 사용합니다.

시나리오에서 파일이 거의 자주 열리지 않고 많이 읽히고 자주 닫히지 않는다고 생각하면 스레드간에 많은 논쟁이있을 것이라고 생각하지 않습니다. 따라서 모든 스레드에 대해 파일을 전역으로 여는 것이 좋습니다.

열려있는 파일을 정리하기 위해 스레드간에 경합이 있는지 여부에 관계없이, 각 파일을 프로세스 당 한 번만 매핑하는 것이 가장 좋은 이유가 하나 있습니다. 즉 주소 예비가 32 비트 인 경우입니다. 32 비트 모드 인 경우 파일 크기가 크고 중요한 부분을 mmap하려는 경우 주소 공간은 제한된 리소스입니다. 이 경우 두 파일에 동일한 파일을 두 번 쓰지 않도록 주소 공간을 절약해야합니다.

+0

NetCDF C API를 네이티브 mmap 지원과 함께 사용합니다. 이것은 다음과 같이 구현됩니다 : http://svn.unidata.ucar.edu/repos/netcdf/tags/netcdf-4.2.1/libsrc/mmapio.c 물론 64 비트를 사용합니다. – user1219721