현재 프로세스간에 데이터를 공유하기 위해 큰 mmap 파일을 사용하는 Apache 모듈에서 작업 중입니다. 이것은 시작시 생성되고 서버가 종료 될 때 제거됩니다 (나중에 유지하도록 선택할 수도 있음). 아파치 APR 라이브러리를 사용하여 이것을 구현했으며, 적어도 작은 파일에는 잘 작동한다.아파치 모듈에서 메모리 맵핑 된 파일의 과도한 동기화
그러나 메모리 매핑 된 파일의 크기가 커지면 (서버가 실행 중일 때 메모리를 캐시하기에 충분한 RAM이 여전히 있음) 운영 체제처럼 보이는 시스템이 가상으로 중단됩니다 (필자의 경우 Linux) 파일을 디스크와 동기화하는 데 많은 자원을 소비합니다. 이 동기화를 제어/축소 할 수있는 방법이 있습니까?
지금은 디스크에 동기화 된 내용이 필요하지 않기 때문에 아마도 대신 공유 메모리 세그먼트를 사용해야하고이를 대신 시도해야합니다. 그러나 나는 여전히 메모리 매핑 된 파일의 동기화를 제어하는 방법에 관심이있다.
APR 라이브러리는 메모리 매핑 파일 생성을 처리하고 msync() 호출을 포함하지 않습니다. 내 코드에서 msync()를 호출하지 않습니다. 그러나 파일에 캐시 된 데이터가 포함되어 있기 때문에 내 코드는 메모리에서 상당히 뛰어 넘습니다. – Chris
Varnish 웹 캐시에 대한 아키텍처 노트를 읽어야합니다. 이 논문은 메모리 매핑을 효율적으로 처리하는 방법을 보여줍니다. – chrisaycock