2011-08-09 13 views
1

boost::interprocess::managed_shared_memoryを使用して、共有メモリ内のデータ構造をロードします。私は、共有メモリセグメントを物理メモリにピン止めする必要があります(例えばマップされたファイルのシステムコールmlockに似ています)。共有メモリセグメントを物理メモリに固定する方法

Linuxでは、遅かれ早かれデータ構造が物理メモリからスワップアウトされます。私の場合、これは、スワップアウトされた後、構造にアクセスする次のプロセスのコストを犠牲にします。

共有メモリを物理メモリに固定する方法はありますか? boost::interprocessを使用できない場合でも、私はどのソリューションにも興味があります。 (ブースト1.46以降明らかに利用可能)basic_managed_xsi_shared_memoryを使用して

+0

私は一時的にこれを達成するためにswapoffコマンドを使用してスワップパーティションを無効にしています。このソリューションは理想的ではありません... – kounoupis

+0

これで運がいいですか?私もこれに興味があります。 – xeon

答えて

0

、あなたがshmctlを使用してshmidをコントロールできるようにする必要があります(get_shmidメンバーから)基礎となるshmidにアクセスすることができます。 shmctlを使用すると、SHM_LOCKコマンドをshmidに適用することで、共有メモリページのスワップを防ぐことができます。そのようなメモリをロックとして(あなたは「ピン止め」として参照)のロックの

他のタイプのメモリにファイルをマップし、mlockコマンドにmapped_regionget_addressget_sizeメンバ関数から得られた戻り値を供給することによって実現することができます。

関連する問題