[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[plamo:21934] Re: 物理メモリサイズを取得する方法を教えて下さい
-
From:Iwasa Dai
-
Date:Thu, 5 Feb 2004 12:05:18 +0900 (JST)
- Subject: [plamo:21934] Re: 物理メモリサイズを取得する方法を教えて下さい
- From: Iwasa Dai <iwasad@xxxxxxxxxxx>
- Date: Thu, 05 Feb 2004 12:06:22 +0900 (JST)
- Organization: ALPHASYSTEMS INC.
岩佐です。
> 汐崎と申します。(長文失礼)
> 下記の様なプログラムで,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 公開システム