首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提高SPDK在用户空间DMA访问上的性能?

如何提高SPDK在用户空间DMA访问上的性能?
EN

Stack Overflow用户
提问于 2019-08-28 22:14:13
回答 1查看 323关注 0票数 0

我正在开发一个用户空间PCI驱动程序,它使用SPDK/VFIO进行dma访问。

目前,对于每个DMA分配请求,我需要填充结构spdk_vfio_dma_map,然后调用系统调用ioctl(fd, VFIO_IOMMU_MAP_DMA, &dma_map)来通过IOMMU映射DMA区域。然后调用ioctl(fd, VFIO_IOMMU_UNMAP_DMA, &dma_map)取消IOMMU映射。

到目前为止,这还不错,看起来这就是SPDK示例所使用的。但是,我想知道是否有一种方法可以预先分配用户空间中的所有内存缓冲区,那么在每个DMA分配请求中,只需使用预先分配的内存,而不是每次执行ioctl调用?

任何想法都是很受欢迎的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-25 20:13:36

不知道我是否得到了这个问题,但是整个想法( DPDK和SPDK)是分配您在应用程序启动或驱动程序探测时使用的所有内存。

如果您使用的内存一直处于应用程序控制之下,那么您不需要在每个DMA事务中执行VFIO_IOMMU_MAP_DMAVFIO_IOMMU_UNMAP_DMA。如果不是这样的话,您有两个选择:

  1. 为每个IO执行VFIO_IOMMU_MAP_DMAVFIO_IOMMU_UNMAP_DMA
  2. 将有效负载复制到已在VFIO_IOMMU_MAP_DMA中注册的内存。

第一个选项更适合巨大的内存块,而第二个选项更适合小IO块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57700675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档