免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10986 | 回复: 8

请问怎么在mmap里面把映射到用户空间的内存设为cache属性,谢谢! [复制链接]

论坛徽章:
0
发表于 2009-12-17 15:27 |显示全部楼层
20可用积分
想在lcd驱动的mmap里面把映射到用户空间的内存设为cache属性,但是都没有作用。

目前是这么做的:
标准的fb_mmap有一句话是:
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
貌似是用来关闭cache的,就把这句话注释掉了,但是没什么效果。

请问各位有什么好办法吗?谢谢。

ps:我的测试程序也比较简单,就是在用户空间映射lcd的内存,然后填充这块内存1000遍,计算需要的时间。如果Cache打开的话用的时间肯定少。

论坛徽章:
0
发表于 2009-12-18 17:54 |显示全部楼层
应该还是有标志可以改变页表属性的。
mmap默认是nocache的?

论坛徽章:
0
发表于 2009-12-21 16:01 |显示全部楼层
write combine是和write through、write back并列的一种caching属性。

论坛徽章:
0
发表于 2009-12-21 21:02 |显示全部楼层
看到在fb_mmap中有调用:
fb_pgprotect(file, vma, off);此函数中会根据条件设置_PAGE_PCD位

论坛徽章:
0
发表于 2009-12-21 21:32 |显示全部楼层
原帖由 tassard 于 2009-12-17 15:27 发表
想在lcd驱动的mmap里面把映射到用户空间的内存设为cache属性,但是都没有作用。

目前是这么做的:
标准的fb_mmap有一句话是:
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
貌似是用来关 ...

>>vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
你不应该把这句话注释掉。它是把内存设置成wc属性,这是用于显示的内存最常用的属性,注释掉它只会让性能下降。

论坛徽章:
0
发表于 2009-12-30 15:58 |显示全部楼层
谢谢楼上各位,我把属性设成
pgprot_val(vma->vm_page_prot) &= (PTE_CACHEABLE | PTE_BUFFERABLE);

结果应用层报错如下:
swap_free: Bad swap file entry XXXXXXXX

各位有什么好办法吗?谢谢。

论坛徽章:
0
发表于 2009-12-30 16:00 |显示全部楼层
原帖由 zx_wing 于 2009-12-21 21:32 发表

>>vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
你不应该把这句话注释掉。它是把内存设置成wc属性,这是用于显示的内存最常用的属性,注释掉它只会让性能下降。


谢谢,但是我注释掉这句话后,性能既没提高也没变化。

论坛徽章:
0
发表于 2009-12-30 16:01 |显示全部楼层
原帖由 hb12112 于 2009-12-21 21:02 发表
看到在fb_mmap中有调用:
fb_pgprotect(file, vma, off);此函数中会根据条件设置_PAGE_PCD位


arm平台下,fb_pgprotect(file, vma, off); 等价于 vma->vm_page_prot = 0;

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
发表于 2010-01-01 02:21 |显示全部楼层
原帖由 tassard 于 2009-12-30 15:58 发表
谢谢楼上各位,我把属性设成
pgprot_val(vma->vm_page_prot) &= (PTE_CACHEABLE | PTE_BUFFERABLE);

结果应用层报错如下:
swap_free: Bad swap file entry XXXXXXXX

各位有什么好办法吗?谢谢。


通过/proc/mtrr应该就可以设置任意内存段为writecombining吧,似乎不用另写程序
在其他不能保证写操作为强序的CPU上,写操作combining不combining无所谓

不过既然是用于LCD的内存,那么无论如何也不应该出现这个swap_free: Bad swap file entry的提示。
你是不是将这个vm_area加入了某个匿名的objr map啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP