2

私は32GBのメモリマシンを持っており、16GBのマシン内で実行する1つのユーザープロセスを試すことをシミュレートしたいと思います。1つの方法は、小さなユーザープロセスを実行し、16 GBの物理メモリをブロックしてからスリープ状態にし、この以前のユーザープロセスを使用可能なシステムで実行することです。

問題は、malloc 16GBメモリにプログラムを作成すると、ほとんどのメモリが仮想メモリからブロックされ、約64MBの物理RAMのみがブロックされることです。物理RAMをブロックするように強制する方法はありますか?

4

2 に答える 2

2

Linuxには、特定のサイズを超えるメモリを無視するカーネルパラメータがあります。

    max_addr=[KMG]  [KNL,BOOT,ia64] All physical memory greater than or
                    equal to this physical address is ignored.

だからあなたはそれを使うことができます。または見てくださいmlock

于 2012-06-19T10:08:44.320 に答える
0

andを使用mmapして使用できます(最初のフラグは、を作成するためにファイルが必要になるのを避けるためのものであり、およびパラメーターは無視されます)。が64ビットでない場合、 16GBに到達するには複数の呼び出しを行う必要があります。MAP_ANONYMOUSMAP_LOCKEDmmapfdoffsetsize_tmmap

于 2012-06-19T10:22:20.690 に答える