Chinaunix

标题: 怎么写个程序占用掉系统一半的内存 [打印本页]

作者: Tanacore    时间: 2013-02-19 19:25
标题: 怎么写个程序占用掉系统一半的内存
我有个系统内存是64G的,我想写个kernel模块先把它的内存耗掉1半或者更多,请问这样的代码应该怎么写啊,求给个思路,我知道user space可以通过malloc来做,但是每个程序最多也就耗掉4G(还是3G?内核的1G耗不掉?)


作者: stephen_du    时间: 2013-02-19 20:43
Tanacore 发表于 2013-02-19 19:25
我有个系统内存是64G的,我想写个kernel模块先把它的内存耗掉1半或者更多,请问这样的代码应该怎么写啊,求 ...


你的系统是32/64bit?
内核占用的物理内存也就896M。
你希望一个进程或是一个内核模块占4G?
我的天啊!
如果你是OS设计者,如果一个进程或者模块能站4G!
你觉得能保证系统内其他进程占用资源的公平性吗?

虽然没有确定的答案,但个人感觉系统应该不支持单进程或者内核模块申请这么大的内存
作者: 鬼鬼一哈    时间: 2013-02-19 21:09
内核启动中,预保留一部分内存。系统启动后,你就看不到那部分内存了。。。然后你用自己去管理那部分内存,就可以不用伙伴算法了。。
作者: Tanacore    时间: 2013-02-19 21:43
系统没有开swap内存, 事情是这样的,我想搞个办法先耗掉系统很多内存,然后我有个程序,我想测试一下他在分配不到内存时的错误处理是不是有问题,会不会core dump,所以才想写个程序或者ko来完成这个事
作者: Tanacore    时间: 2013-02-19 21:44
系统没有开swap内存, 事情是这样的,我想搞个办法先耗掉系统很多内存,然后我有个程序,我想测试一下他在分配不到内存时的错误处理是不是有问题,会不会core dump,所以才想写个程序或者ko来完成这个事
作者: blake326    时间: 2013-02-19 22:13
本帖最后由 blake326 于 2013-02-19 22:14 编辑

1. 关闭swap。开着也可以,但是交换的时候系统非常非常慢。
2. 如果你是32b机器,启动一个用户进程大概只能消耗2g多的物理内存。首先malloc出来,然后每个4KB大小都要写一下,从而kernel缺页异常分配相应的物理page。(这个就是anon page)
3. 启动多个这样的进程即可。

如果64b机器,malloc大一点,然后分别写就ok了。

不过,kernel内存紧缺的时候,oom可能会把你的这个进程给杀了。
作者: blake326    时间: 2013-02-19 22:14
1. 关闭swap。开着也可以,但是交换的时候系统非常非常慢。
2. 如果你是32b机器,启动一个用户进程大概只能消耗2g多的物理内存。首先malloc出来,然后每个4KB大小都要写一下,从而kernel缺页异常分配相应的物理page。(这个就是anon page)
3. 启动多个这样的进程即可。

如果64b机器,malloc大一点,然后分别写就ok了。

不过,kernel内存紧缺的时候,oom可能会把你的这个进程给杀了。
作者: mu_evolution    时间: 2013-02-19 22:15
单根内存多大 从主板上拔下3跟 再malloc
作者: stephen_du    时间: 2013-02-19 22:19
Tanacore 发表于 2013-02-19 21:43
系统没有开swap内存, 事情是这样的,我想搞个办法先耗掉系统很多内存,然后我有个程序,我想测试一下他在分 ...


你可以给内核启动的时候配置一个mem=1024M的参数,这样内核只会使用物理内存的1G,这样就可以测试了。
或者强制4G的bootmem也行
作者: embeddedlwp    时间: 2013-02-20 07:49
回复 9# stephen_du


你对”mem=1024M“理解的不对。


   
作者: 流氓无产者    时间: 2013-02-20 09:14
Tanacore 发表于 2013-02-19 19:25
我有个系统内存是64G的,我想写个kernel模块先把它的内存耗掉1半或者更多,请问这样的代码应该怎么写啊,求 ...

64bits不受这限制吧,4G是指32 bits address space,要真实用,还要扣除swap/page file
作者: stephen_du    时间: 2013-02-20 09:35
embeddedlwp 发表于 2013-02-20 07:49
回复 9# stephen_du


请指出不对的地方,别只给论断。
作者: stephen_du    时间: 2013-02-20 09:42
回复 10# embeddedlwp



1497         mem=nn[KMG]     [KNL,BOOT] Force usage of a specific amount of memory
1498                         Amount of memory to be used when the kernel is not able
1499                         to see the whole system memory or for test.
1500                         [X86] Work as limiting max address. Use together
1501                         with memmap= to avoid physical address space collisions.
1502                         Without memmap= PCI devices could be placed at addresses
1503                         belonging to unused RAM.

我的英文可能不太好,理解的可能有差错吧

   
作者: 灌水菜鸟    时间: 2013-02-20 10:11
回复 1# Tanacore


想扩大内存不容易,想缩小还不简单?呵呵。

拔内存条;输入内核参数限制内存大小都可以啊。最好别自己写程序占内存,这样做不是很精确,最主要是麻烦,呵呵。
作者: kickxxx    时间: 2013-02-27 10:38
回复 13# stephen_du

你的理解没错,我们这种做事认真谨慎的人,千万不要被某些喜欢zhuanbility的人吓到
   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2