当前位置: 首页 > news >正文

做公司网站价格互联网创业项目创意

做公司网站价格,互联网创业项目创意,中铁建发展集团有限公司,php模板网站dpdk介绍及应用 DPDK介绍 DPDK#xff08;Data Plane Development Kit#xff09;是一组快速处理数据包的开发平台及接口。有intel主导开发#xff0c;主要基于Linux系统#xff0c;用于快速数据包处理的函 数库与驱动集合#xff0c;可以极大提高数据处理性能和吞吐量Data Plane Development Kit是一组快速处理数据包的开发平台及接口。有intel主导开发主要基于Linux系统用于快速数据包处理的函 数库与驱动集合可以极大提高数据处理性能和吞吐量提高数据平面应用程序的工作效率。 DPDK的作用 在数据平面应用中为快速处理数据包提供一个简单而完善的架构。在理解此工具集之后开发人员可以以此为基础进行新的原型设计处理大并发网络数据请求。 原始数据包的处理流程 数据包到达网卡网卡发送中断通知CPUCPU将数据包拷贝到内核空间中应用程序从内核空间中拷贝数据到用户态空间数据处理。 在这个过程中数据包处理耗时的操作有 网卡每次收到数据都发送中断打断cpu的工作。 切换和恢复过程都耗时网络数据包经过TCP/IP协议栈达到真正的应用处理程序时走过很多的流程应用程序拿到网络数据时需要经过内核空间到用户态空间的一次copy增加耗时 dpdk解决问题办法DPDK技术是重载网卡驱动直接将数据传递给用户态的应用程序避免了中间环节的经过TCP/IP协议栈内核空间到用户空间的copy。同时针对第一点网卡频繁的中断应用程序可以使用轮询的方式获取网卡上的数据避免中断造成的场景切换和恢复浪费的时间。 DPDK 库 核心库Core Libs提供系统抽象、大页内存、缓存池、定时器及无锁环等基础组件。PMD库提供全用户态的驱动以便通过轮询和线程绑定得到极高的网络吞吐支持各种本地和虚拟的 网卡。Classify库支持精确匹配Exact Match、最长匹配LPM和通配符匹配ACL提供常用包处 理的查表操作。QoS库提供网络服务质量相关组件如限速Meter和调度Sched。 dpdk 工作在哪里 内核态工作流 niclinux 内核为了兼容适配适配市面上绝大多数网卡抽象出来的一层。ifconfig 看到的eth0_0 等信息并不是网卡是一个逻辑概念一个网卡nic 会给分配一个对象eth0_0 就是这么产生的。协议栈nic 处理完会数据会放到协议栈解析如UDP\TCP\ICP协议都是协议栈解析我们是不能直接操作协议栈的。socket套接字表示一一对应的一个关系程序调用socket时会分配一个fd同时根据传入的网络协议、通信方式创建对应的TCB(TCP control block)\UDPCB(udp control block)创建的控制块包含TCP\UDP协议的所有状态信息和控制信息如源IP地址、源端口、目的IP地址、目的端口、传输层协议、序列号、确认号、窗口大小、拥塞控制等。这些信息将用于实现TCP协议的行为和进行网络通信的控制。应用程序开发的代码 那么dpdk 是如何工作的 数据从左到右流转dpdk 直接接管网卡整个数据不经过nic、协议栈socket也不经过应用程序。 dpdk 用来接管网卡dpdk 内部有对应的driver去接管驱动是一种旁路技术。从nic 放到协议栈有一个结构体是sk_buff sk_buff就是每一个网络数据包的存储方式。dpdk从网卡接收数据有一个自己的结构是mbuf。dpdk 接收完之后接收网卡的原始数据原始数据是包含了以太网处理完之后再到协议栈dpdk 协议栈与内核协议栈不是同一协议栈。 dpdk 的优势 网卡到内核中通过协议栈解析完。应用程序 通过recv 读取数据这里会有两次copy 。copy_from_user用于将用户空间的数据传送到内核空间copy_to_user是一种数据程序作用是从内核区中读取数据到用户区 dpdk 是怎么做的 dpdk 用来接管网卡从网卡内抓取取原始数据用以我们做协议处理。 为什么要这么做 性能高 zero-copy零copy 可以把网卡的数据映射到内存由内核的多次copy到现在的零copycopy 是由cpu参与的而dpdk网络模式无须cpu 参与huagepage大页内存 大页的作用是减少页表数量减少TLB缓存的失效提高内存访问效率从而提升性能巨页有两种2M和1G如果传输的数据量越大就选1G的如果传输数据量小就用2M。多队列网卡 dpdk充分的利用了多队列网卡的优势。它的粒度比内核更小可以指定网卡的每一个队列接收。在软件上着重对多队列网卡兼容支持。轮询接收 大数据传输轮询传输更优大范围提升了网卡的接收性能对与小量数据中断的性能要更优cpu 亲缘性 dpdk应用 dpdk 是一个开发框架也是一个网络处理方案dpdk是对网络数据进行截获抓取的。 在dpdk 之上有应用框架 vppovs 。 dpdk 应用场景 安全产品云原生nginx 等应用网关虚拟化 dpdk 提供俩种方式接管网卡 uio uio 是对io 的操作vfio vfio 是虚拟功能的io dpdk 对服务器并发有没有帮助 并发是一个服务能够承载的客户端数量。dpdk 是用来提升网卡的吞吐量使网卡的处理能力性能更高提升整个网络的吞吐量。dpdk对IO的并发数量帮助不大但是对单一个IO每秒接收数据能力和处理数据能力的提升每秒向IO灌的数据变多。 网卡绑定 modprobe vfio-pci #加载vfio模块 ip link set eth0 down ip link set eth1 down dpdk-devbind.py -b vfio-pci eth0 dpdk-devbind.py -b vfio-pci eth1大页内存 大页内存Large Page Memory是操作系统提供的一种内存管理技术它将传统的页通常大小为 4KB扩展为更大的页例如2MB或1GB。这些大页能够显著减少页表的大小和内存管理的开销同时提高内存访问的效率和性能。 内存分页查找虚拟内存到物理内存过程 TLB TLB中保存着逻辑地址前20位[31:12]和页框号的对应关系如果匹配到逻辑地址就可以迅速找到页框号 页框号可以理解为页表项通过页框号与逻辑地址后12位的偏移组合得到最终的物理地址。 大页内存的主要特点和优势 减少页表数量 使用大页内存可以减少操作系统维护的页表数量因为每个大页只需要一个页表项来映射整个大页的地址范围而不是许多小页所需的多个页表 项。减少TLBTranslation Lookaside Buffer缓存的失效 TLB是用于加速虚拟地址到物理地址转换的缓存。使用大页内存可以减少TLB缓存的失效率因为每个TLB条目可以覆盖更多的内存页。提高内存访问效率 由于减少了页表的大小和TLB缓存的失效大页内存可以显著提高内存访问的效率和响应速度特别是对于大量数据的连续访问。 Open vSwitch ovs 介绍 Open vSwitch 简称 OVS是一个开源的多层虚拟交换机。Open vSwitch 支持标准管理接口、应用程序扩展和控制转发功能非常适合在 VM 环境中用作虚拟交换机目前 Open vSwitch 支持多种基于 Linux 的虚拟化技术。 Open vSwitch 具有以下特点和功能 支持 802.1Q VLAN 标准的 trunk 和 access 端口支持物理网卡绑定和 LACP链路汇聚控制协议802.3ad支持 NetFlow、sFlow® 和端口镜像增强通信过程的可视性支持 QoS服务质量配置、监控和管理支持多种隧道技术如 Geneve、GRE、VXLAN、STT、ERSPAN、GTP-U、SRv6、Bareudp 和 LISP支持 802.1ag 标准的连接故障管理支持 OpenFlow 1.0 协议和后续的诸多扩展具有支持事务的轻量级数据库和基于 C / Python 的远程配置协议使用 Linux 内核模块的高性能转发这里指 Datapath Open vSwitch 提供了一种灵活、可扩展的虚拟交换机解决方案适用于数据中心、云计算和网络虚拟化等应用场景提供了高级网络功能和网络集中管理的能力。 Open vSwitch 在网络中扮演的角色如下图所示虚拟交换机。 可以简单理解Open vSwitch 是 Linux Bridge 的加强版加强的点主要体现在 Open vSwitch 的设计基于 SDN 的思想支持多种标准管理接口和协议如 OpenFlow 协议Linux Bridge 只支持Vxlan而 Open vSwitch 支持 Vxlan、GRE、IPSec 等许多种隧道技术Open vSwitch 适用于多种虚拟化架构如 Xen、KVM、VMware 等 Bridge 桥 Bridge代表一个以太网交换机(Switch)一个主机中可以创建一个或者多个Bridge。Bridge的功能是根据一定规则把从端口收到的数据包转发到另一个或多个端口。 Port 端口Port与物理交换机的端口概念类似Port是OVS Bridge上创建的一个虚拟端口每个Port都隶属于一个Bridge。Port有以下几种类型 Normal 可以把操作系统中已有的网卡(物理网卡em1/eth0,或虚拟机的虚拟网卡tapxxx)挂载到ovs上ovs会生成一个同名Port处理这块网卡进出的数据包。Internal Internal类型是OVS内部创建的虚拟网卡接口每创建一个PortOVS会自动创建一个同名接口(Interface)挂载到新创建的Port上。Patch 当主机中有多个ovs网桥时可以使用Patch Port把两个网桥连起来。Patch Port总是成对出现分别连接在两个网桥上从一个Patch Port收到的数据包会被转发到另一个Patch Port。Tunnel OVS中支持添加隧道(Tunnel)端口常见隧道技术有两种gre或vxlan。 Interface Interface是连接到Port的网络接口设备是OVS与外部交换数据包的组件在通常情况下Port和Interface是一对一的关系只有在配置Port为 bond模式后Port和Interface是一对多的关系。这个网络接口设备可能是创建Internal类型Port时OVS自动生成的虚拟网卡也可能是系统的物理网卡或虚拟网卡(TUN/TAP)挂载在ovs上。 OVS中只有”Internal”类型的网卡接口才支持配置IP地址。 Interface是一块网络接口设备负责接收或发送数据包Port是OVS网桥上建立的一个虚拟端口Interface挂载在Port上。 OpenFlow技术的驱动 OpenVSwitch的另一大特点就是基于OpenFlow。OpenFlow可以定义网络包在交换机中的处理流程pipeline因此支持OpenFlow的交换机其功能不再是固定的通过OpenFlow可以软件定义OpenVSwitch所具备的功能。 OpenFlow以多个Table串行工作的方式来处理网络数据包如下图所示。 OpenFlow的灵活性是实现SDN必不可少的一部分但是在一些实际场景中因为涉及的功能多且复杂相应的OpenFlow pipeline会变得很长。直观上来看pipeline越长处理一个网络包需要的时间也越长。这是OpenFlow从理论到实际的一个问题Open vSwitch为此尝试过很多优化。 对于一个Linux系统来说可以分为用户空间user space和内核空间kernel space网络设备接入到内核空间。如果需要将数据传输到用户程序则需要通过内核空间将数据上送到用户空间如果需要在网络设备之间转发数据直接在内核空间就可以完成。 ovs 架构及工作原理 总体架构 以下两张图都是 Open vSwitch 的总体架构图但是它们的模块内容都不够全面。 用户空间ovs-vswitchd和内核模块datapath决定了数据包的转发首先datapath内核模块收到进入数据包(物理网卡或虚拟网卡)然后查找其缓存(datapath flows)当有一个匹配的flow时它执行对应的操作否则datapath会把该数据包送入用户空间由ovs-vswitchd负责在其OpenFlow flows中查询ovs-vswitchd查询后把匹配的actions返回给datapath并设置一条datapath flows到datapath中这样后续进入的同类型的数据包因为缓存匹配会被datapath直接处理不用再次进入用户空间。 datapath专注于数据交换它不需要知道OpenFlow的存在。与OpenFlow打交道的是ovs-vswitchdovs-vswitchd存储所有Flow规则供datapath查询或缓存。 工作原理 Bridge 处理数据帧遵循以下几条规则 在一个 Port 上接收到的帧不会再往此 Port 发送此帧。接收到的帧都要学习其 Source MAC 地址。如果数据帧是多播或者广播包通过 2 层 MAC 地址确定则要向接收 Port 以外的所有 Port转发如果上层协议感兴趣则还会递交上层处理。如果数据帧的地址不能在 CAMMAC-Port Mapping表中找到则向接收 Port 以外的所有 Port 转发。如果 CAM 表中能找到则转发给相应 Port如果发送和接收都是同一个 Port则不发送。网桥是以混杂模式工作的所有 MAC 地址的数据帧都能够通过。 用户空间 ovs-vswitchd 和内核模块 Datapath 决定了数据包的转发 内核态的 Datapath 监听接口设备流入的数据包。如果 Datapath 在内核态流表缓存没有找到相应的匹配流表项则将数据包传入upcall到用户态的 ovs-vswitchd 守护进程处理。可选用户态的 ovs-vswitchd 拥有完整的流表项通过 OpenFlow 协议与 OpenFlow 控制器或者 ovs-ofctl 命令行工具进行通信主要是接收 OpenFlow 控制器南向接口的流表项下发。或者根据流表项设置ovs-vswitchd 可能会将网络包以 Packet-In 消息发送给 OpenFlow 控制器处理。ovs-vswitchd 接收到来自 OpenFlow 控制器或 ovs-ofctl 命令行工具的消息后会对内核态的 Flow Table 进行更新。或者根据局部性原理用户态的 ovs-vswitchd 会将刚刚执行过的 Datapath 没有缓存的流表项注入到 Flow Table 中。ovs-vswitchd 匹配完流表项之后将数据包重新注入reinject到 Datapath。Datapath 再次访问 Flow Table 获取流表项进行匹配。最后网络包被 Datapath 根据流表项 Actions 转发或丢弃。 OVS 的交换机角色 在SDN的架构下ovs作为 SDN交换机向上连接控制器向下连接主机。并且Open vSwitch交换机是能够与真是物理交换机通信相互交流数据。 ovs的交换机组成 ovs-vswitchd实现交换机核心功能如寻址、转发和端口绑定等的守护进程Datapath支持数据流转发的 Linux 内核模块唯一工作在内核态的模块ovsdb-server轻量级数据库服务器存储配置、日志和状态等信息ovs-dpctl用于配置交换机内核模块Datapath的工具ovs-vsctl用于查询和更新 ovs-vswitchd 配置的工具ovs-appctl用于向正在运行中的 ovs-vswitchd 发送命令的工具NetFlow / sFlow网络监测模块ovsdb-tool数据库ovsdb 的工具库模块ovs-ofctl用于查询和控制 OpenFlow 交换机和控制器的工具仅 OpenFlow 协议可用ovs-controllerOpenFlow 控制器现在还有 ovs-testcontroller 功能类似ovs-pki用于创建和管理 OpenFlow 交换机的公钥基础设施的模块ovs-tcpdmp抓包 可以通过命令ovsdb-client dump将数据库结构打印出来。OVSDB中包含一系列记录网桥、端口、QoS等网络配置信息的表这些表均以JSON格式保存。 每一个ovs交换机中数据库中存在的表如下 由于 Open vSwitch 是参照软件定义网络 SDN 的思想设计的所以 SDN 的三层架构应用层、控制层、转发层在 OVS 的架构中也有很好的体现应用层OVS 提供的各种工具如ovs-dpctlovs-vsctlovs-appctl 等工具模块控制层主要由 ovs-ofctl 模块负责因为它支持 OpenFlow 协议转发层以 ovs-vswitchd 模块 Datapath 模块为主并使用 ovsdb 模块存储信息 数据包处理流程 ovs的datapath接收到从ovs连接的某个网络设备发来的数据包从数据包中提取源/目的IP、源/目的MAC、端口等信息。ovs在内核状态下查看流表结构通过Hash观察是否有缓存的信息可用于转发这个数据包。假设数据包是这个网络设备发来的第一个数据包在OVS内核中将不会有相应的流表缓存信息存在那么内核将不会知道如何处置这个数据包。所以内核将发送upcall给用户态。ovs-vswitchd进程接收到upcall后将检查数据库以查询数据包的目的端口是哪里然后告诉内核应该将数据包转发到哪个端口例如eth0。内核执行用户此前设置的动作。即内核将数据包转发给端口eth0进而数据被发送出去。 流表 流表的基本概念 OVSOpen vSwitch流表是Open vSwitch中用于数据包转发的规则集合。每个流表包含一系列的流表项每个流表项定义了数据包的匹配条件和对应的动作。流表的主要作用是根据数据包的特性如源MAC地址、目的MAC地址、输入端口等来决定数据包的处理方式如转发、丢弃等。流表的生成和维护由外部控制器管理实现了网络流量的灵活控制。 流表由基础字段、匹配字段、动作字段三部分组成。 流表的匹配和动作 流表的阅读可以分为两个部分匹配和动作。 匹配是指在一堆流表中找到包所走的那条流表。 匹配涉及到的字段包括priority、in_port、metadata、dl_dst、reg6等。动作是指这个包接下来的操作 动作涉及到的字段包括write_metadata、goto_table、drop、output、load等。 在匹配操作中进行精确匹配在动作操作中进行写更新。 流表的查询过程 流表的查询过程涉及到多个函数和结构体的操作。例如miniflow_expand函数用于将miniflow结构体的数据与flow结构体进行位运算以实现流表的查询和更新。具体的实现细节包括遍历所有的map并对每个非0bit进行位运算最终得到结果。 ovs-dpdk 在OVS DPDK中可以建立两种方式的DPDK porttype分别是dpdk和dpdkvhostuser/dpdkvhostuserclient OVS port typedpdk 这种方式的DPDK port可以用如下命令建立 ovs-vsctl add-port BR_LAN phy_lan -- set Interface phy_lan typedpdk options:dpdk-devargs0000:01:00.0这个port需要对应某个PCI设备这个PCI设备就是使用DPDK工具脚本所绑定的网卡 OVS port typedpdkvhostuser/dpdkvhostuserclient dpdkvhostuser和dpdkvhostuserclient是同一种方式的两个模式通过如下命令可以实现 ovs-vsctl add-port br0 vhost-user-1 -- set Interface vhost-user-1 typedpdkvhostuser ovs-vsctl add-port BR_LAN nsa_lan -- set Interface nsa_lan typedpdkvhostuserclient options:vhost-serverpath/tmp/nsa_lan这两种方式的区别在于在进行控制面消息沟通的时候是QEMU和OVS谁作为server谁作为client 普通OVS ovs的架构图 ovs处理流表的过程是 ovs的datapath接收到从ovs连接的某个网络设备发来的数据包从数据包中提取源/目的IP、源/目的MAC、端口等信息。ovs在内核状态下查看流表结构通过Hash观察是否有缓存的信息可用于转发这个数据包。内核不知道如何处置这个数据包会将其发送给用户态的ovs-vswitchd。ovs-vswitchd进程接收到upcall后将检查数据库以查询数据包的目的端口是哪里然后告诉内核应该将数据包转发到哪个端口例如eth0。内核执行用户此前设置的动作。即内核将数据包转发给端口eth0进而数据被发送出去。 ovsdpdk DPDK加速的OVS与原始OVS的区别在于从OVS连接的某个网络端口接收到的报文不需要openvswitch.ko内核态的处理报文通过DPDK PMD驱动直接到达用户态ovs-vswitchd里。 DPDK加速的OVS数据流转发的大致流程如下 OVS的ovs-vswitchd接收到从OVS连接的某个网络端口发来的数据包从数据包中提取源/目的IP、源/目的MAC、端口等信息。OVS在用户态查看精确流表和模糊流表如果命中则直接转发。如果还不命中在SDN控制器接入的情况下经过OpenFlow协议通告给控制器由控制器处理。控制器下发新的流表该数据包重新发起选路匹配报文转发结束。 总结 主要区别在于流表的处理。 主要区别在于流表的处理。普通ovs流表转发在内核态而ovs-dpdk流表转发在用户态 OVS DPDK与QEMU之间通过vhost user协议通信 qemu 与kvm的关系 kvmkvm是Linux内核的虚拟机qemuqemu 在linux上运行的时候是它的一种模式。qemu 可以借助kvm 然后实现虚拟化的技术。 virtio virtio对准虚拟化 hypervisor 中的一组通用模拟设备IO的抽象。Virtio是一种前后端架构包括前端驱动Guest内部、后端设备QEMU设备、传输协议vring。框架如下图所示 前端驱动 虚拟机内部的 virtio模拟设备对应的驱动。作用为接收用户态的请求然后按照传输协议对请求进行封装再写I/O操作发送通知到QEMU后端设备。后端设备 在QEMU中创建用来接收前端驱动发送的I/O请求然后按照传输协议进行解析在对物理设备进行操作之后通过终端机制通知前端设备。传输协议 使用virtio队列virtio queuevirtqueue完成。设备有若干个队列每个队列处理不同的数据传输如virtio-balloon包含ivq、dvq、svq三个。 virtqueue通过vring实现。Vring是虚拟机和QEMU之间共享的一段环形缓冲区QEMU和前端设备都可以从vring中读取数据和放入数据。 virtio的代码主要分两个部分QEMU和内核驱动程序。Virtio设备的模拟就是通过QEMU完成的QEMU代码在虚拟机启动之前创建虚拟设备。虚拟机启动后检测到设备调用内核的virtio设备驱动程序来加载这个virtio设备。 对于KVM虚拟机都是通过QEMU这个用户空间程序创建的每个KVM虚拟机都是一个QEMU进程虚拟机的virtio设备是QEMU进程模拟的虚拟机的内存也是从QEMU进程的地址空间内分配的。 VRING是由虚拟机virtio设备驱动创建的用于数据传输的共享内存QEMU进程通过这块共享内存获取前端设备递交的IO请求。 vhost-user 协议及其在OVS-DPDK、qemu和virtio-net中的实现 vhost-user 的实现简述 vhost-user 和 vhost-net 的实现原理是一样都是采用 vring 完成共享内存eventfd 机制完成事件通知。不同在于 vhost-net 实现在内核中而 vhostuser 实现在用户空间中用于用户空间中两个进程之间的通信其采用共享内存的通信方式。 vhost-user 基于 C/S 的模式采用 UNIX 域套接字UNIX domain socket来完成进程间的事件通知和数据交互相比 vhost_net 中采用 ioctl 的方式vhost-user 采用 socket 的方式大大简化了操作。 vhost-user 基于 vring 这套通用的共享内存通信方案只要 client 和 server 按照 vring 提供的接口实现所需功能即可常见的实现方案是 client 实现在 guest OS 中一般是集成在 virtio 驱动上server 端实现在 qemu 中也可以实现在各种数据面中如 OVSSnabbswitch 等虚拟交换机。 vhost-user使用DPDK加速 基于vhost协议DPDK设计了一套新的用户态协议名为vhost-user协议这套协议允许qemu将virtio设备的网络包处理offload到任何DPDK应用中例如OVS-DPDK。vhost-user协议和vhost协议最大的区别其实就是通信信道的区别。Vhost协议通过对vhost-net字符设备进行ioctl实现而vhost-user协议则通过unix socket进行实现。通过这个unix socketvhost-user协议允许QEMU通过以下重要的操作来配置数据平面的offload 特性协商virtio的特性与vhost-user新定义的特性都可以通过类似的方式协商而所谓协商的具体实现就是QEMU接收vhost-user的特性与自己支持的特性取交集。内存区域配置QEMU配置好内存映射区域vhost-user使用mmap接口来映射它们。Vring配置QEMU将Virtqueue的个数与地址发送给vhost-user以便vhost-user访问。通知配置vhost-user仍然使用eventfd来实现前后端通知。 基于DPDK的Open vSwitch(OVS-DPDK)一直以来就对vhost-user提供了支持可以通过在OVS-DPDK上创建vhost-user端口来使用这种高效的用户态后端。 所有的控制信息通过UNIX套接口控制通道交互。包括为进行直接内存访问而交换的内存映射信息以及当数据填入virtio队列后需要出发的kick事件和中断信息。 数据通道事实上由内存直接访问实现。客户机中的virtio-net驱动分配一部分内存用于virtio的队列。virtio标准定义了此队列的结构。QEMU通过控制通道将此部分内存的地址共享给OVS DPDK。DPDK自身映射一个相同标准的virtio队列结构到此内存上藉此来读写客户机巨页内存中的virtio队列。直接内存访问的实现需要在OVS DPDK和QEMU之间使用巨页内存。如果QEMU设置正确但是没有配置巨页内存OVS DPDK将不能访问QEMU的内存二者也就不能交换数据报文。 当OVS DPDK向虚机发送数据包时这些数据包在OVS DPDK的统计里面显示为接口的发送Tx流量。在虚机中显示为接收Rx流量。 当虚机向OVS DPDK发送数据包时这些数据包在虚机中显示为发送Tx流量而在OVS DPDK中显示为接口的接收Rx流量。 虽然数据包可通过共享内存传输但是还需要一种方法告知对端数据包已经拷贝到virtio队列中。通过vhost user套接口实现的控制通道可用来完成通知kicking对方的功能。通知必然有代价。首先需要一个写套接口的系统调用之后对端需要处理一个中断操作。所以接收双方都会在控制通道上消耗时间。 为避免控制通道的通知消耗OpenvSwitch和QEMU都可以设置特殊标志以告知对方其不愿接收中断。尽管如此只有在采用临时或者固定查询virtio队列方式时才能使用不接收中断的功能。 为虚机的性能考虑其本身可采用DPDK处理数据包。尽管Linux内核采用轮询处理和中断相结合的NAPI机制但是产生的中断数量仍然很多。OVS DPDK以非常高的速率发送数据包到客户机。同时QEMU的virtio队列的收发缓存数被限制在了默认的256与最大1024之间。结果客户机必须以非常快的速度处理数据包。理想的实现就是使用DPDK的PMD驱动不停的轮询客户机端口进行数据包处理。 vhost-user协议标准 此协议旨在补充实现在Linux内核中的vhost的ioctl 接口。实现了与同一宿主机中的用户进程交互建立virtqueue队列的控制平面。通过UNIX套接口消息中的附加数据字段来共享文件描述符。 协议定义了通信的两端主和从。主时要共享其virtqueue队列的进程即QEMU。从为virtqueues队列的消费者。 主和从在通信时都可以作为客户端主动连接或者服务端监听。 vhost user协议由两方组成 主方 - QEMU从方 - Open vSwitch或者其它软件交换机 vhost user各方都可运行在2中模式下 vhostuser——client - QEMU作为服务端软件交换机作为客户端。 vhostuser client模式下QEMU创建vhu套接口OVS进行连接。 当某个虚机停掉后不会影响ovs也不会影响其他虚机。当停掉的虚机启动后ovs 会自己连接此server。vhostuser - 软件交换机作为服务端QEMU作为客户端。 此模式下OVS创建vhu套接口QEMU主动进行连接。 vhost user实现基于内核的vhost架构将所有特性实现在用户空间。 当QEMU虚机启动时它将所有的虚机内存分配为共享的巨页内存。其操作系统的半虚拟化驱动virtio将保留这些巨页内存的一部分用作virtio环形缓存。这样OVS DPDK将可以直接读写客户机的virtio环形缓存。OVS DPDK和QEMU可通过此保留的内存空间交换网络数据包。 用户空间进程接收到客户机预先分配的共享内存文件描述符后可直接存取与之关联的客户机内存空间中的vrings环结构。 http://www. virtualopensystems.com/en/solutions/guides/snabbswitch-qemu/ vhost user协议使用一个UNIX套接口处理OVS和QEMU之间的通信包括在初始化过程中和数据包拷贝到共享内存的virtio环中需要通知对方时。所以两者的交互包括基于控制通道vhu的创建操作和通知机制与拷贝数据包的数据通道直接内存访问。 DPDK UNIX套接口的注册和消息交互 通过ovs-vsctl add-port 创建一个名称为vhuxxxxxxxx-xx的接口。在OVS内部此名称保存在netdev结构体的成员name中netdev-name。 当创建vhost user接口时Open vSwitch控制DPDK注册一个新的vhost-user UNIX套接口。套接口的路径为vhost_sock_dir加netdev-name加设备的dev-vhost_id。 通过设置RTE_VHOST_USER_CLIENT标志OVS可请求创建vhost user套接口的客户端模式。 OVS函数netdev_dpdk_vhost_construct调用DPDK的rte_vhost_driver_register函数其又调用vhost_user_create_server或者vhost_user_create_client函数创建套接口。默认使用前者创建服务端模式的套接口如果设置了RTE_VHOST_USER_CLIENT标志创建客户端模式套接口。 相关的函数调用关系如下 netdev_dpdk_vhost_construct 定义在openvswitch/lib/netdev-dpdk.crte_vhost_driver_register\create_unix_socket\rte_vhost_driver_start定义在dpdk-stable-23.11.1/lib/vhost/socket.c dpdk ovs 数据怎么到虚机内 ovs 是用来管理网口的dpdk是接收物理网卡的数据。 ovs 从dpdk上接收数据然后通过vhostuser协议转发数据到对应的虚机内 数据流转 那么数据是如何解析的 ovs 是通过dpdk 的PMD驱动直接获取数据拿到数据后通过vhostuser协议转发到虚机此时数据都是转发的原始数据到虚机那数据是如何解析的 数据是在虚机内解析的vhostuser在虚拟机里就是virtio网卡虚机本身也是一个操作系统收到数据后通过网卡内核态工作处理来数据
http://www.zqtcl.cn/news/192653/

相关文章:

  • 网站推广方法100种百度排名规则
  • 上海专业网站建设公司站霸网络萝岗区网站建设推广
  • 做微商网站的公司永久免费crm管理系统
  • 网站开发的环境专业的建设网站
  • 公司网站建设知识注册网站备案
  • 营销型网站建设申请域名在域名做网站
  • 电商网站设计公司立找亿企邦山东德州网站建设哪家最好
  • 免费自建网站工具网站建设公司那个好
  • wordpress集成环境搭建短视频优化
  • 做网站一般把宽度做多少中国企业报集团官网
  • 什么软件可以建网站网站建设应该计入什么费用
  • 网站制作 手机版重庆网站建设mswzjs
  • 网站建设犀牛云品牌建设方案和思路
  • 网络管理系统的管理软件抖音优化推广
  • 昆山市有没有做网站设计的交互设计研究生
  • 本地网站asp iiswordpress 感染支付宝
  • 成都最专业做网站的wordpress升级500
  • 做网站首页图的规格网站建设的市场分析
  • a032网站模版自己建立网站怎么建
  • wordpress.商品厦门做网站优化价格
  • 学校网站建设源码视频生成链接网站
  • 江苏建设工程招投标网站wordpress 全部tags
  • 十堰网站建设有哪些公司wordpress删除摘要
  • 网站的功能和特色网页设计公司哪个济南兴田德润实惠吗
  • 汕头建站模板泰安建设银行网站
  • 服装平台网站有哪些网站开发 零基础
  • 致设计网站官网建设购物网站需要多少费用
  • 网站后台程序河南政务网站建设排名
  • 重庆建站网站建设平台wordpress插件使用数量
  • 规范网站建设情况的报告政务服务网站建设性建议