PF_RING™ 是一个 Linux 内核模块和用户空间框架,允许您高速处理数据包,同时为数据包处理应用程序提供一致的 API, 基本上每个人每秒都必须处理许多数据包。 术语“许多many”根据您用于流量分析的硬件而变化。 它的范围可以从 1.2GHz ARM 上的 80k pkt/sec 到低端 2.5GHz Xeon 上每核心超过 20M pkt/sec。 PF_RING™ 不仅使您能够更快地捕获数据包,还可以更有效地捕获数据包,从而节省 CPU 周期, PF_RING 是一个高速数据包捕获库,可将商用 PC 转变为高效且廉价的网络测量盒,适用于数据包和主动流量分析和操作。 此外,PF_RING 开辟了全新的市场,因为它可以通过几行代码创建高效的应用程序,例如流量平衡器或数据包过滤器.
ntop是一家小型工程驱动型公司,无债务,固定成本低,拥有众多客户(其中大多数是个人和小公司,但网络领域的一些关键参与者将我们的软件嵌入到他们的产品中),业务盈利能力更强超过10年。这意味着,如果主要客户消失,我们可能不会受到收购、市场衰退和破产的影响(仅仅因为我们很幸运没有关键客户)。我们开发供小型个人和大型电信运营商使用的高质量网络软件,大部分是开源的,免费用于非营利/研究,并以合理的价格提供直接支持。我们使用我们生产的绿色能源(光伏)来操作我们的计算机,我们的员工分布在欧洲,我们大多在 SOHO 工作,只有在必要时才去办公室,这是因为我们看到了与家人密切合作和服务的价值晚上所有办公室都关闭时,远程客户。我们所有的软件和技术都是本土开发的,因此独立于第三方公司,我们的价格透明且长期稳定,我们完全控制我们生产的产品。我们的目标是在未来几年继续按照这些原则运营 ntop,而不是成为一家以销售为导向的公司,利润(大部分)是唯一的驱动力,同时像我们在历年。我们喜欢并相信我们所做的事情以及我们如何做。我们希望在未来的岁月里,当您需要我们的时候,我们会在这里
ntop 于 1998 年作为一个开源项目开始,其目标是创建一个简单而有效的基于 Web 的流量监控平台。从那时起,许多事情都发生了变化,包括所分析的流量的性质、PC 上运行的操作系统以及用户类型。ntop 也发生了变化,从以单一项目为中心的努力,我们发展成为一家成熟的研究公司,其目标仍然是最初的目标。即使用商用硬件和开源操作系统在网络监控方面进行创新。当我们从开源社区中受益时,我们感到有义务将我们开发的内容返回给社区,以便让许多其他人(而不仅仅是我们)也能受益
PF_RING™是一种新型网络套接字,可显着提高数据包捕获速度,具有以下特性:
如果您想了解 PF_RING™ 内部结构或用户手册,请访问文档部分。
PF_RING™ 通过 Linux NAPI 轮询来自 NIC 的数据包。这意味着 NAPI 将数据包从 NIC 复制到 PF_RING™ 循环缓冲区,然后用户态应用程序从环中读取数据包。在这种情况下,有两个轮询器,即应用程序和 NAPI,在一个 CPU 周期内完成NAPI轮询和应用轮询;优点是 PF_RING™ 可以同时将传入数据包分发到多个环(支持多个应用程序并发)
PF_RING™ 具有模块化架构,可以使用标准 PF_RING™ 内核模块之外的其他组件。目前,该组附加模块包括:
本页中描述的所有概念和代码都需要现代网络硬件、基于 Intel 82599 的(例如Intel X520)或 Silicom Director 10 Gbit NIC 以及最新的 Linux 内核(>= 2.6.31)。
在 Linux 中开发高效的网络应用程序并不是一项直接的任务,需要对硬件和网络堆栈有相当多的了解。我们强烈建议您阅读本文白皮书为了了解一些对开发网络应用程序很重要的指导
在硬件中使用滤波器具有两大性能优势:
PF_RING™ 支持基于 Intel© 82599 的动态硬件过滤(具体而言,它支持 Flow Director 和五元组队列过滤 (FTQF),如82599 数据表)和 Silicom Director 网络控制器。下图显示了基于 82599 和 PF_RING™ 硬件过滤的队列分配
PF_RING™ ZC(零复制)是一种灵活的数据包处理框架,允许您以任何数据包大小实现 1/10 Gbit 线速数据包处理(RX 和 TX)。它实现零复制操作,包括进程间和虚拟机间 (KVM) 通信的模式。它可以被认为是 DNA/LibZero 的继承者,它根据过去几年的经验教训提供了单一且一致的 API。
它具有干净且灵活的 API,可实现可在线程、应用程序和虚拟机中使用的简单构建块(队列、工作线程和池)。这是为了实现 10 Gbit 线速数据包处理
https://www.ntop.org/pf_ring/introducing-pf_ring-zc-support-for-intel-e810-based-100g-adapters/
2019年, 英特尔推出了新的 100 Gigabit 网络适配器系列,代号 Columbiaville。这些新适配器基于新的英特尔以太网控制器 E810,支持 10/25/50/100 Gbps 链路速度并提供可编程卸载功能
800 系列适配器实现了新功能,以改进连接性、存储协议和可编程性,这也得益于动态设备个性化 (DDP) 技术,该技术增加了对可编程管道的支持。事实上,通过 DDP,嵌入在控制器中的解析器可以支持软件解析自定义协议和操作传出数据包,从而为添加新的卸载功能铺平了道路,此外还有商用适配器中通常提供的功能(例如大型接收卸载、L3/ L4 校验和计算、VLAN 剥离等)。例如,对硬件中的自定义协议进行分类并根据自定义数据包类型将数据包分发到特定队列的能力可以提高许多用例中的应用程序性能。例如,可以扩展接收端缩放 (RSS) 和流量导向器 (FDIR) 功能,以便能够检查封装的数据包标头,如下所示GTP流量案例。这首先在 700 系列控制器中引入,但在 800 系列中可以在启动时或运行时加载自定义 DDP 配置文件
Ice -zc驱动程序于几周前作为PF_RING ZC框架的一部分推出,为 800 系列适配器提供零拷贝支持。基于在 Intel Xeon E-2136 CPU @ 3.30GHz 上 100 Gigabit 的初始测试,该控制器证明能够以每个队列 25 Mpps 的速度捕获流量(通过启用RSS几乎可以线性扩展),并通过使用单核。在具有足够内核的足够 CPU 上,这应该让我们能够通过多进程/多线程应用程序处理 100 Gigabit 流量,这些应用程序可以利用 RSS 将负载分配到多个内核(例如nProbe Cento)。在上述场景中,nProbe Cento 以 78 Mpps 的速度处理 6 个 RSS 队列(10k 流、64 字节数据包的 52 Gbit 或较大数据包的 100 Gbit 线路速率),没有丢包,使其适合基于低成本商用硬件的数据包处理
https://www.ntop.org/pf_ring/introducing-pf_ring-zc-support-for-mellanox-adapters/
PF_RING ZC 是 ntop 的高速零拷贝技术,用于高速数据包捕获和处理。到目前为止,ZC 除了支持PF_RING 已经支持的Accolade/Napatech/Silicom 等 基于 FPGA 的 100 Gbit 适配器外,还支持来自 Intel 的基于 ASIC 芯片的 10/40/100 Gbit 适配器。
这篇文章将宣布一款名为mlx的新 ZC 驱动程序,支持基于 100 Gbit ASIC 的新适配器系列,这次来自Mellanox/NVIDIA,包括 ConnectX-5和ConnectX-6适配器。
Mellanox 支持的 ConnectX 适配器与新的mlx驱动程序相结合,使我们的应用程序能够在最坏情况下扩展到 100 Gbps,并具有灵活性,并支持硬件数据包过滤、流量复制,从而实现高性能以及负载平衡,我们将在本文后面看到。除了纳秒 硬件时间戳等有趣且有用的功能之外,所有这些都是如此
在深入了解 Mellanox 支持的详细信息之前,我们想要列出此 ZC 驱动程序相对于所有其他适配器的主要区别,事实上,Mellanox NIC 可以在逻辑上划分为 多个独立的虚拟端口,通常每个应用程序一个。这意味着:
上述所有这些都发生在硬件中,您可以在同一适配器端口上启动数百个应用程序,每个应用程序处理部分或全部流量,这基于指定的过滤规则。请注意,刚才描述的是每个端口,这意味着同一应用程序可以使用不同的配置打开不同的虚拟适配器端口。在这篇文章的下面,您将详细了解 Mellanox 的 ZC 驱动程序上提供的此功能。
完成此概述后,现在是时候深入了解如何在 Mellanox NIC 上使用 ZC 的详细信息了
结论, 低于 1000 美元的 Mellanox NIC 可以以一小部分成本实现与基于 FPGA 的适配器相同的性能,并且由于虚拟适配器的概念,提供更多的功能和自由度
大多数商品适配器,包括 Intel 和 Mellanox,都基于 ASIC 芯片组,这些芯片组价格便宜,并提供简单的 RX/TX 操作,没有(或有限)可编程性。 这些适配器是为通用连接而设计的,并没有真正针对高吞吐量移动流量(尤其是最坏情况的流量)进行优化。然而,通过使用PF_RING ZC驱动程序,结合RSS(接收端扩展)等硬件卸载功能,可以将性能和处理流量扩展至高达 100 Gbps。
根据芯片组架构,英特尔适配器有几个系列:
Intel 适配器非常适合流量分析,并且可以通过使用 RSS 将流量负载均衡到多个 CPU 内核来扩展到 100 Gbps。它们可以与nProbe Pro/Enterprise结合使用,通过生成多个进程来处理高达 10-20 Gbps 的速度,或者与nProbe Cento 结合使用,以处理高达 100 Gbps 的速度(在 Intel E810 上)。
由于英特尔适配器实现简单的 RX 操作,并且只能按数据包工作(收到的每个数据包都有一个 PCIe 事务),因此它们可用于使用高达 10 Gbps(或更多一点,具体取决于硬件)的n2disk进行流量记录配置)。原因是在这种情况下不能使用 RSS,因为需要单个流将数据从线路移动到磁盘以保留数据包顺序(以任何方式操纵的流量跟踪对于提供网络的真实证据没有用) /网络安全问题,甚至用于故障排除),并且按数据包工作无法提供足够的性能来扩展到 10-20 Gbps 以上。
请注意,使用 ZC 驱动程序对网络适配器的访问是互斥的,因为应用程序内运行的用户空间库完全控制适配器。这意味着您不能在同一接口上运行多个应用程序(除非您在软件中使用流量复制,运行像zbalance_ipc这样的应用程序,这会增加 CPU 开销并影响性能)。
PF_RING ZC 支持的 Mellanox 适配器(包括 ConnectX-5 和 ConnectX-6)也基于 ASIC 芯片组,并且在使用n2disk将流量转储到磁盘时,它们与 Intel 具有类似的性能限制(它们最多可使用 10-20千兆位)。
它们非常适合流量分析,事实上,使用 nProbe Cento 时可以处理高达 100 Gbps 的线速。相反,当需要 RSS 时,它们不能与nProbe Pro/Enterprise结合使用,因为 Mellanox 适配器上的 RSS 实现支持多线程应用程序(例如 nProbe Cento),但不能与多进程应用程序一起使用(例如 nProbe Pro/Enterprise) )。
另一方面,Mellanox 适配器提供了上一篇文章中介绍的有趣功能,包括硬件数据包时间戳(具有纳秒分辨率)、硬件数据包过滤(灵活且支持许多规则)和流量复制。
流量重复意味着可以从多个应用程序捕获相同的流量(例如用于流量记录的n2disk和用于流量分析的nProbe Cento),而这对于英特尔来说是不可能的。还可以为每个应用程序使用不同的负载平衡配置(例如,使用单个数据流将所有流量发送到 n2disk,同时使用多个 RSS 队列将负载平衡流量发送到 nProbe Cento)。
基于 FPGA 的网络适配器是专用的可编程适配器,能够提供高性能和增强功能。来自不同品牌的适配器,包括 Napatech 和 Silicom丹麦(前身为 Fiberblaze),都属于这一类。这些适配器绝对适合高速流量分析,但 nProbe 等通常并不真正需要它们,因为基于 ASIC 的卡(Intel 或 Mellanox)已经能够通过利用 RSS 负载扩展到 100 Gbps。平衡性好,价格也低很多。
大多数 FPGA 适配器都有一个有趣的功能,那就是能够聚合来自硬件中多个接口的流量。当使用网络 TAP 监控链接时,这非常有用。事实上,在这种情况下,全双工链路的两个方向需要聚合(并最终负载平衡到多个 CPU 核心),以便为流量分析应用程序提供整个流量。这可以在高达几 Gbps 的软件中完成,但必须在满载的 10 Gbps 链路上用硬件完成。
如果使用 n2disk进行流量记录,这些适配器会发挥作用。事实上,FPGA 适配器通常包含巨大的缓冲区,其中一些能够将数据包按块移动到主机内存(将数据包聚集在一起,每个块高达几兆字节),而不是像 ASIC 适配器那样将数据包移动到主机存储器。这极大地减轻了 PCIe 总线和内存子系统的压力,使用 n2disk 的单个数据流提供高达 50 Gbps 的数据包捕获性能。这种捕获模式与纳秒分辨率的硬件时间戳支持相结合,使我们能够以高达 100 Gbps 的速度转储到磁盘。例如 Napatech 和 Fiberblaze 适配器就是这种情况。
请注意,在大多数情况下,使用 FPGA 适配器访问网络适配器是互斥的,类似于 Intel 的 ZC 驱动程序,特别是当您需要为每个应用程序使用不同的负载平衡策略时。唯一的例外是 Fiberblaze,它允许您创建不同的负载平衡组,类似于 Mellanox。
如果您的系统配备了 PF_RING ZC 或 FPGA 不支持的网络适配器,则根据适配器型号和系统规格,每个内核的(低)捕获性能范围为 100 Mbps 到 2-3 Gbps。事实上,PF_RING 使用标准驱动程序支持任何适配器,但性能受到标准内核机制的限制。另一方面,在这种情况下,您可以使用同一网络接口从多个应用程序运行数据包捕获,因为接口访问不是互斥的(内核模块负责传递流量,向每个应用程序发送副本)
https://fasterdata.es.net/DTN/hardware-selection/network/
要寻找的 NIC 功能包括:
请注意,许多 NIC 提供双端口型号,但这并不意味着如果您同时使用两个端口,您将获得双倍的性能。通常,第二个端口用作备用端口。推荐的 100G 选项包括 NVIDIA/Mellanox ConnectX-5 和 ConnectX-6 (200G/100G) 部件以及 Intel E810, NVIDIA、Intel、Broadcom 等少数厂商也在硬件上支持 RoCE
https://fasterdata.es.net/DTN/hardware-selection/storage/
如果希望从单台机器中获得超过 20Gbps 的磁盘性能,则需要使用 SSD。最佳性能将来自NVMe 驱动器的使用。请注意,每种 SSD 都针对不同类型的工作流程进行了优化,并拥有无数的调整选项以获得最佳性能。重复的 P/E(编程-擦除)循环会缩短 SSD 的使用寿命,建议应用某些调整参数来帮助缓解这种情况。
由于市场不断变化,选择 SSD 可能是一项具有挑战性的任务。建议您在评估速度和可靠性因素时 查阅最新指南(例如http://www.fastestssd.com/featured/ssd-rankings-the-fastest-solid-state-drives/ )
https://dejankosticgithub.github.io/documents/publications/nicbench-pam21.pdf
随着网络接口卡 (NIC) 速度的急剧增长,优化 I/O 操作对于支持现代应用程序至关重要。 最近的工作证明,处理 40 Gbps 的传输控制协议 (TCP) 流量需要通用服务器上大约 20%-60% 的 CPU 资源 [10,31,48]。 这些通信开销消耗了原本可用于运行客户应用程序的 CPU 周期,最终导致网络运营商的部署成本高昂
将网络操作卸载到 NIC 是一种实用的方法,可以部分减轻 CPU 管理(部分)网络相关状态的负担。 此类卸载的示例包括 TCP 优化,例如大型接收卸载 (LRO) 和 TCP 分段卸载 (TSO) [1]。 NIC 越来越多地配备内置现场可编程门阵列 (FPGA) 或网络处理器内核,可用于将计算从主机 CPU 直接卸载到 NIC 中。 此类 NIC 称为 SmartNIC。 对 SmartNIC 技术的多项初步调查表明,对于卸载网络堆栈 [2,10,30,31,32]、网络功能 [3,18,25,43,4]、键值存储 [7,26,28] 具有潜在的好处 ]、数据包调度器 [44]、神经网络 [42] 以及其他 [21,38]。 尽管(智能)NIC 在当今系统中的相关性越来越大,但很少有研究关注剖析 SmartNIC 的性能、将其与前代产品进行比较,并为部署 NIC 卸载应用程序(重点关注数据包分类)提供指南。 我们的目标。 在这项工作中,我们研究了广泛部署的数据包分类操作的(智能)NIC 的性能。 数据包分类的一个关键挑战是分类器能够快速(i)将传入数据包与其数据包处理操作相匹配,以及(ii)调整数据包分类器的状态,例如通过插入新规则或更新现有规则。 例如,考虑一个云负载均衡器 (LB),它跟踪传入连接与处理这些连接的后端服务器之间的映射。 LB 可以利用 NIC 的数据包分类器将传入连接标识符的 TCP/IP 5 元组映射到其相应的服务器。 由于大型数据中心中的单个集群每秒可能接收超过 1000 万个新连接[29],因此支持数据包分类器的快速更新至关重要,从而实现高吞吐量和低可预测延迟。 我们对数据包分类器的研究揭示了当今(智能)NIC 中意想不到的性能瓶颈,并为希望将动态数据包分类器卸载到(智能)NIC 的研究人员和从业者提供了指导。 发现。 我们分析了速度在 100 Gbps 到 200 Gbps 范围内的四种不同 NIC 的性能。 我们的主要发现总结在表 1 中。简而言之,我们表明,当 i) 转发平面更新和 ii) 数据包与 NIC 中的多个转发表匹配时,测试的 NIC 的转发吞吐量急剧下降。 此外,我们设计了一种有效的内存更新机制,可以减轻更新规则对转发吞吐量的影响。 重现本文实验的代码以及显示所有四个受测 NIC 的实验评估的补充图表均已公开可用 [17]。 纸张轮廓。 本文的结构如下:§2 概述了本工作中使用的实验方法; §3 提供了对现代 NIC 有用的性能见解; §4 讨论了除整篇论文中提到的工作之外的可编程网络硬件领域的相关工作
https://fasterdata.es.net/DTN/reference-implementation/
系统架构
https://mails.dpdk.org/archives/dev/2018-January/086889.html
类似的, ixgbe:将默认 TX 环形缓冲区增加到 1024: https://patchwork.ozlabs.org/project/netdev/patch/20140514141748.20309.83121.stgit@dragon/
将 RX/TX 默认环大小增加到 1024/1024 以适应更快的 NIC。 随着PPS数量的增加,需要更大的RX缓冲区以避免丢包。 虽然 128 的环大小对于 1G 和可能的 10G NIC 来说可能足够大,但在 25G 和 40G 线路速率下,这不会扩展到小数据包大小。 当我们将 RX 缓冲区大小增加到 1024 时,我们还需要增加 TX 缓冲区大小以确保 TX 侧不会成为瓶颈
https://www.intel.com/content/www/us/en/architecture-and-technology/ethernet.html
了解支持这一激动人心的新标准的英特尔® 以太网网络适配器,该标准将服务器网络功能扩展到 PCIe 外形规格之外(可将网卡前置/支持热插拔/电源等监控)
PF_RING ZC | 高速流量处理DPDK替代方案: https://cloud.tencent.com/developer/article/1831407
高速数据包处理框架PF_RING: https://github.com/ntop/PF_RING
PF_RING文档: https://www.ntop.org/guides/pf_ring/
PF_RING简介: https://www.ntop.org/products/packet-capture/pf_ring/
PF_RING API: https://www.ntop.org/guides/pf_ring_api/files.html
NTOP简介: https://www.ntop.org/about/about-us-2/
使用商用网络适配器的 10 Gbit 硬件数据包过滤: https://www.ntop.org/products/packet-capture/pf_ring/hardware-packet-filtering/
PF_RING驱动程序/模块: https://www.ntop.org/guides/pf_ring/modules/index.html
PF_RING零拷贝ZC: https://www.ntop.org/guides/pf_ring/zc.html
https://www.ntop.org/products/packet-capture/pf_ring/pf_ring-zc-zero-copy/
引入对基于 Intel E810 的 100G 适配器的 PF_RING ZC 支持: https://www.ntop.org/pf_ring/introducing-pf_ring-zc-support-for-intel-e810-based-100g-adapters/
Intel以太网(100GbE解决方案/800系列): https://www.intel.com/content/www/us/en/architecture-and-technology/ethernet.html
推出对 Mellanox 适配器的 PF_RING ZC 支持: https://www.ntop.org/pf_ring/introducing-pf_ring-zc-support-for-mellanox-adapters/
你需要知道的智能网卡的关键: https://dejankosticgithub.github.io/documents/publications/nicbench-pam21.pdf
记一次bro+pf_ring zc的搭建历程: https://blog.csdn.net/ccworm/article/details/98964838
(存储子系统选择)2024 年最快的 2.5 英寸 SATA 和 M.2 PCIe 固态硬盘 – 排名: https://www.gamingpcbuilder.com/ssd-ranking-the-fastest-solid-state-drives/
https://fasterdata.es.net/DTN/hardware-selection/storage/
博客: https://cloud.tencent.com/developer/user/5060293/articles | https://logread.cn | https://blog.csdn.net/ssbandjl | https://www.zhihu.com/people/ssbandjl/posts
https://cloud.tencent.com/developer/column/101987
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。