• Virtio-PMD的路径选择与用法


    根据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结构更紧凑,可提高缓存命中率,同时对硬件实现更友好。

    Virtio-PMD9条路径的选择逻辑:

    如果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,将选择此路径。

    Virtio-PMD每个路径的收发函数

    根据配置参数和前后端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

  • 相关阅读:
    Camera开发-图像的常用数储存格式
    seata-分布式事务
    python 使用 scapy 扫描内网IP或端口
    sfml-tutorials 官方教程的嘟嘟翻译 windows篇
    猫眼 校园招聘_1面
    关于传统迁移学习的一点概念
    lodash 深拷贝 去重
    Python与CAD系列基础篇(十)图形复制、移动、删除
    RedCap推动5G规模应用,紫光展锐赋能产业高质量发展
    好用的 JS 脚本
  • 原文地址:https://blog.csdn.net/lingshengxiyou/article/details/126709957