1. 背景:
在ubuntu20.04上用dpdk API:
rte_memzone_reserve_aligned("L1L2_PCIE_MEMORY", 1.5*1024*1024*1024,
rte_socket_id(), RTE_MEMZONE_1GB|RTE_MEMZONE_IOVA_CONTIG,
RTE_CACHE_LINE_SIZE);
分配1.5G 内存.
服务器和mvl PCIE卡通过这个内存进行交互.
正常情况下:
服务器使用dpdk返回的虚拟地址, mvl pcie卡上用dpdk 返回的iova地址, 然后调用DPI 的API 可以实现数据的上传和下载.
期望的虚拟地址和iova地址是不一样的. 但是实际上打印是一样的:
这种情况下表示把虚拟地址作为iova 地址. 二者一样.
那传给mvl pcie卡的其实是一个虚拟地址. 导致mvl 卡把数据push到了未知的地址.
因为这个功能在之前测试过的,两个地址不应该一样, 所以打印日志看下哪不一样: 加参数: --log-level=eal,8
对比之前的日志和现在不行的日志, 如下:
发现出错时用的iova 模式是VA 模式, 这个情况下就会让iova, va一样. 在服务器上的app 操作的其实是虚拟地址.mvl