#include <sys/mman.h>
int mlock (const void *addr, size_t len);
addr から len バイト分の仮想メモリ領域を物理メモリ上にロックする。
#include <sys/mman.h>
int mlockall (int flags);
カレントプロセスのアドレス空間内のページすべてを、物理メモリ上にロックする。
・MCL_CURRENT
プロセスのアドレス空間に現在マッピングされているページ、スタック、データセグメント、ファイルマッピングなどすべてをロックする。
・MCL_FUTURE
プロセスのアドレス空間へ今後マッピングされるページもすべてロックする。
#include <sys/mman.h>
int munlock (const void *addr, size_t len);
addr から len バイトの範囲に含まれるページをアンロックする。
#include <sys/mman.h>
int mlockall (void);
mlockall() の逆。
#include <unistd.h>
#include <sys/mman.h>
int mincore (void *start, size_t length, unsigned char *vec);
システムコールが発行された時点で、メモリ領域内のページが物理メモリ上に存在するかどうかを示すベクタを得られる。ページサイズでアラインメントされたアドレス start からメモリ領域の length バイト分までの各ページが、得られたベクタ vec の1バイトに対応している。vec には (length-1+page_size)/page_size バイト以上の領域が必要である。各バイトの最下位ビットが1ならば、対応するページが物理メモリ上に存在し、0であれば存在しないことを表している。
mlock() を用いれば、グラフデータがスワッピングすることを防ぐことができそうだが、共有メモリの扱いがよくわかっていないので、もう少し調べてみようと思う。
int mlock (const void *addr, size_t len);
addr から len バイト分の仮想メモリ領域を物理メモリ上にロックする。
#include <sys/mman.h>
int mlockall (int flags);
カレントプロセスのアドレス空間内のページすべてを、物理メモリ上にロックする。
・MCL_CURRENT
プロセスのアドレス空間に現在マッピングされているページ、スタック、データセグメント、ファイルマッピングなどすべてをロックする。
・MCL_FUTURE
プロセスのアドレス空間へ今後マッピングされるページもすべてロックする。
#include <sys/mman.h>
int munlock (const void *addr, size_t len);
addr から len バイトの範囲に含まれるページをアンロックする。
#include <sys/mman.h>
int mlockall (void);
mlockall() の逆。
#include <unistd.h>
#include <sys/mman.h>
int mincore (void *start, size_t length, unsigned char *vec);
システムコールが発行された時点で、メモリ領域内のページが物理メモリ上に存在するかどうかを示すベクタを得られる。ページサイズでアラインメントされたアドレス start からメモリ領域の length バイト分までの各ページが、得られたベクタ vec の1バイトに対応している。vec には (length-1+page_size)/page_size バイト以上の領域が必要である。各バイトの最下位ビットが1ならば、対応するページが物理メモリ上に存在し、0であれば存在しないことを表している。
mlock() を用いれば、グラフデータがスワッピングすることを防ぐことができそうだが、共有メモリの扱いがよくわかっていないので、もう少し調べてみようと思う。