OVS-DPDK/虚拟化学习

news2024/10/6 6:42:00

用户/内核空间虚拟化*。**

NFV和Middlebox的不同数据平面模型,具有不同的虚拟交换机选项、虚拟设备接口和虚拟化框架:(a)基于内核的vSwitch + virtio-user/vhost-net和TUN/TAP + VM;(b)基于内核的vSwitch + virtio-user/vhost-net和TUN/TAP + container;©基于内核的vSwitch + virtio-net/vhost-net和TUN/TAP + VM;(d)基于内核的vSwitch + veth + container;(e)用户空间的vSwitch + virtio-user/vhost-user + VM;(f)用户空间的vSwitch + virtio-user/vhost-user + Container;(g)用户空间的vSwitch + virtio-net/vhost-user + VM;(h)用户空间的vSwitch + virtio-user/vhost-net和TUN/TAP + veth + container。我们将(f)评估为L2/L3 NFs的最佳解决方案,将(d)评估为L4/L7中间件的最佳解决方案(§II-C)

虚拟交换机(vSwitch):vSwitch可以广泛分为基于内核的方法(例如在内核中运行的Open vSwitch和Linux桥接)和绕过内核的用户空间方法(例如OVS-DPDK [16]和OVS-AF XDP [17])。基于内核的vSwitch在主机的操作系统内核中运行,使用内核中的NIC驱动程序与物理NIC交换数据包。用户空间的vSwitch在主机的用户空间中运行,使用用户空间NIC驱动程序与物理NIC交换数据包。
用户空间的vSwitch依赖于绕过内核与NIC交换数据包。我们考虑了两种不同但广泛采用的绕过内核的架构:DPDK [2]和AF XDP [7]。它们都支持在NIC和用户空间之间进行零拷贝数据包输入/输出。然而,它们在执行时的方式基本不同。DPDK的内核绕过仅依赖于轮询,而AF XDP中的内核绕过可以是事件驱动的(即每次到达数据包时触发)或轮询。DPDK实现了轮询模式驱动程序(PMD),轮询接收数据包和数据包传输完成。这有助于在NIC和用户空间函数之间实现高性能数据包输入/输出。然而,即使没有传入数据包,这会导致高CPU使用率。还需要一个额外的专用内核驱动程序(例如UIO驱动程序或VFIO驱动程序)来阻止NIC发送的中断信号,以使用户空间PMD通过主动轮询正常工作。然而,这要求NIC专用于DPDK。DPDK的排他性导致DPDK与内核堆栈之间存在兼容性问题;例如,一旦DPDK将其内核驱动程序绑定到NIC上,内核堆栈将无法再访问NIC。一种解决方案是使用单根I/O虚拟化(SR-IOV [13])创建多个虚拟以太网接口(称为虚拟功能,VF),并将DPDK的内核驱动程序专用于其中一个VF,而不影响内核堆栈(见第VI节)。
AF XDP [7]是DPDK的另一种内核绕过选择。AF XDP的事件驱动模式使其严格按负载比例进行。事件驱动的AF XDP仅在有新的数据包到达时才执行,因此当没有数据包时,不消耗CPU周期。这从根本上使得事件驱动的AF XDP在轻负载下与DPDK相比更加资源高效。轮询模式的AF XDP和DPDK类似。然而,AF XDP的轮询模式仍会引入中断开销,因为在NIC驱动程序中执行XDP程序,导致性能比DPDK低。我们在§IV-D中评估了基于轮询和事件驱动的AF XDP。另外,AF XDP(无论是轮询模式还是事件驱动模式)不需要专门的内核驱动程序来启用内核绕过,因此可以与内核堆栈无缝协作,支持L4/L7中间盒的协议处理。然而,DPDK则需要SR-IOV支持来与内核堆栈共享物理NIC。与纯基于内核的解决方案(即使用内核堆栈同时进行L2/L3 NF和L4/L7中间盒)相比,AF XDP在NIC和用户空间函数之间实现了零拷贝数据包输入/输出,并实现了较高的性能。

网络协议栈:协议栈可以是基于内核的,也可以是用户空间的,使用内核旁路传递数据包。基于内核的网络协议栈(例如,Linux内核协议栈)提供了完整功能、稳定可靠的协议处理解决方案,其可用性通常比用户空间协议栈解决方案更好,例如Microboxes [18]和mTCP [19],它们只提供有限的支持(例如,仅TCP),从而限制了它们的使用。在本工作中,我们主要关注基于内核的协议栈。

虚拟设备接口:典型的虚拟设备接口包括TUN/TAP、veth对和virtio/vhost设备。TUN/TAP作为一个数据管道(TUN用于发送L3隧道,TAP用于接收L2帧),连接内核协议栈与用户空间应用程序。TUN/TAP可以与virtio/vhost虚拟设备接口一起工作,将虚拟机或容器连接到基于内核的虚拟交换机(图1(a)-©)。virtio/vhost接口作为虚拟NIC(vNIC)用于虚拟机和容器。virtio接口位于虚拟机/容器中,而vhost接口位于主机中,作为virtio设备的后端。需要注意的是,每种接口都有用户空间和基于内核的两个变体(virtio-user、vhost-user和virtio-net、vhost-net)。virtio变体和vhost变体可以自由组合,例如,在图1(a)和(b)中,virtio-user可以与vhost-net配合使用;virtio-net可以与vhost-user配合使用(图1(g))。因为它们都遵循vhost协议[14],具有一致的消息传递API,可以与不同的变体配合使用。veth对常用于容器网络[20],在容器的网络命名空间和主机的网络命名空间之间作为数据管道与virtio/vhost不同,veth对仅在内核中工作,没有用户空间变体,因此不能直接与用户空间虚拟交换机配合使用(见图1(h))。

图1显示了通过组合虚拟化、虚拟交换机和虚拟设备接口的不同选项,用于L2 / L3网络功能和L4 / L7中间盒的数据平面连接的不同变体。 L2 / L3网络功能不需要协议层处理,因为它们仅提供L2 / L3交换机的转发功能,就像虚拟交换机一样。 L4 / L7中间盒还需要协议栈处理。 图1首先定性评估了L2 / L3网络功能和L4 / L7中间盒的不同数据平面模型的可用性,取决于数据平面模型是否具有协议栈。
图1(a)、(b)、(e)、(f)中的数据平面模型不涉及协议层处理,适用于L2 / L3网络功能。图1(c)、(d)、(g)、(h)中的数据平面模型均配备内核协议栈,适用于L4 / L7中间盒。虽然适用于L4 / L7中间盒的数据平面模型(图1(c)、(d)、(g)、(h))也可以用于L2 / L3网络功能。然而,协议处理增加了不必要的开销,因为它不是必需的。此外,我们可以通过添加用户空间协议栈来扩展L2 / L3网络功能的数据平面模型以支持L4 / L7中间盒;但是,出于两个原因,我们不赞成使用这种方法:(1)我们希望使用完整功能的内核协议栈,(2)在每个中间盒功能中再次添加独立的用户空间协议栈会增加内存占用。

使用virtio-user接口可以帮助L2/L3 NF数据平面绕过协议层处理,充当虚拟网卡驱动程序在虚拟机/容器的用户空间中直接与用户空间功能交互。根据所使用的虚拟交换机,virtio-user设备与不同的后端vhost设备合作,创建一个直接的数据管道,用于用户空间功能与虚拟交换机(基于内核或用户空间的)之间的原始数据包交换:vhost-net设备用于通过TUN/TAP与基于内核的虚拟交换机进行连接(图1(a),(b));vhost-user设备用于与用户空间虚拟交换机连接(图1(e),(f))。
当使用容器来虚拟化L4/L7中间盒(图1(d),(h))时,使网络协议栈运行的关键元素是veth对
。容器侧的veth连接到容器的网络命名空间中的协议栈(实现在主机的内核中),用于必要的协议处理。主机侧的veth连接到主机的网络命名空间,以便与基于内核的虚拟交换机(d)无缝工作。然而,如果必须与用户空间虚拟交换机(h)一起工作,则需要从用户空间注入数据包到容器的网络命名空间进行协议处理。为了实现这个目标,用户空间虚拟交换机通过virtio-user/vhost-net和TUN/TAP设备接口与内核相连。TUN/TAP接口配置为与veth对之间的点对点连接,以避免在主机的网络命名空间中重复L2/L3处理。
当使用虚拟机来虚拟化L4/L7中间盒功能时,使用virtio-net设备接口来利用虚拟机的内核中的协议栈。virtio-net设备作为内核中的虚拟网卡驱动程序,在虚拟机的内核栈中与用户空间功能交互。与virtio-user设备接口类似,virtio-net接口可以与基于内核的虚拟交换机(图1(c))或用户空间虚拟交换机(图1(g))配合使用,通过与特定的后端vhost设备接口合作

注意:容器的网络命名空间中没有L2/L3处理。原因是容器实际上与主机共享相同的内核。由于L2/L3处理由主机网络命名空间中的基于内核的虚拟交换机执行,因此在将数据包传递到容器的网络命名空间后,数据包进入协议层堆栈。因此,容器内部不会执行重复的L2/L3处理。每个veth对被分配了唯一的IP地址,用于在不同容器的网络命名空间之间进行L2/L3转发。在容器命名空间中的应用程序共享相同的IP地址,并通过L4端口号进行区分。

OVS-DPDK

安装教程:
https://docs.openvswitch.org/en/latest/intro/install/dpdk/
https://docs.openvswitch.org/en/latest/howto/dpdk/
overview和应用
https://www.intel.com/content/www/us/en/developer/articles/technical/open-vswitch-with-dpdk-overview.html

OVS-dpdk中文解析
https://zhuanlan.zhihu.com/p/589707574

gitbook
https://tonydeng.github.io/sdn-handbook/dpdk/ovs-dpdk.html

虚拟交换机是运行在通用平台上的一个软件层,可以连接虚拟机的网络端口、提供一套纯软件的路由交换协议栈的一个机制,帮助平台上运行的虚拟机实例(虚拟机之间、虚拟机与外部网络之间)。

虚拟机的虚拟网卡对应虚拟交换机的一个虚拟端口,通用平台上的物理网卡作为虚拟交换机的上行链路端口。

虽然是虚拟交换机,但是他的工作原理和物理交换机类似。虚拟交换机的主要好处体现在扩展灵活。

在这里插入图片描述

DPDK加速的OVS与原始OVS的区别在于,从OVS连接的某个网络端口接收到的报文不需要openvswitch.ko内核态的处理,报文通过DPDK PMD驱动直接到达用户态ovs-vswitchd里。

OvS交换机端口由网络设备(或netdevs)表示。Netdev-dpdk是一个使用DPDK来加速交换机I/O的DPDK加速网络设备,通过三个独立的接口实现:一个物理接口(由DPDK中的librte_eth库处理)和两个虚拟接口(librte_vhost和librte_ring)。它们与连接到虚拟交换机的物理和虚拟设备进行交互。

其他OvS架构层提供进一步的功能并与SDN控制器等进行接口交互。dpif-netdev提供用户空间转发,ofproto是实现OpenFlow交换机的OvS库。它通过网络与OpenFlow控制器通信,并通过ofproto提供程序与交换机硬件或软件通信。ovsdb服务器维护该OvS实例的最新交换表信息,并将其与SDN控制器通信。
在这里插入图片描述
在这里插入图片描述

从物理或虚拟接口进入OvS-DPDK的数据包会根据其标头字段接收唯一的标识符或哈希,然后将其与三个主要交换表之一中的条目进行匹配:精确匹配缓存(EMC),数据路径分类器(dpcls)或ofproto分类器

除非找到匹配项,否则数据包的标识符将按顺序遍历这三个表,一旦在表中找到匹配规则所指示的适当操作,数据包将在完成所有操作后从交换机中转发出去。该方案如图所示。这三个表具有不同的特性和相关的吞吐性能/延迟。EMC为有限数量的表项提供最快的处理速度。数据包的标识符必须与该表中的所有字段完全匹配(源IP和端口、目标IP和端口以及协议的五元组),才能以最高速度进行处理,否则将“miss”并经过dpclsdpcls包含更多的表项(按多个子表排列),并且允许对数据包标识符进行通配符匹配(例如,指定目标IP和端口,但允许任意源IP)。这使得其吞吐性能约为EMC的一半,并适用于更大数量的表项。在dpcls中匹配的数据包流被安装在EMC中,以便后续具有相同标识符的数据包可以以最高速度处理。

dpcls中未找到匹配项将导致数据包标识符被发送至ofproto分类器,以便OpenFlow控制器决定采取的操作。这条路径是性能最低的,比EMC慢十倍以上。ofproto分类器中的匹配结果将在更快的交换表中建立新的表项,以便可以更快地处理同一流中的后续数据包。

数据包的标识符将按顺序遍历这三个表中的每一个,除非找到匹配项,在这种情况下,将执行表中匹配规则指示的适当操作,并在完成所有操作后将数据包转发出交换机。

网络存储优化
在这里插入图片描述

参考
《深入浅出DPDK》——OVS中的DPDK性能加速

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1034776.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么算泄露公司机密的行为(什么程度算公司泄密行为)

在当今的商业环境中,保护公司的核心竞争力和商业机密是至关重要的。然而,员工可能出于各种原因泄露这些信息,包括对竞争对手的追求、个人利益的驱动或者对工作的不满。在这种情况下,企业需要依赖专业的调查工具来揭示和证明员工的…

OpenGL之相机

OpenGL本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感觉,而不是场景在移动。 本节我们将会讨论如何在OpenGL中配置一个摄像机,并且将会讨论FPS风格的…

Nginx使用指南

文章目录 前言一、源码编译1.1 编译1.2 第三方模块编译 二、配置文件2.1 配置语法2.2 location语法2.3 配置文件块2.4 全局变量 三、HTTP 服务器3.1 基本3.2 反向代理3.3 压缩3.4 负载均衡3.5 HTTPS 支持3.6 UrlRewrite3.7 防盗链配置3.8 跨域3.9 静态服务3.10 PC/手机端分离3.…

Web3 solidity编写fillorder填充订单函数 并梳理讲述逻辑

好 经过上文 Web3 solidity编写cancelorder取消订单函数 并梳理讲述逻辑 我们成功编写了 cancelorder 取消订单函数 其实 做了取消订单 填充订单 已经是非常简单的事了 我们还是先起来ganache 虚拟环境 这里 我们 模仿 orderCancel 在做一存储结构 //存储被填充订单 mapping…

追光者的梦

追光者的梦 鸿蒙中我茫然于世,你是钻入我心里的那束光 我所有的梦想都是和你热烈的拥抱 没有追到你时,我一直在路上 追到你时,我的人生就被你点燃 ——致所有的追光者 合肥先进光源国家重大科技基础设施项目及配套工程启动会刚开过&…

go学习之数组与Map

文章目录 一、数组1.为什么需要数组2.数组快速入门3、数组的定义和内存布局数组的使用数组的遍历数组的注意事项和细节数组的应用案例 4.slice切片1.基本介绍2.切片使用的三种方式way1way2way3 3.切片的注意事项4.string和slice 5.二维数组1.排序1)排序的基本介绍2&…

uni-app实现获取未来七天时间和星期几功能

例子如下&#xff1a; HTML&#xff1a; <viewstyle"margin-top: 3%;width: 100%;height: 10vh;display: flex;justify-content: space-around;"><div v-for"(item,index) in same_week" :class"[same_dayitem.date? activ :,dis]"cl…

在虚拟机上安装win10/ubuntu的教程

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 一、下载软件资源 1、首先下载虚拟机Vmware_Pro17软件并正确安装&#xff1a;网盘链接 2、然后下载操作系统的镜像文件&#xff1a;MSDN, 我告诉你 - 做一个安静的工具站 二、在虚拟机上安装ubuntu系统 1…

EXP武器库编写

文章目录 pocsuite3工具SQL注入EXP布尔盲注优化最终优化 延时注入 phpstudy2016-2018-RCE利用DVWA文件上传metinfo_5.0.4EXPSQL-布尔盲注文件包含漏洞 定制SQLmaptamper脚本sqli-labs/less-26关卡分析 tamper脚本编写 python是黑客最喜欢的编程语言之一&#xff0c;但同时go语言…

基于AVR128单片机智能电风扇控制系统

一、系统方案 模拟的电风扇的工作状态有3种&#xff1a;自然风、常风及睡眠风。使用三个按键S1-S3设置自然风、常风及睡眠风。 再使用两个按键S4和S5&#xff0c;S4用于定时电风扇定时时间长短的设置&#xff0c;每按一次S4键&#xff0c;定时时间增加10秒&#xff0c;最长60秒…

C/C++程序员技术发展方向(强烈推荐!!)

大家好&#xff0c;我是阿Q。 今天这篇就是专门给现在还迷茫不知道自己到底要做什么方向C开发的同学们。 几年后回过头看的时候&#xff0c;你一定会感谢当初那个努力的自己&#xff01; C作为当下也非常流行的一个面向对象语言&#xff0c;有着非常多的应用&#xff0c;一定…

RHCSA 文件的上传下载(Linux-Windows)

目录 一、SCP 上传&#xff08;Windows--->Linux&#xff09;&#xff1a; 下载&#xff08;Linux--->Windows&#xff09;&#xff1a; 二、STFP 三、XFTP工具 一、SCP 上传&#xff08;Windows--->Linux&#xff09;&#xff1a; 在Windows本地端命令窗口中转…

基因组注释(Annotation)

基因组组装完成后&#xff0c;或者是完成了草图&#xff0c;就不可避免遇到一个问题&#xff0c;需要对基因组序列进行注释。注释之前首先得构建基因模型&#xff0c;有三种策略&#xff1a; 从头注释(de novo prediction)&#xff1a;通过已有的概率模型来预测基因结构&#…

【刷题】2023年第十四届蓝桥杯大赛软件类省赛C/C++大学A组真题

蓝桥杯2023年第十四届省赛真题-平方差 - C语言网 (dotcpp.com) 初步想法&#xff0c;x y2 − z2&#xff08;yz)(y-z) 即xa*b&#xff0c;ayz&#xff0c;by-z 2yab 即ab是2的倍数就好了。 即x存在两个因数之和为偶数就能满足条件。 但时间是&#xff08;r-l&#xff09;*x&am…

C语言回调函数与注册函数的使用

概述 在项目中&#xff0c;经常见到此写法&#xff0c;在此写个demo&#xff0c;方便其他工程师参阅。 开发环境&#xff1a;Visual Studio Community 2022 1、代码 #include <stdio.h>//封装库代码 typedef struct {bool status;void (*setStatus)(int status); }T_…

动手吧,vue单选框

单选框到处可见&#xff0c;组件库不方便自定义样式&#xff0c;还是自己写吧。 效果图&#xff1a; 1、template部分 <template><labelclass"v-radio flex":class"[{ disable: disabled }]":aria-disabled"disabled"><spancla…

如何搭建专属的物联网私有云?需要考虑哪些因素?

随着物联网技术的快速发展&#xff0c;越来越多的企业开始意识到搭建专属的物联网私有云的重要性。私有云是指企业自主建设和管理的云服务环境&#xff0c;其中企业可以实现对数据和服务的全面控制&#xff0c;同时也可以享受云服务的高效性和灵活性。 一、企业做专属物联网私…

基于jenkins+k8s实现devops

1、背景 由于jenkins运行在k8s上能够更好的利用动态agent进行构建。所以写了个部署教程&#xff0c;亲测无坑 2、部署 1、创建ns kubectl create namespace devops 2、kubectl apply -f jenkins.yml apiVersion: v1 kind: ServiceAccount metadata:name: jenkinsnamespace…

用于图像分类的预训练模型(PyTorch实现)

用于图像分类的预训练模型&#xff08;PyTorch实现&#xff09; 在本文中&#xff0c;我们将介绍一些使用 TorchVision 模块中存在的预训练网络的实践示例——用于图像分类的预训练模型。 1. 基于预训练模型进行图像分类 预训练模型是在 ImageNet 等大型基准数据集上训练的神…