vhost-user 的诞生:Virtio 网络和 DPDK

virtio net 用户态实现: virtio-user

1. 一段话总结

该博客围绕vhost-user/virtio-pmd 架构 展开,先回顾了已广泛部署但存在性能开销的vhost-net/virtio-net 架构 ,随后介绍了为解决性能问题所依赖的DPDK(Data Plane Development Kit) (通过轮询模式驱动 PMD 绕开内核网络栈提升 packet 处理速度)与OVS-DPDK (将 OVS 内核转发表移至用户空间,结合 PMD 进一步优化),详细阐述了 vhost-user(主机用户空间,作为 OVS-DPDK 一部分)与 virtio-pmd(客户机用户空间,轮询模式驱动)组成的新架构,其能使整体性能提升2 至 4 倍 ,但需应用链接 DPDK 库、依赖专业配置,在虚拟网络功能(VNFs) 等对性能要求极高的场景适用,后续还将推出该架构内部细节的深度解析内容。

一、概述与前期架构

  1. 定位:从宏观层面介绍基于 DPDK 的 virtio 架构,后续将推出面向架构师 / 开发者的技术深度解析博客及实操博客。

  2. 前期架构回顾:vhost-net/virtio-net 架构

    • 组成:主机端内核中的 vhost-net(后端)、客户机端内核中的 virtio-net(前端)。
    • 现状:已广泛部署,具备一定实用性,客户机中开发的应用可通过标准 Linux 套接字(借助主机)连接网络,对用户友好。
    • 缺陷:存在性能开销,并非最优解决方案,需后续架构优化。

二、性能优化核心技术解析

(1)DPDK(Data Plane Development Kit)

  1. 目标:为数据平面应用提供简单且完整的快速 packet 处理框架。

  2. 核心机制:

    • 采用 "运行至完成" 的 packet 处理模式,需在调用数据平面应用前预分配所有资源,且这些专用资源在专用逻辑处理核心上执行。
    • 与 Linux 内核对比:Linux 内核依赖调度器和中断实现进程切换,而 DPDK 通过持续轮询访问设备,避免了上下文切换和中断处理的开销,但代价是需将部分 CPU 核心 100% 用于 packet 处理。
  3. 关键组件:轮询模式驱动(PMD)

    • 功能:实现用户空间与物理接口之间的直接 packet 传输,完全绕开内核网络栈。
    • 优势:消除中断处理环节、绕开内核栈,相比内核转发显著提升性能。
  4. 使用方式:DPDK 是一组库,需应用层链接这些库并调用相关 API 才能使用。

(2)OVS-DPDK

  1. 传统 OVS 局限:传统 Open vSwitch(OVS)通常依赖内核空间数据路径转发,内核模块含简单流表;但 "例外包"(OpenFlow 流中的第一个包)因不匹配内核流表,需发送至用户空间 OVS 守护进程(ovs-vswitchd)处理,且受 Linux 网络栈限制,无法满足高 packet 速率需求。

  2. OVS-DPDK 优化:

    • 整合 OVS 与 DPDK,借助 PMD 驱动,将传统 OVS 的内核模块转发表移至用户空间。
    • 架构特点:所有 OVS 组件运行在用户空间,通过 PMD 驱动与物理 NIC 通信。
  3. 扩展能力:不仅主机用户空间可运行 DPDK 应用,客户机用户空间也能运行带 PMD 驱动的 DPDK 应用。

三、vhost-user/virtio-pmd 架构详解

(1)架构组成

组件 运行空间 核心特点 功能作用
vhost-user(后端) 主机用户空间 属 OVS-DPDK 用户空间应用的一部分,基于 DPDK 库(含额外 API) 主机上每创建一个客户机 VM,就实例化一个 vhost-user 后端,与客户机的 virtio 前端通信
virtio-pmd(前端) 客户机用户空间 轮询模式驱动,占用专用核心,无中断处理 客户机用户空间应用需链接 DPDK 库,才能使用 virtio-pmd 优化数据平面

(2)与前期架构对比

  • 替换关系:vhost-user/virtio-pmd 架构中,vhost-netvhost-user 替换,virtio-netvirtio-pmd替换。
  • 性能提升:主机用户空间通过共享内存直接访问物理 NIC(绕开内核),客户机用户空间使用 virtio-pmd(同样绕开内核),整体性能可提升2 至 4 倍

(3) usability 权衡

  • 前期架构优势:vhost-net/virtio-net 架构中,客户机 OS 视角下数据平面通信简单,仅需在客户机内核中添加 virtio 驱动,客户机用户空间应用即可自动获得标准 Linux 网络接口。
  • 新架构局限:vhost-user/virtio-pmd 架构中,客户机用户空间应用需使用 DPDK 库中的 virtio-pmd 驱动,配置和优化 DPDK 需专业知识,操作难度较大。

四、架构应用场景与后续计划

  1. 适用场景:适用于虚拟网络功能(VNFs) 等对性能要求极高的场景,此类场景中性能是关键因素,基于 DPDK 的 virtio 架构可帮助达成预期性能目标。
  2. 开发要求:开发基于该架构的应用需专业知识,且需深入理解 DPDK API 及其各类优化方式。
  3. 后续内容:下一篇博客将深入解析 vhost-user/virtio-pmd 架构的内部结构,以及其不同的控制平面和数据平面组件。

4. 关键问题

问题 1:vhost-user/virtio-pmd 架构相比传统的 vhost-net/virtio-net 架构,在性能和 usability 上分别有怎样的差异?

答案:性能方面

  • vhost-user/virtio-pmd 架构通过主机用户空间借助共享内存直接访问物理 NIC(绕开内核)、客户机用户空间使用 virtio-pmd(绕开内核),整体性能相比 vhost-net/virtio-net 架构提升2 至 4 倍

  • usability 方面,vhost-net/virtio-net 架构中客户机 OS 仅需添加 virtio 驱动,应用即可自动获得标准 Linux 网络接口,操作简单;

  • 而 vhost-user/virtio-pmd 架构要求客户机应用链接 DPDK 库并使用 virtio-pmd 驱动,配置和优化需专业知识,难度更高。

问题 2:DPDK(Data Plane Development Kit)通过哪些核心机制实现对 packet 处理性能的提升?这些机制又带来了哪些代价?

答案:核心机制包括:

    1. 采用 "运行至完成" 的 packet 处理模式,调用数据平面应用前预分配所有资源,并在专用逻辑核心上执行;
    1. 通过持续轮询访问设备,而非依赖 Linux 内核的调度器和中断,避免上下文切换和中断处理开销;
    1. 提供轮询模式驱动(PMD),实现用户空间与物理接口直接传包,绕开内核网络栈。带来的代价是需将部分 CPU 核心100% 专用于 packet 处理,无法用于其他任务。

问题 3:OVS-DPDK 相比传统的 Open vSwitch(OVS),在架构上做了哪些关键调整?这些调整如何适配 vhost-user/virtio-pmd 架构的需求?

答案:关键调整:传统 OVS 依赖内核空间数据路径转发,"例外包" 需交用户空间处理,且受 Linux 网络栈限制;

OVS-DPDK 整合 OVS 与 DPDK,将传统 OVS 的内核模块转发表移至用户空间,并借助 DPDK 的 PMD 驱动与物理 NIC 通信,所有 OVS 组件均运行在用户空间。

适配需求:vhost-user/virtio-pmd 架构的核心是在用户空间实现高性能数据传输(绕开内核),OVS-DPDK 将转发逻辑移至用户空间并结合 PMD 的设计,与该架构 "主机用户空间运行 vhost-user、依赖高效硬件交互" 的需求契合,为 vhost-user 提供了高效的转发平面支持,保障了整体架构的性能优势。

参考:

www.doubao.com/chat/187047...

相关推荐
西门吹雪@1321 小时前
springboot项目添加请求链路追踪日志traceId
java·spring boot·后端
moxiaoran57533 小时前
Springboot实现WebSocket通信(二)
spring boot·后端·websocket
会跑的葫芦怪4 小时前
Golang 赋值运算符与短声明 (= 与 :=)使用场景
开发语言·后端·golang
数据知道4 小时前
Go基础:Go语言函数和方法详解
开发语言·后端·golang·go语言
我是华为OD~HR~栗栗呀5 小时前
华为od-前端面经-22届非科班
java·前端·c++·后端·python·华为od·华为
yzx9910136 小时前
对比django,flask,opencv三大
人工智能·后端·python·django·flask
汤姆yu7 小时前
2025版基于springboot的校内跑腿管理系统
java·spring boot·后端
你的人类朋友7 小时前
说下token和refresh-token
前端·后端·安全
半夏知半秋7 小时前
skynet.dispatch与skynet.register_protocol
笔记·后端·学习·安全架构
蒋星熠8 小时前
网络协议深度解析:从OSI七层模型到现代互联网通信的技术实战
网络·后端·python·网络协议·http·性能优化·tcp