什么是Vhost/Virtio

Vhost/Virtio是一种半虚拟化的设备抽象接口规范, 在Qemu和KVM中的得到了广泛的应用,在客户机操作系统中实现的前端驱动程序一般直接叫Virtio, 在宿主机实现的后端驱动程序称为Vhost。与宿主机纯软件模拟I/O相比,virtio可以获得很好的性能,在数据中心中得到了广泛的应用。Linux kernel中已经提供了相应的设备驱动,分别是virtio-net,以及vhost-net,DPDK项目为了提高数据吞吐性能,相对应的,提供了Virtio的用户态驱动virtio-pmd 和vhost的用户态实现Vhost-user,下图是一张典型的Virtio使用场景图。

Vhost/Virtio 在DPDK中收发路径配置

在DPDK的vhost/virtio 中,提供不同的Rx、Tx路径供用户使用,根据场景的不同,用户可以根据自己的功能以及性能需求,来挑选合适的路径。DPDK中,提供3条Tx、Rx路径。

Mergeable 路径

选择 Mergeable接收路径的优势在于,vhost可以将available ring中独立的mbuf组成链表来接收体量更大的数据包 。在实际应用中,这是被采用最多的路径,也是DPDK开发团队在过去几个月中,性能优化的重点方向。该路径采用的收发函数配置如下:

eth_dev->tx_pkt_burst = &virtio_xmit_pkts;
eth_dev->rx_pkt_burst = &virtio_recv_mergeable_pkts;

如想使用该路径, 需要在Vhost 和Qemu连接协商的过程中,通过VIRTIO_NET_F_MRG_RXBUF功能标志位来协商启动。Vhost-user默认支持该功能,Qemu中启用该功能的命令如下所示:

qemu-system-x86_64 -name vhost-vm1
……
-device virtio-net-pci,mac=52:54:00:00:00:01,netdev=mynet1,mrg_rxbuf=on \
……

DPDK 会根据这个功能标志位,来选择相应的rx函数:

if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF))eth_dev->rx_pkt_burst = &virtio_recv_mergeable_pkts;
elseeth_dev->rx_pkt_burst = &virtio_recv_pkts;

不同于Vector和No-mergeable路径,rte_eth_txconf->txq_flags的值在Mergeable打开的情况下,并不会影响tx函数。

Vector

该路径利用处理器中的SIMD指令集,对数据的收发进行向量化处理,在纯IO数据包转发使用场景中,能够获得最高的性能。在DPDK中,该路径使用的收发函数如下:

eth_dev->tx_pkt_burst = virtio_xmit_pkts_simple;
eth_dev->rx_pkt_burst = virtio_recv_pkts_vec;

如想使用此收发路径,需要符合以下条件:

  1. 平台处理器支持相应指令集, X86平台需要支持SSE3,DPDK中通过rte_cpu_get_flag_enabled(RTE_CPUFLAG_SSE3) 进行检查,ARM平台需要支持NEON,DPDK中通过rte_cpu_get_flag_enabled(RTE_CPUFLAG_NEON)检查。
  2. RX方向的Mergeable需要关闭。DPDK会通过以下函数检查:
!vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)

Qemu中关闭该功能命令如下:

qemu-system-x86_64 -name vhost-vm1
……
-device virtio-net-pci,mac=52:54:00:00:00:01,netdev=mynet1,mrg_rxbuf=off \
……
  1. Offload 功能没有被启用。包括:VLAN offload, SCTP checksum offload, UDP checksum offload, TCP checksum offload。
  2. rte_eth_txconf->txq_flags 需要设置为1。 例如,在DPDK提供的testpmd程序中,可以在虚拟机中通过类似如下命令进行配置Virtio设备:
#testpmd -c 0x3 -n 4 -- -i --txqflags=0xf01

从以上条件可以看出,Vector路径的功能相对有限,因而并没有成为DPDK 性能优化的重点方向。

No-mergeable 路径

No-mergeable路径在现实中较少使用,其收发路径如下:

 eth_dev->tx_pkt_burst = &virtio_xmit_pkts;eth_dev->rx_pkt_burst = &virtio_recv_pkts

如想使用该路径,需要符合如下配置:

  1. RX方向Mergeable关闭
!vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)
  1. rte_eth_txconf->txq_flags需要设置为0,例如, 在DPDK提供的testpmd程序中,可以在虚拟机中通过类似如下命令进行配置Virtio 设备:
#testpmd -c 0x3 -n 4 -- -i --txqflags=0xf00

Vhost/Virtio 各路径PVP性能比较

在这部分,我们将比较一下DPDK 中vhost/virtio各收发路径 在PVP测试下的表现。PVP测试场景如下图所示,主要测试的是虚拟化环境中南北向的数据转发能力。Ixia发包器以10Gbps线速将64B数据包发送给网卡,物理机中的testpmd调用Vhost-User将数据转发进虚拟机中,虚拟机中的testpmd调用virtio-user将接收到数据转发回物理机,最终数据包回到IXIA, 数据路径为:

IXIA→NIC port1→Vhost-user0→Virtio-user0→NIC port1→IXIA


以DPDK 17.05 为例,在IO 转发配置下,不同路径的转发性能比较如下(以Mergeable为基准):

可以看到,在纯IO转发的情况下,Vector具有最好的吞吐量,比Mergeable高出了近15%。
在MAC转发配置下,不同路径的转发性能比较如下(以Mergeable为基准):

在MAC转发的情况下,3个收发路径的性能基本相同,因为Mergeable路径可以提供更多的功能,我们推荐在此情况下,使用Mergeable 路径。

下图,是在X86平台上,DPDK16.07以来的各个版本PVP MAC转发的性能趋势,可以看到,因为Mergeable路径具有更广泛的应用场景,自16.07以来,DPDK的工程师针对Mergeable 路径,进行了很多的优化工作,此路径的PVP性能已经提升了将近20%。


Note:* 在DPDK16.11的性能下降,主要是由于添加新功能带来的性能开销,例如Vhost Xstats,Indirect descriptor table等

原文链接:https://www.syswift.com/202.html

DPDK virtio的不同路径(二十七)相关推荐

  1. OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope

    OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...

  2. SpringBoot入门建站全系列(二十七)WebSocket做简单的聊天室

    SpringBoot入门建站全系列(二十七)WebSocket做简单的聊天室 一.概述 WebSocket 是一种网络通信协议.RFC6455 定义了它的通信标准. WebSocket 是 HTML5 ...

  3. 信息系统项目管理师必背核心考点(二十七)关键路径法(CPM)

    科科过为您带来软考信息系统项目管理师核心重点考点(二十七)关键路径法(CPM),内含思维导图+真题 [信息系统项目管理师核心考点]关键路径法(CPM) 正向:求每个活动的"最早考试时间[工期 ...

  4. 2021年大数据Hadoop(二十七):YARN运行流程

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn运行流程 本系列历史文章 2021年大数据Hado ...

  5. 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍

    游戏开发笔记二十七 Direct3D 11入门级知识介绍 作者:毛星云    邮箱: happylifemxy@163.com    期待着与志同道合的朋友们相互交流 上一节里我们介绍了在迈入Dire ...

  6. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十七:TFT模块 - 显示

    实验二十七:TFT模块 - 显示 所谓TFT(Thin Film Transistor)就是众多LCD当中,其中一种支持颜色的LCD,相较古老的点阵LCD(12864笑),它可谓高级了.黑金的TFT ...

  7. 微信小程序把玩(二十七)audio组件

    微信小程序把玩(二十七)audio组件 原文:微信小程序把玩(二十七)audio组件 音频播放已经封装的很好!只需配合属性设置即可! (method和data配合使用) 主要属性: wxml < ...

  8. Bootstrap基础二十七 多媒体对象(Media Object)

    Bootstrap<基础二十七> 多媒体对象(Media Object) 原文:Bootstrap<基础二十七> 多媒体对象(Media Object) Bootstrap 中 ...

  9. SAP UI5 初学者教程之二十七 - SAP UI5 应用的单元测试工具 QUnit 介绍试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...

最新文章

  1. 规格选项表管理之删除规格选项表数据
  2. 一个很简短的 JS 生成器入门和用法参考
  3. udp如何知道对方关闭_聊聊tcp和udp那些事
  4. Effective Java之利用有限制通配符提升API的灵活性(二十八)
  5. 【离散数学中的数据结构与算法】八 排列与组合四
  6. MySQL空闲会话_使用Oracle PROFILE控制会话空闲时间
  7. 舍 bpftrace 而取 systemtap 的代价和思考
  8. 宜居指数c语言,城市功能日趋完善宜居指数持续提升
  9. mysql数据基本指令_mysql数据库常用命令(详细)
  10. Visual Studio 2013无法打开IIS Express Web的解决办法
  11. 分享一个RX8025T时钟芯片的Arduino代码
  12. 数据库驱动加载失败,数据库连接失败
  13. ttl传输种过期_TTL 传输中过期2、目标主机无法访问3、请求超时4、未知主机
  14. uac管理员程序_有启用UAC的管理员快速打开程序的方法吗?
  15. 委内瑞拉肯德基将接受Dash支付
  16. AIX日志型文件系统的nbpi
  17. 自定义Edt 光标和下划线
  18. 有一种程序员的浪漫叫做,有程序为你宕过机
  19. std::true_type和std::false_type详解
  20. python将多幅图片显示在一张图片上

热门文章

  1. python语法总结-Python and、or以及and-or语法总结
  2. python面试-Python面试中常见的3个问题
  3. 从零开始学python数据分析-从零开始学Python数据分析与挖掘 PDF 下载
  4. 苹果电脑安装python-在Mac上安装Python环境
  5. 网上学python靠谱吗-0基础自学Python靠谱吗?如何快速学会?
  6. python编程if语法-二、python 语法之变量赋值与if(if else)
  7. python开发的优秀界面-:Python做推荐系统,界面用什么实现
  8. 网络编程学习笔记(gethostbyaddr函数)
  9. ListActivity的使用
  10. BZOJ 4244 邮戳拉力赛 (DP)