免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 37481 | 回复: 16
打印 上一主题 下一主题

一个进程可以分配多大的内存? [复制链接]

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
1 [报告]
发表于 2006-03-25 15:41 |显示全部楼层
options MAXDSIZ="(2048*1024*1024)"
options DFLDSIZ="(2048*1024*1024)"

把这个换成
options MAXDSIZ="(3221225472UL)"
options DFLDSIZ="(3221225472UL)"
试试呢。
看warning应该不是算法本身的限制吧,加上UL申请3G试试。

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
2 [报告]
发表于 2006-03-25 22:47 |显示全部楼层
原帖由 antijp 于 2006-3-25 20:43 发表
我在freebsdchina的回复你没有仔细看

需要2G的话,要用2048U(LL)? * 1024 * 1024


他的意思是看FreeBSD最大可以分配多少空间。
限定最大数据空间为3G的情况下,实验结果是:相比Linux的3056 MB,freebsd不修改代码的情况下(也就是只调整config文件)启动时panic。

[ 本帖最后由 gvim 于 2006-3-25 22:49 编辑 ]

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
3 [报告]
发表于 2006-03-27 09:24 |显示全部楼层
原帖由 szjungle 于 2006-3-26 20:56 发表
能分得多大的内存,还应该跟机器的物理内存和交换分区大小有关。

NetBSD UVM FAQ 上有这么一条:

How much virtual memory do I have?

[url]http://www.netbsd.org/Documentation/kernel/uvm.html#vm-ho ...


我的机器是512M memoey+256M swap 可是申请的虚拟空间是2869M。
为什么会这样而不是FAQ上的样子,还需要看看代码。

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
4 [报告]
发表于 2006-03-27 09:26 |显示全部楼层
原帖由 fredrick 于 2006-3-26 23:55 发表
如果只是分配内存的话,内核应该会使用一种“聪明”的办法来解决问题。 不妨试试分配内存之后往这些内存单元里写一点东西,那你可能会看到实际能分配的能力了。


实际能分配的,最大只能 (物理内存-内核所占大小)+swap空间大小。
我们实验的是虚拟分配的

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
5 [报告]
发表于 2006-03-27 16:55 |显示全部楼层
原帖由 congli 于 2006-3-27 14:11 发表
经过一翻折腾,终于找到了原因.感谢风雨^_^
默认情况下,系统会保留1GB空间(打开PAE,会保留2GB),所以导致MAXDSIZ=3GB启动时出现panic.


最后结果:

呵~比linux还要多^_^

PS:虽然找到原因,修改后对性能是否 ...


可是不应该啊。(我还没有进入内存管理部分,先把问题放在这里 )
疑问1:
为什么NetBSD不会crash。我看了相关文献和论文,FreeBSD的vm和NetBSD的uvm 策略差别不大。
疑问2:
"默认情况下,系统会保留1GB空间"这是保留的内核空间,但是进程可以用的最大空间还是3G,修改KVA_PAGES只是减小了内核保留的虚拟空间。比喻下应该是拆东墙补西墙的感觉

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
6 [报告]
发表于 2006-03-27 17:05 |显示全部楼层
原帖由 雨丝风片 于 2006-3-27 17:00 发表
谈谈我对这个问题的看法。

在32位机器的4GB的地址空间中,高端的1GB是缺省留给内核使用的,低端的大致3GB的空间则留给进程自己使用。我们知道,对于一个传统的unix进程的内存布局而言,低端是text段,然后是 ...


我昨天试了下(NB)用的-static编译静态程序,运行程序可以多分得1M的虚拟空间。我估计mmap空间不会保留的那么大,以至于我困惑于实际分得的2869M和3072M还有很大的差距。(当然3072还需要去除text segment等东西。我实验的情况大约占了虚拟空间16M左右。)

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
7 [报告]
发表于 2006-03-27 17:12 |显示全部楼层
原帖由 雨丝风片 于 2006-3-27 17:07 发表



mmap保留多大是由MAXDSIZ决定的,data段不要的都给mmap,


内存分配是lazy allocation的吧。现在情况是data段都需要,难道系统需要为每个进程保留200M左右的mmap空间?不合理吧

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
8 [报告]
发表于 2006-03-27 17:25 |显示全部楼层
我理解你的意思。我的意思是将MAXDSIZ=3*1024*1024*1024的时候,也就是最大数据va大小是3G了。并且我也不打算使用mmap这个东西(比如1楼的小程序)。
那么,首先就FB来说,它就panic了。
就NB来说,可以分配2869的空间。stack size,text size都很小,stack没有修改的情况下大约是2M,等于DFLSSIZ大小。也就是说,中间还有大约200M左右分配不出来了。
我的疑问在于,保留给mmap需要这么大吗?而且在该程序里面并没有对mmap空间的申请阿。

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
9 [报告]
发表于 2006-03-27 17:29 |显示全部楼层
congli兄在gentoo上的实验结果是 3056 MB 距3G只有16M空间。这16M包含了text,stack,(或许还有的mmap),因此我想BSD不会硬性的保留200M左右出来做mmap的最小尺寸吧。

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
10 [报告]
发表于 2006-03-27 17:35 |显示全部楼层
原帖由 雨丝风片 于 2006-3-27 17:29 发表

你还没把地址空间最下边那128M的未映射区域算进去吧?


?我怎么没有看见有这个提法?我只知道0G开始分配一个页面之后的地方开始分配text
不过128M也有点吃惊
老大在哪里看见的?我去看一看。免得继续在论坛上开黄腔
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP