一、vhost-user--------Virtio 网络和 DPDK

在这篇文章中,我们将提供一个基于主机和客户端的 Data Plane Development Kit (DPDK) 的 Virtio 架构的高级解决方案概述。这篇博客将会后续跟随一篇针对架构师/开发者的技术深入博客以及一篇实际操作博客。

之前的博客包括了解决方案概述、技术深入介绍以及实际操作文章,向读者介绍了基于 Virtio 网络的生态系统,包括基本构建模块(KVM、QEMU、Libvirt)、vhost 协议以及 vhost-net/virtio-net 架构。这个架构基于内核主机端(后端)的 vhost-net 和内核客户端端(前端)的 virtio-net。

vhost-net/virtio-net 架构提供了一个多年来广泛部署的工作解决方案。一方面,对于在虚拟机上运行应用程序的用户来说,这个解决方案非常方便,因为它使用标准的 Linux 套接字来连接到网络(通过主机)。另一方面,这个解决方案并不是最优的,包含一些性能开销,稍后会进行描述。

为了解决性能问题,我们将介绍 vhost-user/virtio-pmd 架构。为了理解详情,我们将回顾数据平面开发工具包(DPDK),以及 OVS 如何连接到 DPDK(OVS-DPDK),以及 Virtio 如何在后端和前端两侧融入这个故事。

DPDK概述

DPDK的目标是为数据平面应用程序提供快速数据包处理的简单完整框架。它实现了一种“数据包处理完成后运行”的模型,这意味着在调用数据平面应用程序之前,所有资源都需要被分配。这些专用资源在专用的逻辑处理核心上执行。

与Linux内核不同,在DPDK架构中,设备通过不断轮询来访问,而不是使用调度程序和中断来在进程之间切换。这避免了上下文切换和中断处理开销,但代价是将CPU核心的一部分100%专用于处理数据包。

在实践中,DPDK提供了一系列轮询模式驱动程序(PMDs),这些驱动程序使用户空间和物理接口之间可以直接传输数据包,完全绕过了内核网络堆栈。这种方法通过消除中断处理和绕过内核堆栈,显著提高了性能,相对于内核转发。

DPDK是一组库。因此,要使用它们,您需要一个链接到这些库并调用相关API的应用程序。

以下图表显示了先前的virtio构建模块以及使用PMD驱动程序来访问物理NIC(绕过内核)的DPDK应用程序:
在这里插入图片描述

OVS-DPDK概述

正如在先前的博客中所描述的,Open vSwitch通常使用内核空间数据路径来转发数据包。这意味着OVS内核模块包含一个用于转发接收到的数据包的简单流表。但仍然有一小部分数据包,我们称之为异常数据包(OpenFlow流中的第一个数据包),它们不匹配内核空间中的现有条目,并被发送到用户空间的OVS守护程序(ovs-vswitchd)进行处理。然后,守护程序将分析数据包并更新OVS内核流表,以便该流中的附加数据包将直接通过OVS内核模型转发表进行转发。

这种方法消除了对大多数流量进行用户空间和内核空间之间的上下文切换的需求,但仍受限于不适合高数据包速率需求的Linux网络堆栈。

如果我们集成OVS和DPDK,我们可以利用先前提到的PMD驱动程序,并将先前的OVS内核模块转发表移至用户空间。

这个图表显示了一个OVS-DPDK应用程序,其中所有的OVS组件都在用户空间运行,并且利用PMD驱动程序与物理NIC进行通信:
在这里插入图片描述
应该提到,尽管我们只看到DPDK应用程序在主机用户空间上运行,但也可以在客户用户空间中运行带有PMD驱动程序的DPDK应用程序。这将在下一部分详细介绍。

vhost-user/virtio-pmd架构

在vhost-user/virtio-pmd架构中,virtio在主机用户空间和客户用户空间都使用DPDK:

vhost-user(后端) - 在主机用户空间中运行,作为OVS-DPDK用户空间应用程序的一部
分。正如前面提到的,DPDK是一个库,vhost-user模块是该库中的附加API。OVS-
DPDK是与这个库链接并调用API的实际应用程序。对于在主机上创建的每个客户虚拟
机,都会实例化另一个vhost-user后端,用于与客户虚拟机的virtio前端进行通信。

virtio-pmd(前端) - 在客户用户空间中运行,是一个轮询模式驱动程序,占用专用核心
并执行轮询而不产生中断。要使运行在用户空间的应用程序使用virtio-pmd,它也需要链
接到DPDK库。

这个图表显示了所有这些组件是如何协同工作的:
在这里插入图片描述

如果我们将这种架构与基于内核的vhost-net/virtio-net架构进行比较,可以看到vhost-net被vhost-user取代,而virtio-net被virtio-pmd取代

通过允许主机用户空间通过共享内存直接访问物理NIC,绕过内核,并且在客户用户空间使用virtio-pmd也绕过内核,总体性能可以提高2到4倍。

然而,从可用性方面来看,这也带来了一些成本。在vhost-net/virtio-net架构中,从客户操作系统的角度来看,数据平面通信非常简单:只需将virtio驱动程序添加到客户操作系统内核中,客户用户空间应用程序就会自动获得一个标准的Linux网络接口来进行工作。

相比之下,在vhost-user/virtio-pmd架构中,需要客户用户空间应用程序使用virtio-pmd驱动程序(来自DPDK库)以优化数据平面。这并不是一项简单的任务,需要专业知识来正确配置和优化DPDK的使用。

总结
在这篇博客中,我们向您介绍了vhost-user/virtio-pmd架构,它提高了virtio接口的性能,但也牺牲了一些可用性,因为现在需要应用程序链接和使用DPDK的API。

在一些性能至关重要的用例,如虚拟网络功能(VNFs)中,virtio DPDK架构可以帮助实现所需的性能目标。然而,开发这类应用程序需要专业知识和对DPDK API及其不同优化的深刻理解。

下一篇博客将更深入地探讨vhost-user/virtio-pmd架构及其不同的控制平面和数据平面组件。

之前文章的链接
一、virtio-networking和vhost-net简介
二、深入了解Virtio-networking和vhost-net
三、动手使用vhost-net

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写一封情书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值