假如你一名经验丰富的开发人员(抱歉,DPDK API 非常简单),您需要在从头开始编写您的应用程序,您可以使用所有 DPDK API 调用来分配/管理数据包,并且您必须了解您所使用的 NIC。
举个例子:假如你使用英特尔 X710/XL710,它是英特尔当前的旗舰 10/40 Gbit 适配器。当您启用巨型帧时,NIC 将返回 2K 长的 RX 数据包(因此,如果您有一个入口 5k 数据包,您将收到部分 2 x 2K 缓冲区和剩余的 1k 缓冲区),如果您想发送一个数据包,则大小为 9K(因此您需要发送 1x8K 部分缓冲区以及以下缓冲区中的其余部分)。本质上,开发人员必须知道这一点,准备用应用程序来处理这些问题,并确保当您移动到另一个不能以这种方式工作的 NIC(例如 Intel X520/X540)时,您能够处理巨型帧。
相反,在 PF_RING ZC 中,库根据 MTU 分配内存缓冲区,无论您使用什么网卡,库都将始终返回完整的数据包(即缓冲区中的所有这些数据包分段不会暴露给将始终使用的用户,开发人员唯一要做的就是确保他的应用程序可以处理巨型数据包。使用PF_RING ZC API,开发人员无需记住的 NIC 的硬件细节,无需更改一行代码、只需将设备名称从: