免费注册 查看新帖 |

Chinaunix

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

[内存管理] framebuffer是如何使用cache的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-07 22:32 |只看该作者 |倒序浏览
本帖最后由 person_luo 于 2012-09-08 00:44 编辑

最近测试arm下framebuffer内存访问速度,发现跟普通的内存访问速度基本一致,看源代码当中framebuffer内存是从DMA当中分配的,理论上是没有使用CPU cache,可读的速度怎么就会跟其它有cache部分内存速会一致呢(内核cache是配置成WT方式的,测试过程中打开了MMU)?
当将整个内存的cache全部关闭的情况下,再测试内存读写速度会明显比打开cache时要慢很多,对比一下从速度上觉得framebuffer好像也是使用了cache的,这个与DMA内存不能cache的做法相矛盾。
请高人可以指点下,问题原因在哪。

论坛徽章:
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
2 [报告]
发表于 2012-09-09 00:52 |只看该作者
write combine

论坛徽章:
0
3 [报告]
发表于 2012-09-09 23:06 |只看该作者
本帖最后由 person_luo 于 2012-09-09 23:19 编辑

framebuffer内存申请是使用的dma_alloc_coherent,所以fb内存不是使用的WC方式:
        /* allocate frame buffer */
        da8xx_fb_info->screen_base = dma_alloc_coherent(NULL,
                                        par->databuf_sz + PAGE_SIZE,
                                        (resource_size_t *)
                                        &da8xx_fb_info->fix.smem_start,
                                        GFP_KERNEL | GFP_DMA);


/*
* Allocate DMA-coherent memory space and return both the kernel remapped
* virtual and bus address for that space.
*/
void *
dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp)
{
        void *memory;

        if (dma_alloc_from_coherent(dev, size, handle, &memory))
                return memory;

        return __dma_alloc(dev, size, handle, gfp,
                           pgprot_dmacoherent(pgprot_kernel));
}
EXPORT_SYMBOL(dma_alloc_coherent);

论坛徽章:
0
4 [报告]
发表于 2012-09-10 19:20 |只看该作者
回复 1# person_luo


    恩。对于DMA的memory 其属性是Write Through/Cache Disabled.

    你保证测试用例没有问题吗?

论坛徽章:
0
5 [报告]
发表于 2012-09-11 00:18 |只看该作者
不懂,关注中

论坛徽章:
0
6 [报告]
发表于 2012-09-11 08:52 来自手机 |只看该作者
内存的cache全部关闭,如何实现的?

论坛徽章:
0
7 [报告]
发表于 2012-09-11 23:54 |只看该作者
回复 4# omycle

测试用例可以确保没有问题:
操作framebuffer数据,会改变LCD的显示内容,说明显存位置操作是对的。
另块一块对比测试区域内存是定义的一个全局数组。

   

论坛徽章:
0
8 [报告]
发表于 2012-09-12 12:31 |只看该作者
回复 7# person_luo


    我的意思是测试性能的方法是否有问题

论坛徽章:
0
9 [报告]
发表于 2012-09-12 17:26 |只看该作者
整个内存全部关闭当然慢了,你要只关闭framebuffer的cache

论坛徽章:
0
10 [报告]
发表于 2012-09-12 17:38 |只看该作者
回复 9# moonsunearth


    呵呵,我忽视了这点。

楼主,通过dma alloc的内存,属性本身就是 Cache disabled的,为什么要把全部内存的cacheable属性全部disabled?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP