研究日誌。

大規模なグラフ処理に対してメモリ階層構造を考慮した高性能なソフトウェアを開発。

アドレス空間のロック/アンロック。

2008-06-18 23:38:41 | Weblog
#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() を用いれば、グラフデータがスワッピングすることを防ぐことができそうだが、共有メモリの扱いがよくわかっていないので、もう少し調べてみようと思う。