PF_RING ZC (Zero Copy)

来自主机和虚拟机的多10 Gbit RX / TX数据包处理

PF_RING™ZC(零复制)是一种灵活的数据包处理框架,可让您在任何数据包大小下实现1/10 Gbit的线速数据包处理(RX和TX)。它实现了零复制操作,包括用于进程间和VM间(KVM)通信的模式。它可以被视为DNA / LibZero的后继产品,该产品基于过去几年的经验教训提供了一个单独且一致的API。

它具有干净灵活的API,可实现可从线程、应用程序和虚拟机使用的简单构建基块(队列、工作器和池)。这样可以实现10 Gbit线速数据包处理。

简单干净的API

PF_RING™ZC带有一个简单的API,能够用几行代码创建一个复杂的应用程序。 以下示例显示了如何用6行代码创建一个聚合器+平衡器应用程序。

有关API的更多信息,请参考文档 并查看代码示例

使用PF_RING感知驱动程序的按需内核旁路

PF_RING™ZC附带了新一代的PF_RING™感知驱动程序,可以在内核或旁路模式下使用。安装后,这些驱动程序将作为标准Linux驱动程序运行,您可以在其中进行常规联网(例如ping或SSH)。当从PF_RING™使用时,它们比普通驱动程序更快,因为它们直接与之交互。如果您使用支持PF_RING的驱动程序以零拷贝方式打开设备(例如pfcount -i zc:eth1),则该设备将无法通过标准网络使用,因为通过内核旁路以零拷贝方式对其进行了访问,就像以前的DNA一样。 一旦访问设备的应用程序关闭,标准的网络活动就可以再次发生。

零复制操作到虚拟机(KVM)

PF_RING™ZC允许您为KVM虚拟机以零拷贝转发(RX和TX)数据包,而无需使用PCIe直通等技术。由于在VM上动态创建了ZC设备,因此您可以从VM中以零拷贝捕获/发送流量,而无需修补KVM代码,也可以在创建ZC设备后启动KVM。从本质上讲,现在您可以使用在物理主机上使用的相同命令,对KVM进行10 Gbit的线速传输,而无需更改任何代码行。

上图显示ZC可用于创建跨虚拟机以零副本进行通话的应用程序管道。从本质上讲,PF_RING™ZC从第一天起就可以使用云了。

零复制操作

与其前身LibZero相似,在PF_RING™ZC中,您可以在线程,应用程序以及现在的VM之间执行零复制操作。您可以平衡各个应用程序的零拷贝数据包

或实施数据包扇出。

在PF_RING™ZC中,所有内容均以线速以零复制进行。

性能

与其前身LibZero / DNA相似,PF_RING™ZC允许您从物理主机或KVM获得10 Gbit的线速,无论任何数据包大小。您可以使用我们为您开发的演示应用程序自己进行测试。

将0复制与1复制设备集成

在PF_RING™ZC中,即使对非PF_RING敏感的驱动程序,也可以使用零复制框架。这意味着您可以将数据包分发、处理、发起并将其注入零复制框架,即使它们并非源自ZC设备也是如此。

一旦将数据包复制(副本)到ZC世界中,从那时起,该数据包将在其整个生命周期中始终以零副本处理。例如,zbalance_ipc演示应用程序可以从非PF_RING感知设备(例如WiFI设备或Broadcom NIC)以一复制模式读取数据包,并将其发送到ZC内部以对其执行零复制操作。

内核旁路和IP堆栈数据包注入

与其他内核旁路的技术相反,使用PF_RING™ZC,您可以随时决定要向标准Linux IP堆栈中注入哪些内核旁路的数据包。PF_RING带有一个称为“stack” 的IP 堆栈数据包注入模块,通过该模块,您可以选择将内核旁路接收的数据包注入到标准IP堆栈中。您需要做的就是打开设备“ stack:ethX”,然后将数据包发送到IP堆栈,就像从ethX接收到的一样。

Snort的DAQ

当使用Snort(最受欢迎的IDS / IPS之一)时,Snort用户还可以从PF_RING™ZC速度中受益。本地PF_RING™ZC DAQ(Snort Data AcQuisition)库比标准PF_RING™DAQ快20%至50%,还可以在IPS和IDS模式下运行。

PF_RING™ZC DAQ是PF_RING™的一部分。

操作系统