2012-10-29 1 views
0

저는 mmap 파일을 사용하여 64 MB 블록의 배열로 구성된 거대한 버퍼를 보유하는 프로그램을 작성하고 있습니다.리눅스에서 가상 메모리 관리를 제어하는 ​​방법?

블록은 네트워크를 통해 다른 호스트에서 수신 한 데이터를 집계하는 데 사용됩니다. 결과적으로 각 블록에 기록 된 총 데이터 크기는 미리 알 수 없습니다. 대개의 경우 2MB이지만 경우에 따라 20MB 이상 될 수 있습니다.

데이터가 버퍼에 오래 머 무르지 않습니다. 90 %는 1 초 미만 후에 삭제되고 나머지는 다른 호스트로 전송됩니다.

데이터가 삭제 될 때 RAM 페이지가 더 이상 더럽지 않다는 것을 가상 메모리 관리자에게 알리는 방법이 있는지 알고 싶습니다.

가상 메모리를 제어하기 위해 블록을 사용하거나 해제 할 때 mmap 및 munmap을 사용해야합니까? 이 작업의 오버 헤드는 무엇입니까? 또한 일부 동료들은 큰 mmap 공간 할당에 따른 성능 영향에 대해 우려를 표시했습니다. 스왑 파일처럼 행동하여 더티 페이지 만 고려해야합니다.

답변

0

mmap/munmap이 트릭을해야합니다. 페이지 테이블을 수정하면 무시할 수없는 오버 헤드가 발생하고 TLB 캐시 플러시가 발생할 수 있으므로 이러한 변경 사항을 집계하고 너무 자주 수행하지 않을 수도 있습니다.

큰 메모리 공간을 할당하면 페이지 테이블 항목이 소모됩니다. 페이지를 건드리지 않는 한 실제로 할당되지는 않습니다.