根据virtio三个feature(Rx mergeable,In-order,Packed virtqueue)的组合逻辑,Virtio-PMD共有9条路径。首先介绍virtio常用的三个feature:
Rx mergeable:通过协商此feature,设备可以将独立的descriptor合并,以接收更大的数据包。
In-order:某些设备具有始终按顺序使用descriptor的能力,这些设备可以提供VIRTIO_F_IN_ORDER feature。如果协商了此feature,驱动程序将按顺序使用descriptor:从descriptor table中的offset 0开始顺序使用descriptor。同时,该feature允许设备批量操作used ring以及驱动程序批量操作available ring,由此提高缓存命中率。
Packed virtqueue:Packed virtqueue与Split virtqueue的结构不同,Split virtqueue由available ring, used ring和descriptor table构成,而Packed virtqueue由descriptor ring,driver event suppression和device event suppression构成。Packed virtqueue结构更紧凑,可提高缓存命中率,同时对硬件实现更友好。
如果Packed virtqueue没有协商成功,可以根据以下逻辑选择Split virtqueue的5条路径:
1. Split virtqueue mergeable路径:如果前后端协商了Rx mergeable feature,但未协商In-order feature,将选择此路径。
2. Split virtqueue non-mergeable路径:如果前后端未协商Rx mergeable和In-order feature,同时前端有Rx offloads请求,将选择此路径。
3. Split virtqueue in-order mergeable路径:如果前后端协商了In-order以及Rx mergeable feature,将选择此路径。
4. Split virtqueue in-order non-mergeable路径:如果前后端协商了In-order feature,但未协商Rx mergeable feature,将选择此路径。
5. Split virtqueue vectorized RX路径:如果前后端未协商Rx mergeable和In-order feature且前端没有Rx offload请求,将选择此收包路径。
如果Packed virtqueue协商成功,可以根据以下逻辑选择Packed virtqueue的4条路径:
1. Packed virtqueue mergeable路径:如果前后端协商了Rx mergeable feature,但未协商In-order feature,将选择此路径。
2. Packed virtqueue non-mergeable路径:如果前后端未协商Rx mergeable和In-order feature,将选择此路径。
3. Packed virtqueue in-order mergeable路径:如果前后端协商了In-order与Rx mergeable feature,将选择此路径。
4. Packed virtqueue in-order non-mergeable路径:如果前后端未协商Rx mergeable,但协商了In-order feature,将选择此路径。
根据配置参数和前后端feature协商情况, Virtio-PMD会自动选择不同的路径,每个路径对应的收发包函数如下表所示:
Virtio-PMD各路径在dpdk不同版本的支持情况
随着dpdk版本更新,Virtio-PMD路径的数目也在变化,Virtio-PMD路径在不同dpdk版本支持情况如下表所示:
在DPDK 18.08中,添加了新的Rx / TX函数“virtio_recv_pkts_inorder''和“virtio_xmit_pkts_inorder'',用于支持In-order feature。
在DPDK 19.02中,添加了新的Rx / TX函数“virtio_recv_pkts_packed''"virtio_recv_mergeable_pkts_packed"和"virtio_xmit_pkts_packed'',用于支持Packed virtqueue feature。
QEMU 支持状态
Qemu目前只支持Virtio-PMD中的三个路径:Split virtqueue mergebale path,Split virtqueue no-mergeable path,Split virtqueue vectorized RX path。
如何调试
如果在升级驱动程序或更改参数配置后遇到性能下降等问题,以下方法可以帮助您找到当前所使用的Virtio-PMD路径,从而更快地分析原因。
第一步,运行测试用例;
第二步,运行“ perf top”并检查virtio rx / tx函数名称;
第三步,参考上表确定当前所使用的Virtio-PMD路径。
学习地址:http://ke.qq.com/course/5066203?flowToken=1043717
更多DPDK学习资料有需要的可以自行添加进入学习交流君 羊 793599096 免费获取,或自行报名学习,免费订阅,永久学习,关注我持续更新哦!!!
原文链接:https://blog.csdn.net/weixin_37097605/article/details/102830343