DPDK18.08上对VIRTIO IN ORDER 功能所做的优化
众所周知,虚拟队列数据传输的基本流程是——virtio驱动向available队列添加buffer描述符并且触发驱动事件来通知后端device。Device执行前端的request,当结束时标记已经被使用的buffer,然后向驱动发送中断。在device处理过程中,并不一定要求按照virtio device加入avaible队列的顺序来使用buffer。这就造成virtio驱动必须一个一个描述符来处理数据。
然而,一些硬件vhost device可以保证按照avaiblering的顺序使用buffer,这时就可以提供VIRTIO_F_IN_ORDER feature。如果feature被协商成功,就可以使用优化过的驱动程序。
在未正式发布的Virtio spec对IN_ORDER的实现有如下要求:
当VIRTIO_F_IN_ORDER协商成功之后,virtio驱动要按照ring的顺序使用描述符,从table 0开始并且在table 结束的位置做回滚。当virtio device添加available ring描述符时, 如果其中一个位置为x的描述符中VRING_DESC_F_NEXT被设置到flag上,描述符中next的值必须为x+1或者是0(如果x是最末位)。如果是使用INDIRECT描述符时,indirect描述符队列中的索引数值也需要连续,从0开始然后按顺序1,2,以此类推。
作为对应的实现,18.08中virtio user pmd中加入了两个新的收发函数:virtio_recv_mergeable_pkts_inorder和virtio_xmit_pkts_inorder。为了配置in order和Rx_mrg这个对virtio pmd Rx/Tx path选择上非常重要的feature, 加入了两个新的virtio vdev参数。一个是mrg_rxbuf 用来配置virtio user device支持VIRTIO_NET_F_MRG_RXBUF feature,默认配置是打开;还有一个是in_order用来配置VIRTIO_F_IN_ORDERfeature,默认配置也是打开。所以现在如果在dpdk生成一个virtio虚拟设备,它的默认参数会是“queues=1,queue_size=256,server=0,mrg_rxbuf=1,in_order=1”。
随着新的收发路径和device参数加入到了virtio user pmd以及对 卸载选项的整理。virtio user pmd的收发路径的选择也发生了变化。
18.05下Virtio RX path的选择逻辑:
如果RX_MRG的feature协商成功, RX会选择merge path。如果virtio pmd rxmode中的hw_ip_chksum打开的话,会选择normal Rx path。其他情况下,Rx会选择simple Rx。
18.05下Virtio Txpath的选择逻辑:
如果RX_MRG的feature协商成功,TX会选择normal xmit path。其他情况下, Tx会选择Simple Tx。
18.08下Virtio RX path的选择逻辑变更为:
如果in_order feature协商成功,同时Rx_MRG feature也被协商成功,Rx会选择in_order Rx。如果Rx_MRG没有协商,并且chksum, LRO, Vlan strip卸载关闭,会选择simple Rx。除此之外都会选择mergable Rx。
18.08下Virtio Tx path的选择逻辑变更为:
如果in_order feature协商成功,Tx会选择 in_order tx,否则会选择normal tx.
IN_ORDER可以简化virtio 驱动的运行逻辑,也可以减少一些无用的数据更新。有些流程如virtio driver填充available ring或者xmit ring时可以采用批量地处理和更新。并且由于前后端都已经约定好描述符的排布是按顺序的,virtio驱动访问描述符时Cache miss的数量也会减少。由于这些优化的引入,可以看到在数据吞吐量较大时,in_order实现可以带来显著的性能提升。
以下是在Intel Purely平台下的测试数据:
Platform: Purely
CPU: Intel(R) Xeon(R) Platinum 8160 CPU @ 2.10GHz
DPDK baseline: 18.05
Setup: testpmd with vhost vdev + testpmd with virtio vdev
原文链接:https://blog.csdn.net/weixin_37097605/article/details/101514594
更多DPDK学习资料有需要的可以自行添加进入学习交流君 羊 793599096 免费获取,或自行报名学习,免费订阅,永久学习,关注我持续更新哦!!!
学习地址:http://ke.qq.com/course/5066203?flowToken=1043717