2011-08-09 3 views
1

boost::interprocess::managed_shared_memory을 사용하여 공유 메모리에 데이터 구조를로드합니다. 공유 메모리 세그먼트를 실제 메모리에 고정해야합니다 (예 : 매핑 된 파일의 시스템 호출 mlock과 유사).공유 메모리 세그먼트를 물리적 메모리에 고정하는 방법

리눅스에서는 머지 않아 데이터 구조가 물리적 메모리에서 스왑 아웃됩니다. 필자의 경우, 이것은 스왑 아웃 된 후 구조에 액세스하는 다음 프로세스에 대해 비용을 부과합니다.

공유 메모리를 실제 메모리에 고정시킬 수있는 방법이 있습니까? boost::interprocess을 사용할 수 없다하더라도 모든 솔루션에 관심이 있습니다. (부스트 1.46 이후 분명히 가능) basic_managed_xsi_shared_memory를 사용

+0

일시적으로 스왑 파티션을 비활성화하기 위해 swapoff 명령을 사용하고 있습니다. 물론이 솔루션은 이상적이지 않습니다 ... – kounoupis

+0

행운이 함께? 나는 이것에 또한 흥미있다. – xeon

답변

0

, 당신은 액세스 할 수있는 기본 shmid 당신이 shmctl를 사용하여 shmid가를 제어 할 수 있도록해야하는합니다 (get_shmid 멤버에서). shmctl을 사용하면 SHM_LOCK 명령을 shmid에 적용하여 공유 메모리 페이지를 스와핑 할 수 있습니다. 메모리 잠금 등 (만약 '피닝'로 참조) 로크

다른 유형의 메모리에 매핑 된 파일의 mlock 명령 mapped_regionget_addressget_size 멤버 함수에 의한 반환 값을 제공하여 실현 될 수있다.