我正在编写一个驱动程序代码,以便从AXI LITE外设读取和写入。由于AXI LITE是内存映射接口,因此我要在驱动程序代码中实现mmap函数。 我正在
做一些实验在dma_alloc_coherent()与remap_pfn_range()相比的情况下,我在读写时看到了更好的性能。但是,如果我从代码中删除pgprot_noncached(),则remap_pfn_range映射的内存性能也有所改善,但我发现数据不匹配,这是由于缓存问题所致。
{提供更好的性能}
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);
我的疑问是:-
我无法理解,为什么在dma_alloc_coherent的情况下性能受到影响?
我假设dma_alloc_coherent在默认情况下提供了未缓存的内存,而在另一种情况下,我们通过使用pgprot_noncahced()API显式使内存未缓存。 pgprot_noncached()API是否执行某些内存操作或转换而导致开销?