为什么dma_alloc_coherent()分配的内存具有更好的性能?

时间:2019-04-24 07:14:58

标签: performance memory-management mmap

我正在编写一个驱动程序代码,以便从AXI LITE外设读取和写入。由于AXI LITE是内存映射接口,因此我要在驱动程序代码中实现mmap函数。 我正在

做一些实验
  1. 使用dma_alloc_coherent()API分配内存,然后通过使用dma_mmap_cohernet()API将其映射到用户空间{提供更好的性能}。
  2. 我正在通过使用remap_pfn_range()API和pgprot_noncached()API来将内存映射到用户空间,以避免出现缓存问题{导致性能下降}。

在dma_alloc_coherent()与remap_pfn_range()相比的情况下,我在读写时看到了更好的性能。但是,如果我从代码中删除pgprot_noncached(),则remap_pfn_range映射的内存性能也有所改善,但我发现数据不匹配,这是由于缓存问题所致。

  1. {提供更好的性能}

     virt = dmam_alloc_coherent(dev,size, &phys, GFP_KERNEL);
    
      dma_mmap_coherent(dev, vma, virt, phys, size);
    

2. {prov表现不佳}

 vma->vm_flags |= VM_IO | VM_DONTDUMP;
  vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
    remap_pfn_range(vma, vma->vm_start, mem->start,>>PAGE_SHIFT, size, vma>vm_page_prot);

我的疑问是:-

  1. 我无法理解,为什么在dma_alloc_coherent的情况下性能受到影响?

  2. 我假设dma_alloc_coherent在默认情况下提供了未缓存的内存,而在另一种情况下,我们通过使用pgprot_noncahced()API显式使内存未缓存。 pgprot_noncached()API是否执行某些内存操作或转换而导致开销?

0 个答案:

没有答案