免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: ktrudger
打印 上一主题 下一主题

[FreeBSD] freebsd内核模块中只能分配<80M内存,有何办法? [复制链接]

论坛徽章:
0
31 [报告]
发表于 2007-01-10 11:39 |只看该作者
原帖由 mirnshi 于 2007-1-10 11:35 发表

对系统不熟,还在上面做内核开发?你们头真能容忍这种风险。光盘引导都不会吗?

这些当然会,不过我会的,仅仅限于装装系统,用用vi和ctags,编编内核了,别的就不会了。

论坛徽章:
0
32 [报告]
发表于 2007-01-10 12:16 |只看该作者
试试看单用户模式下能不能修复。

论坛徽章:
0
33 [报告]
发表于 2007-01-10 12:47 |只看该作者
用upgrade的方式把系统弄好了,刚才把那个vm.kmem.size设置为1G,结果启动时又挂了,提示分配内存失败。改为512M试试。

论坛徽章:
0
34 [报告]
发表于 2007-01-10 13:09 |只看该作者
原帖由 雨丝风片 于 2007-1-9 20:40 发表
FreeBSD4.11的kern_malloc.c的kmeminit()函数:

  1.         /*
  2.          * Try to auto-tune the kernel memory size, so that it is
  3.          * more applicable for a wider range of machine sizes.
  4.          *
复制代码
...

最后证实雨丝风片兄的办法是行得通的:
/boot/loader.conf中加入:

  1. kern.vm.kmem.size="536870912"
复制代码


这样就可以分配256M以内的内存了,我试过,可以分配成功。

我的机器当前是1G内存,如果kern.vm.kmem.size设置为768M,系统就不能启动。

论坛徽章:
0
35 [报告]
发表于 2007-01-10 13:10 |只看该作者
o(∩_∩)o... 多谢版主帮忙,成功解决一难题~

论坛徽章:
0
36 [报告]
发表于 2007-01-10 13:25 |只看该作者
原帖由 ktrudger 于 2007-1-10 12:47 发表
用upgrade的方式把系统弄好了,刚才把那个vm.kmem.size设置为1G,结果启动时又挂了,提示分配内存失败。改为512M试试。


我在24楼告诉你的恢复方法试过没有?无效?

论坛徽章:
0
37 [报告]
发表于 2007-01-10 13:33 |只看该作者
原帖由 ktrudger 于 2007-1-10 13:09 发表

最后证实雨丝风片兄的办法是行得通的:
/boot/loader.conf中加入:

  1. kern.vm.kmem.size="536870912"
复制代码


这样就可以分配256M以内的内存了,我试过,可以分配成功。

我的 ...



主要是搭建4.11的环境费了点时间,否则我们说我们的6.1,你说你的4.11,两个版本的实现机制差异不小,扯不到一块儿。。。

单就这个参数而言,后来改名字了,也就是mirnshi说的vm.kmem_size:

  1.         /* Allow final override from the kernel environment */
  2. #ifndef BURN_BRIDGES
  3.         if (TUNABLE_INT_FETCH("kern.vm.kmem.size", &vm_kmem_size) != 0)
  4.                 printf("kern.vm.kmem.size is now called vm.kmem_size!\n");
  5. #endif
  6.         TUNABLE_INT_FETCH("vm.kmem_size", &vm_kmem_size);
复制代码

论坛徽章:
0
38 [报告]
发表于 2007-01-10 14:21 |只看该作者
在我的6.2 PRE-RELEASE 的代码中看到这样一段:

/* virtual sizes (bytes) for various kernel submaps */
#ifndef VM_KMEM_SIZE
#define VM_KMEM_SIZE            (12 * 1024 * 1024)
#endif

/*
* How many physical pages per KVA page allocated.
* min(max(VM_KMEM_SIZE, Physical memory/VM_KMEM_SIZE_SCALE), VM_KMEM_SIZE_MAX)
* is the total KVA space allocated for kmem_map.
*/
#ifndef VM_KMEM_SIZE_SCALE
#define VM_KMEM_SIZE_SCALE      (3)
#endif

/*
* Ceiling on amount of kmem_map kva space.
*/
#ifndef VM_KMEM_SIZE_MAX
#define VM_KMEM_SIZE_MAX        (320 * 1024 * 1024)
#endif



so大家应该知道这个值在内核中是如何初始化的了。

论坛徽章:
0
39 [报告]
发表于 2007-01-10 14:36 |只看该作者
原帖由 雨丝风片 于 2007-1-10 11:22 发表


晕掉。

4.11系统启动的时候,在等待10秒钟的时间内按除enter之外的任意建进入boot提示符,直接set kern.vm.kmem.size=xxxx


瓦咔咔
刚才没看到你的帖子,系统启动时我按了空格,试过输入set vm.kmem.size="xxx"和set vm.kmem.size=xxx都不行,就没想过加个“kern.”前缀
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP