免费注册 查看新帖 |

Chinaunix

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

快速内存操作技术 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2006-04-14 21:42 |只看该作者
好精彩,好激烈,好佩服,好郁闷--不知道在说什么:D

论坛徽章:
0
42 [报告]
发表于 2006-04-17 10:37 |只看该作者
原帖由 思一克 于 2006-4-14 17:10 发表
to orbire,

_pa(x)不能用于kernel的VMA(vmalloc得到的)地址。无效的


要得到连续的,线性逻辑地址,就不能用vmalloc方式。
驱动建议有两种,一种是采用预留,一种是采用scatter/gather,但要设备I/O支持才行,
如果支持Direct I/O,对于Huge Buffer可采用scatter/gather模式。

如果你要强行采用GFP_NOFAIL,这会冒很大风险,有时会严重阻塞系统。

要采用物理线性,得用kmalloc或者是__get_free_pages之类才行,这时利用_pa(x)

论坛徽章:
0
43 [报告]
发表于 2006-04-17 10:46 |只看该作者
原帖由 思一克 于 2006-4-14 16:57 发表
可是你
m = open("/dev/mem", ...)
read(m, .....)

本身就是要调用copy_to_user. 那能快的起来吗,怎么能是“比mmap更快的方法”?


如果用mmap也是可以的,看你自己怎么去实现细节。
1. 可以直接操作文件/dev/mem
2. 直接操作地址
3. 物理地址采用ioremap重映射,在哪儿用都行

说明:
     之所以写这些,主要是为朋友们提供一种新的选择:本着实用、方便、快捷的宗旨。
     无非强调一点,在有些不适合VMA机制的模式下,又不能像mem=xxxM方式来预留,
     又需要huge buffer的线性模式(DMA),又不希望像scatter/gather I/O哪么麻烦,
     我们提供了一种新的可行路径。

     望对诸君有益
     ===================================================
     如果前面有些发言有过激之处,望海涵!

论坛徽章:
0
44 [报告]
发表于 2006-04-17 10:48 |只看该作者
那到底什么是快速操作物理内存?

open("/dev/mem",,,)  read/write已经被否定了。
mmap你说过不是最快的。

如何最快--物理内存

论坛徽章:
0
45 [报告]
发表于 2006-04-17 10:52 |只看该作者
原帖由 思一克 于 2006-4-17 10:48 发表
那到底什么是快速操作物理内存?

open("/dev/mem",,,)  read/write已经被否定了。
mmap你说过不是最快的。

如何最快--物理内存

ioremap
只是让你的应用在用户空间及内核空间看起来是合法的
其实你都知道,这块内存你完全可以自己管理,只是不用
时,让内核回收。

有时纯地址操作是不允许的,如果可以,那当然最快了。
用ioremap,只是让映射后的虚址在你的应用所在的空间。

[ 本帖最后由 obrire 于 2006-4-17 10:54 编辑 ]

论坛徽章:
0
46 [报告]
发表于 2006-04-17 11:40 |只看该作者
ioremap好象不是做那个用途的吧。
另外,ioremap得到的虚拟地址如何转换为物理地址? 还有调用ioremap如何使返回地址在你的应用空间?

论坛徽章:
0
47 [报告]
发表于 2006-04-17 12:30 |只看该作者
原帖由 思一克 于 2006-4-17 11:40 发表
ioremap好象不是做那个用途的吧。
另外,ioremap得到的虚拟地址如何转换为物理地址? 还有调用ioremap如何使返回地址在你的应用空间?


iomem *address = ioremap(0x600000/*物理地址*/, 0x200000/*尺寸*/)

此处的address已经是虚地址了

论坛徽章:
0
48 [报告]
发表于 2006-04-17 12:34 |只看该作者

回复 46楼 思一克 的帖子

如果不习惯,用out/in之类都可以
不过还是memset/memcpy之类来的快

论坛徽章:
0
49 [报告]
发表于 2006-04-17 12:38 |只看该作者
address在应用的空间吗

原帖由 obrire 于 2006-4-17 12:30 发表


iomem *address = ioremap(0x600000/*物理地址*/, 0x200000/*尺寸*/)

此处的address已经是虚地址了

论坛徽章:
0
50 [报告]
发表于 2006-04-17 15:25 |只看该作者

回复 49楼 思一克 的帖子

是的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP