[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:21934] Re: 物理メモリサイズを取得する方法を教えて下さい



岩佐です。

> 汐崎と申します。(長文失礼)
> 下記の様なプログラムで,PCに実装されているRAMの内,
> ユーザプログラムから使えるサイズを取得したいのですが,
> どうも,RAM領域を越えてしまいます。
> 64MBを持つPCで,実効しますと。
> Linuxでは,SWAP分も加わるような傾向です。(約200MB)
> FreeBSDでは,511MBが得られました。
> 出来れば,使用可能なRAMメモリだけに限定したいのですが,
> ご教授頂けますでしょうか?

  そもそも、「実際に取ってみる」ってどうなのでしょう?
  実際にallocateされてしまうと、他のprocessにとっては無いも
同然なわけで、例えば、
    ○ 1GByteのメモリを実装 + 900ByteをRAM限定で取ってみる
というのは、
    ○ 100MByteで動作できるか
を試したのとさほど変わらないような気がします。
  取れるだけ取ってみる、というのは、どれだけ少ないメモリで動
作できるか、耐久テストをするに等しいような...


  それでも、実際にRAM限定でallocしてみるのであれば、malloc
する前に、mlockall(2)を使って、

    mlockall(MCL_FUTURE);

とかすると、良いかも知れません。

  手元で、main()に、

|    printf("\n chk-ram ms=%d, v=%d", ms, v);
|    if(mlockall(MCL_FUTURE)){printf("mlockall error!\n"); exit(1)} <---
|
|    i = check_ram_size(ms, v);
|    printf("\n check_ram_size (result): %d[MB]\n", i);

と一行いれ、ついでにmallocの直前にmalloc sizeを表示するprintf
をいれて、RAM 1024M, SWAP 2GのPCで実行してみたところ、973Mま
で行ったところで、daemonやらktermやらが落ちまくってしまい、
コマンドの終了が見届けられませんでした。
  __alloc_pagesに失敗して、kernelに殺されちゃう、と。
    #  そりゃそうだ。


  Subjectの「物理メモリサイズの取得」は、本文とニュアンスが違
う気がしますが、Subject通りなら、/proc/meminfoやsysinfo(2)で
わかるだろうと思います。
  で、実際の割り当て可能量は、ぼくなら、実装メモリやswapの量
から多少の余裕をみて、残りをつかう、というようにするかなぁ...
とか思ったりします。
  用途にもよるでしょうけれど。


  あと、一応ですが、

> FreeBSDでは,511MBが得られました。
    
それって、一般userで実行していて、ulimitがかかっていた、なん
て落ちではないですよね?

--- Think Diffident ----------------------------------------
                                                  uaitne.
   

Follow-Ups
[plamo:21935] Re: 物理メモリサイズを取得する方法を教えて下さい, Shun-ichi TAHARA (田原 俊一)
References
[plamo:21933] 物理メモリサイズを取得する方法を教えて下さい, H.Shiozaki

[検索ページ] [メール一覧]
Plamo ML 公開システム