免费注册 查看新帖 |

Chinaunix

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

[FreeBSD] 有关MFS过大不能启动问题的分析及解决 [复制链接]

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-01 11:47 |只看该作者 |倒序浏览
这几天,b.s.d一直困惑于mfs过大的问题。mfs不同于其他的fs,其存储空间为内存,所有的文件及inode之类的都装载进了内存。而kernel要统管所有内存的,mfs使用的内存也不例外,而且要占用内核的内存,如果mfs过大就会挤占了内核的空间,所以不能正常启动。
所以解决的方法就是增加内核空间。在/sys/i386/include/pmap.h中


  1. /*
  2. * Size of Kernel address space.  This is the number of page table pages
  3. * (4MB each) to use for the kernel.  256 pages == 1 Gigabyte.
  4. * This **MUST** be a multiple of 4 (eg: 252, 256, 260, etc).
  5. */
  6. #ifndef KVA_PAGES
  7. #define KVA_PAGES       (1 << (30 - PDRSHIFT))
  8. #endif

  9. /*
  10. * Pte related macros
  11. */
  12. #define VADDR(pdi, pti) ((vm_offset_t)(((pdi)<<PDRSHIFT)|((pti)<<PAGE_SHIFT)))

  13. #ifndef NKPT
  14. #ifdef PAE
  15. #define NKPT    120       /* actual number of kernel page tables */
  16. #else
  17. #define NKPT    30         /* actual number of kernel page tables */
  18. #endif
  19. #endif
复制代码

可以看到如果启动了PAE,页表就会变大,否则就是缺省的30,30*4MB=120MB,所以可以修改NKPT增加页表项数。
我将NKPT修改为120后的测试结果如下。实际环境中的NKPT需要根据内存实际大小修改

1.PNG (20.09 KB, 下载次数: 82)

测试结果

测试结果

论坛徽章:
0
2 [报告]
发表于 2007-02-01 17:20 |只看该作者
great,

只是偶不懂kernel

google了一下, 得到
http://lists.freebsd.org/piperma ... January/000848.html


从MFS启动用的方式是 preload, 而不是 malloc

MFS_1.JPG (80.09 KB, 下载次数: 89)

MFS_1.JPG

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2007-02-01 17:24 |只看该作者
好文章

论坛徽章:
0
4 [报告]
发表于 2007-02-02 10:32 |只看该作者
我上面用的是512m内存.
按照上面的maillist说, 建立md的时候只是跟物理内存有关系.

我还有疑问就是. 从MFS启动是, 内存磁盘是有loader已经事先装载好的. 还需要有
kernel处理吗? 而且kernel可管理的物理内存在32位下是4G. 按照mirnshi 所说的
需要页表来管理, 而页表管理的最大是120m. 那么如果有一个130m的应用程序是
不是就运行不起来了(当然可以只装载一部分代码到物理内存).


原谅我上面的疑问, 我不懂kernel.

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
5 [报告]
发表于 2007-02-02 13:07 |只看该作者
原帖由 garibaldi 于 2007-2-2 10:32 发表
我上面用的是512m内存.
按照上面的maillist说, 建立md的时候只是跟物理内存有关系.

我还有疑问就是. 从MFS启动是, 内存磁盘是有loader已经事先装载好的. 还需要有
kernel处理吗? 而且kernel可管理的物理内存 ...

可能是不同的版本,实现的方式不同了。我是在4.11下作的。
mfs的代码是在内核中。
“页表管理的最大是120m”,兄弟,理解错了吧?看看代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP