| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 20个基于DPDK开源项目,建议收藏 -> 正文阅读 |
|
[网络协议]20个基于DPDK开源项目,建议收藏 |
一、ANS – DPDK 原生加速网络堆栈ANS(加速网络堆栈)是DPDK本地TCP/IP堆栈,也参考FreeBSD实现。ANS提供了一个与Intel DPDK一起使用的用户空间TCP/IP堆栈。 文件结构
支持环境
支持功能:
架构图 TCP部署
例子
二、BESS – Berkeley可扩展软件交换机BESS是一种可扩展的、高性能的软件交换机。BESS是第一个专门为支持网络功能虚拟化而设计的软件交换机,除了传统的虚拟网络任务。 BESS的四个关键组成部分:
BESS 是否在内核中运行? 不!BESS 完全在用户空间中,并使用 DPDK 直接绑定到网络接口(绕过内核)。避免内核网络堆栈的开销是使 BESS 超快的部分原因。这是与上图相同的图,但现在考虑了内核/用户空间划分。 三、Butterfly – 连接虚拟机Butterfly 连接虚拟机 (VM) 并控制其流量。 每个 VM 流量都包含在特定的VXLAN 网络中,并且流量由(EC2/Openstack-like)安全组过滤。 安全组可以应用于任何 VM 接口,并包含一个简单的网络规则列表(默认丢弃流量)。 虚拟网卡 在 Butterfly 中,虚拟 NIC(或 vnic)使您能够通过 vhost-user 向 Qemu VM 添加虚拟网络接口。每个 vnic 都有一个 24 位的网络 ID,称为 VNI。如果两个具有相同 VNI 的 vnic 位于不同的物理主机上,Butterfly 会通过 VXLAN 封装 VM 数据包,并将它们发送到相应的物理主机。一旦收到,数据包将被解封装并路由到它们的最终目的地。使用相同 VNI 创建的所有 vnic 都位于同一网络上。如果具有相同 VNI 的两个 vnic 位于同一物理主机上,则数据包不会退出到物理网络。 Butterfly 旨在使用专用DPDK端口连接到物理网络 。它允许 Butterfly 在使用物理 NIC 卸载功能时在 VM 之间具有非常低的延迟。 对于 VM 到 VM 通信,不会发生校验和和分段,因为数据包不会在物理网络上传输。这使 Butterfly 能够在 VM 之间进行高速和低延迟的通信。 示例:在 vni “1337” 上创建新的 vnic “vnic_1”:
数据筛选 使用 Butterfly 中的集成防火墙(NetBSD 的 NPF)为每个 vnic过滤 VM 流量。过滤规则根据其安全组中包含的规则应用于每个 VM 。一个 vnic 可以使用多个安全组,一个安全组可以由多个 vnic 使用。当一个 vnic 使用多个安全组时,规则会累积。安全组包含要允许的规则列表(默认策略是阻止)和成员列表(IP 地址)。 Butterfly 规则主要由协议/端口和允许的源描述。此源可以是 CIDR 块或安全组的成员。 示例:在“mysg”安全组中添加一条规则,允许 22 端口上的 TCP 协议中的 42.0.3.1:
示例:在“mysg”安全组中添加一条规则,允许“users”安全组成员在80端口使用TCP协议:
注意:当一个或多个 vnic 使用的安全组被修改时,附加到每个受影响的 VM 的防火墙规则会重新加载。 使用 Butterfly 是一个可以通过网络 API 控制的守护进程。 它与客户端打包在一起,主要允许您添加/删除/列出 vnic 和安全组。 您当然可以直接编写对 Butterfly API 的调用。API 消息传输基于ZeroMQ,消息以Protobuf 格式编码。查看协议 以获取更多详细信息。 下面是一个 Butterfly 示例,其中 6 个 VM 隔离在三个网络(VNI 42、51 和 1337)中。 Butterfly 绑定一个专用网卡来发送/接收 VXLAN 数据包,并绑定一个套接字(默认:tcp)来监听对其 API 的查询。如果您使用 DPDK 兼容卡,您将无法通过它访问 API。 您可以使用几行客户端调用来构建此配置:
提示:如果您想查看图形的外观:运行butterfly status并复制webgraphviz.com 中的点图 您可以随时编辑安全组,这会自动更新 vnics 过滤。在下面的示例中,我们创建了一个新规则,以允许 http 协议中的所有人,并要求一些 vnic 使用此安全组。
注意:Butterfly API 使用幂等性,这意味着两次调用应该产生相同的结果。 四、DPVS – 第4层负载平衡器DPVS是一个基于DPDK的高性能Layer-4负载均衡器。它源自 Linux Virtual Server LVS及其修改的alibaba/LVS。 DPVS由爱奇艺QLB团队自 2016 年 4 月开发。它广泛用于爱奇艺 IDC 的 L4 负载均衡器和 SNAT 集群。 为实现高性能应用了多种技术:
主要特点DPVS包括:
功能模块 五、FastClick – 高速数据平面FastClick - Click 模块化路由器的更快版本,具有批处理、高级多处理和改进的 Netmap 和 DPDK 支持 (ANCS’15)。检查 Metron 分支以了解 Metron 特性 (NSDI’18)。 六、F-Stack – 基于DPDK的通用网络框架随着网络接口卡的快速发展,Linux内核处理数据包的性能不佳已经成为现代网络系统的瓶颈。 然而,互联网增长的日益增长的需求需要更高性能的网络处理解决方案。 内核旁路的出现引起了越来越多的关注。 有各种类似的技术,例如:DPDK、NETMAP 和 PF_RING。 内核旁路的主要思想是Linux只用于处理控制流; 所有数据流都在用户空间处理。 因此,内核旁路可以避免内核数据包复制、线程调度、系统调用和中断引起的性能瓶颈。 此外,内核旁路可以通过多重优化方法实现更高的性能。 在各种技术中,DPDK 已被广泛使用,因为它与内核调度和活跃的社区支持更彻底地隔离。 F-Stack是一个基于DPDK的开源高性能网络框架,具有以下特点:
历史 为应对日益严峻的DDoS攻击,腾讯云DNSPod的授权DNS服务器于2012年底从千兆以太网切换到10千兆。我们面临几个选择:一是继续使用Linux内核中原有的网络栈,另一种是使用内核绕过技术。经过多轮调查;我们最终选择基于DPDK开发我们的下一代DNS服务器。原因是DPDK提供了超高性能,未来可以无缝扩展到40G,甚至100G的网卡。 经过数月的开发和测试,基于DPDK的高性能DNS服务器DKDNS于2013年10月正式发布,单个10GE端口最高可达1100万QPS,两个10GE端口最高可达1820万QPS。然后我们开发了一个名为 F-Stack 的用户空间 TCP/IP 堆栈,它可以使用单个 10GE 端口处理 60 万 RPS。 随着腾讯云的快速增长,我们越来越多的服务需要更高的网络访问性能。同时,F-Stack在业务增长的推动下不断完善,最终发展成为通用的网络接入框架。但是我们最初的 TCP/IP 堆栈无法满足这些服务的需求。继续开发和维护完整的高性能网络堆栈的成本太高了。在评估了几个计划之后;我们最终决定将 FreeBSD(11.0 稳定版)的 TCP/IP 堆栈移植到 F-Stack 中。这不仅让我们停止重新发明轮子,我们还可以利用 FreeBSD 社区在未来带来的改进。多亏了libplebnet和libuinet,这项工作变得容易多了。 随着各类应用的快速发展,为了帮助不同的APP快速便捷地使用F-Stack,F-Stack集成了Nginx、Redis等常用APP,以及微线程框架,并提供了标准的Epoll/队列接口。 目前,除了DNSPod的授权DNS服务器,腾讯云还有很多产品已经使用了F-Stack,比如HttpDNS(D+)、COS接入模块、CDN接入模块等。 七、Lagopus – 软件 OpenFlow 1.3 交换机高性能软件 OpenFlow 1.3 交换机和路由器 特征
八、MoonGen – 数据包生成器MoonGen是建立在一个脚本化的高速数据包生成libmoon。整个负载生成器由 Lua 脚本控制:发送的所有数据包均由用户提供的脚本制作。多亏了令人难以置信的快速 LuaJIT VM 和数据包处理库 DPDK,它可以在仅使用单个 CPU 内核的情况下用 64 字节数据包使 10 Gbit/s 以太网链路饱和。即使每个数据包都被 Lua 脚本修改,MoonGen 也能达到这个速率。它不依赖于重播相同缓冲区之类的技巧。 MoonGen 还可以接收数据包,例如,检查被测系统丢弃了哪些数据包。由于接收也完全由用户的 Lua 脚本控制,因此可用于实现高级测试脚本。例如,可以使用两个相互建立连接的 MoonGen 实例。此设置可用于对防火墙等中间设备进行基准测试。 MoonGen 重点关注四个要点:
MoonGen 建立在libmoon 之上,它是 DPDK 的 Lua 包装器。 用户可以为他们的实验编写自定义脚本。建议在脚本中使用硬编码的设置特定常量。脚本就是配置,为脚本编写一个复杂的配置界面是无关紧要的。或者,有一个简化(但功能较弱)的命令行界面可用于快速测试。 下图显示了架构以及如何处理多核支持。 执行从必须在用户脚本中定义的主任务开始。此任务在使用的 NIC 上配置队列和过滤器,然后启动一个或多个从属任务。 请注意,Lua 没有任何对多线程的本机支持。因此,MoonGen 会为每个线程启动一个新的且完全独立的 LuaJIT VM。新的 VM 接收序列化参数:要执行的函数和参数,例如要从中发送数据包的队列。线程仅通过底层库共享状态。 示例脚本quality-of-service-test.lua展示了如何使用此线程模型来实现典型的负载生成任务。它通过发送两种不同类型的数据包来实现 QoS 测试并测量它们的吞吐量和延迟。它通过启动两项数据包生成任务来实现:一项用于后台流量,一项用于优先流量。第三个任务用于对传入的数据包进行分类和计数。 九、mTCP – 用户级 TCP 堆栈在多核系统上扩展短 TCP 连接的性能具有根本的挑战性。尽管许多提议试图解决各种缺点,但内核实现的低效率仍然存在。例如,即使是最先进的设计,内核中处理 TCP 连接也需要花费 70% 到 80% 的 CPU 周期,因此在用户级程序中只剩下很小的创新空间。 mTCP一种用于多核系统的高性能用户级 TCP 堆栈。mTCP 从头开始解决低效问题——从数据包 I/O 和 TCP 连接管理到应用程序接口。
十、OPNFV – NFV 开放平台NFV 开放平台 (OPNFV) 是一个项目和社区,可促进通用 NFVI、与上游项目的持续集成 (CI)、独立测试工具集以及用于全行业测试和集成的合规性和验证程序,以加速企业和服务提供商网络的转型。目标包括加快 NFV 解决方案的上市时间、减轻运营负担并确保平台满足行业需求。 作为一个通用的 NFVI 平台,OPNFV 将跨计算、存储和网络虚拟化的上游组件汇集在一起,以创建一个端到端平台。OPNFV 中的活动侧重于组件的集成、端到端堆栈测试以及集成环境的自动化构建和部署。针对关键 NFV 用例对平台进行持续集成和自动化测试是确保平台满足 NFV 行业需求的关键。另一个重点是创建合规性和验证程序,以大幅削减运营团队的工作量。 应用 虚拟网络功能包括移动部署(5G/LTE),其中移动网关(例如 SGW、PGW 等)和相关功能(例如 MME、HLR、PCRF 等)被部署为 VNF,到具有“虚拟”的部署客户端设备 (CPE)、隧道网关(例如 VPN 网关)、防火墙或应用级网关和过滤器(例如 Web 和电子邮件流量过滤器)以测试和诊断设备(例如 SLA 监控)。 这些 VNF 部署需要易于操作、扩展和发展 - 独立于正在部署的 NFVI 类型。OPNFV 是一个灵活的平台,它可以支持一组质量和用例,例如:
十一、OpenDataPlane – 开放数据平面OpenDataPlane (ODP) 提供了一个易于使用、高性能且可在网络 SoC 之间移植的数据平面应用程序编程环境。本文档既是希望使用 ODP 的开发人员的用户指南,也是 ODP 程序员的详细参考,涵盖 API、数据结构、文件等。对于希望在其他平台上实现 ODP 的人来说,它也应该有用。 ODP 由一个公共层和一个实现层组成。写入公共层的应用程序可以跨所有 ODP 实现移植。为了编译和运行 ODP 应用程序,它是针对特定的 ODP 实现层进行编译的。实现层的目的是提供 ODP API 到托管 ODP 实现的 SoC 的底层功能(包括硬件协同处理和加速支持)的最佳映射。作为应用程序的引导机制,并为 ODP 实现者提供模型,ODP 提供了一个“linux 通用”参考实现,旨在在任何具有 Linux 内核的 SoC 上运行。虽然 linux-generic 不是性能目标,但它确实为 ODP 实现者和应用程序程序员提供了一个起点。 十二、Open vSwitch – 多层开放虚拟交换机Open vSwitch 是一种生产质量的多层虚拟交换机,在开源Apache 2.0许可下获得许可。它旨在通过编程扩展实现大规模网络自动化,同时仍支持标准管理接口和协议(例如 NetFlow、sFlow、IPFIX、RSPAN、CLI、LACP、802.1ag)。此外,它旨在支持跨多个物理服务器的分布,类似于 VMware 的 vNetwork 分布式 vswitch 或 Cisco 的 Nexus 1000V。 Open vSwitch 用于多种产品,并在许多大型生产环境(有些非常非常大)中运行。每个稳定版本都经过一个包含数百个系统级测试和数千个单元测试的回归套件。 Open vSwitch 既可以作为在虚拟机管理程序中运行的软交换机运行,也可以作为切换芯片的控制堆栈运行。它已被移植到多个虚拟化平台和交换芯片组。它是XenServer 6.0、Xen 云平台中的默认交换机,还支持Xen、KVM、Proxmox VE和VirtualBox。它还被集成到许多虚拟管理系统中,包括OpenStack、openQRM、OpenNebula和oVirt。内核数据路径随Linux 一起分发,并且软件包可用于Ubuntu,Debian、Fedora和openSUSE。FreeBSD和NetBSD也支持 Open vSwitch 。 十三、Packet-journey – 基于DPDK的Linux路由器该项目的目的是提供一个免费的应用程序,能够:
Packet-journey (pktj) 由多种线程组成:
为了获得最佳性能,评论线程必须单独位于其核心上。所有其他线程都在同一个核心上调度可以。 十四、Pktgen-dpdk – 数据包生成器Pktgen 是一个流量生成器,由 DPDK 提供支持,以 64 字节帧的线速流量。 十六、PcapPlusPlus – C++ 数据包解析框架PcapPlusPlus是一个多平台 C++ 库,用于捕获、解析和制作网络数据包。它旨在高效、强大且易于使用。 PcapPlusPlus 能够为多种网络协议提供解码和伪造功能。它还为最流行的数据包处理引擎(如libpcap、WinPcap、Npcap、DPDK和PF_RING )提供易于使用的 C++ 包装器。 功能
十七、Ruru – 实时 TCP 延迟监控Ruru是一款 TCP 延迟监控应用程序,可帮助实时了解广域 TCP 流量。它利用英特尔 DPDK 进行高速数据包处理(高达 40Gbit/s)和一个 Node.JS Web 前端来呈现结果。 架构 系统由三部分组成:
组件之间的通信使用套接字(zmq 和 websockets)。高级架构如下所示。 十八、Seastar – 开源 C++ 框架Seastar 是一种先进的开源 C++ 框架,用于现代硬件上的高性能服务器应用程序。Seastar 用于Scylla,这是一种与 Apache Cassandra 兼容的高性能 NoSQL 数据库。使用Seastar 的应用程序可以在Linux 或OSv上运行。 Seastar 是第一个汇集了一系列极端架构创新的框架,包括:
使用 Seastar 的项目
十九、SPDK – 存储性能开发套件存储性能开发套件 (SPDK) 提供了一组工具和库,用于编写高性能、可扩展的用户模式存储应用程序。它通过使用许多关键技术来实现高性能: 将所有必要的驱动程序移至用户空间,从而避免系统调用并支持从应用程序进行零拷贝访问。 轮询硬件完成而不是依赖中断,这降低了总延迟和延迟差异。 避免 I/O 路径中的所有锁定,而是依赖于消息传递。 SPDK 的基石是用户空间、轮询模式、异步、无锁NVMe驱动程序。这提供了从用户空间应用程序直接访问 SSD 的零拷贝、高度并行访问。该驱动程序被编写为具有单个公共头文件的 C 库。有关更多详细信息,请参阅NVMe 驱动程序。 SPDK 进一步提供了一个完整的块堆栈作为用户空间库,它执行许多与操作系统中的块堆栈相同的操作。这包括统一不同存储设备之间的接口、排队处理内存不足或 I/O 挂起等情况,以及逻辑卷管理。有关详细信息,请参阅块设备用户指南。 最后,SPDK 提供了基于这些组件构建的NVMe-oF、iSCSI和vhost服务器,这些组件能够通过网络或其他进程为磁盘提供服务。NVMe-oF 和 iSCSI 的标准 Linux 内核启动器与这些目标以及 QEMU 与 vhost 进行互操作。这些服务器的 CPU 效率可以比其他实现高一个数量级。这些目标可用作如何实现高性能存储目标的示例,或用作生产部署的基础。 二十、 NFF-Go - GO 的网络功能框架NFF-Go 是一组用于创建和部署云原生网络功能 (NF) 的库。它在不牺牲性能的情况下简化了网络功能的创建。
好处:
后记DPDK工程师手册: 【冲破内核瓶颈,让I/O性能飙升】DPDK工程师手册,官方文档,最新视频,开源项目,实战案例,论文,大厂内部ppt,知名工程师一览表 golang资料补给包: 【未来服务器端编程语言】最全空降golang资料补给包(满血战斗),包含文章,书籍,作者论文,理论分析,开源框架,云原生,大佬视频,大厂实战分享ppt |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:38:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |