【问题标题】:Cached/uncached memory mmap: impact on Neon缓存/非缓存内存 mmap:对 Neon 的影响
【发布时间】:2016-02-26 02:11:26
【问题描述】:

我有一个连接到 cortex-A9 OMAP4 板的相机。视频 v4l2 帧在 3.4 内核中分配:

static int vb2_dc_mmap(void *buf_priv, struct vm_area_struct *vma)
{
    struct vb2_dc_buf *buf = buf_priv;

    if (!buf) {
        printk(KERN_ERR "No buffer to map\n");
        return -EINVAL;
    }

    vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
    return vb2_mmap_pfn_range(vma, buf->dma_addr, buf->size,
                  &vb2_common_vm_ops, &buf->handler);
}

我也测试过:

vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);

我有一个复杂的后处理程序集,基于 Neon 的算法在每一帧上运行。它通过标准的 v4l2 架构访问框架:

mmap(NULL, buf.length, PROT_READ | PROT_WRITE, MAP_SHARED, camera->fd, buf.m.offset);

这个优化算法的性能如下:

x ms:       user-space malloc allocation of a fake frame (reference)
10*x ms:    kernel allocation with pgprot_noncached
4*x ms:     kernel allocation with pgprot_writecombine
x ms:       kernel allocation with no pgprot call

问题是,如果我不做任何 pgprot_*,我就会有一些非常奇怪的噪音,也就是。视频中随机出现几个连续的黑色像素。当访问所有分配的内存范围时,噪音会在某些特定情况下消失。

最后,如果我在使用原始 pgprot_noncached 分配内存的同时简单地执行 memcpy,似乎没有任何性能问题,但我无法添加 memcpy。

我该如何解决这种情况,又名。获得没有任何噪音的内核内存分配,这与用户空间 malloc 一样好。

neon 代码做了很多不同增量的 vld1.u8 和 vst1.u8。

【问题讨论】:

    标签: memory-management kernel mmap v4l2


    【解决方案1】:

    作为参考,解决方案是使内存区域(outer_inv_range 和 outer_flush_range)失效并刷新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-06
      • 2015-11-06
      • 1970-01-01
      • 2013-01-07
      • 2012-08-06
      • 2011-07-02
      • 2014-09-03
      • 1970-01-01
      相关资源
      最近更新 更多