免费注册 查看新帖 |

Chinaunix

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

怎样申请连续的256M内存 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-02-18 17:36 |只看该作者
重新读datasheet, 好好看看DMA的细节, 读一个kernel里的driver和Documentation下的DMA-mapping.txt文件。 你肯定理解错了。

论坛徽章:
0
12 [报告]
发表于 2009-02-18 18:06 |只看该作者
我申请这个内存跟DMA没关系啊。申请这个内存是用来做磁盘数据的cache.

论坛徽章:
0
13 [报告]
发表于 2009-02-18 18:11 |只看该作者
你自己做page cache?

论坛徽章:
0
14 [报告]
发表于 2009-02-18 20:56 |只看该作者
page cache?不是很明白这个概念。

存储设备读写频率很高,我们的cache主要是用来将从磁盘读出的数据放到申请的内存中,这样下次再读同一地址数据的时候就不用再到磁盘上去读,直接从内存中取就可以了。这样速度会快很多。不知这样说是否明白?
我现在想用ioremap来做,现在的问题是怎样将ioremap得到的地址转换成page结构?

论坛徽章:
0
15 [报告]
发表于 2009-02-18 21:41 |只看该作者
我今天刚好测试过,不过我的系统用__get_pages最大只能分配4M。不过在系统没跑什么进程的情况下驱动中连续申请4M的得到的256M虚拟地址是连续的(这样申请的空间是有内核逻辑地址的,所以物理上也是连续的)。我的系统是1G内存,测试到最大连续113个4M块。不过这种方法不是很可靠。

对于在启动时用mem=保留内存的话,对于32位系统通常只有128M的虚拟空间用于动态映射,虽然你有很大的物理空间,但同时能用的不会超过这个,因为软件都是通过虚拟地址访问内存空间的。而且这一部分用于DMA比较麻烦,不能用dma_single_map等接口。我这几天也在为这个烦。
对于64-bit的系统,现在我还不清楚内核地址空间分配了多大。

论坛徽章:
0
16 [报告]
发表于 2009-02-19 11:38 |只看该作者
用64bit系统呵。

论坛徽章:
0
17 [报告]
发表于 2009-02-19 19:41 |只看该作者
在系统启动完之前(也就是mem_init()函数执行之前)用类似alloc_bootmem()的函数来申请就可以,这样申请的内存空间系统启动之后不会被Linux内核管理,也就是不会被内核回收,内核不知道有这段内存,你可以自己放心使用;

系统启动后(确切地说是mem_init()函数执行之后)一次能申请到的最大内存空间是由头文件include/linux/kmalloc_sizes.h中的内容来限定的,当然也可以通过修改这个文件来增加,但这样不安全,如果系统中申请大块内存的程序太多,系统效率会大大降低,也很容易死掉.

可以去读一下即将出版的《嵌入式系统Linux内核开发实战指南(ARM平台)》一书。

[ 本帖最后由 chinaemblinux 于 2009-2-19 19:58 编辑 ]

论坛徽章:
0
18 [报告]
发表于 2009-02-20 11:39 |只看该作者
原帖由 hb12112 于 2009-2-18 18:06 发表
我申请这个内存跟DMA没关系啊。申请这个内存是用来做磁盘数据的cache.


为何一定要连续呢?用链表或者hash表不行吗?
数据高速缓存的查找也要讲效率嘛,用hash表查找方便呀。不过,内核没有输出hash表的函数接口,list到是实现了。

论坛徽章:
0
19 [报告]
发表于 2009-02-20 11:41 |只看该作者

回复 #17 chinaemblinux 的帖子

这种方式得到的地址应该是物理地址,当其它模块要用这个地址的咋办?其它模块用的是虚拟地址,他们之间没有页表转换.我的理解是否正确?

另外这种方式和在grub中加入mem=xxx有何区别?谢谢!

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
20 [报告]
发表于 2009-02-20 12:56 |只看该作者
我今天刚好测试过,不过我的系统用__get_pages最大只能分配4M。

是的,一般系统是不能一下子申请那么多啊的连续内存的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP