![带有 DPDK 和不带有 DPDK 的 OvS 之间的区别](https://linux22.com/image/888601/%E5%B8%A6%E6%9C%89%20DPDK%20%E5%92%8C%E4%B8%8D%E5%B8%A6%E6%9C%89%20DPDK%20%E7%9A%84%20OvS%20%E4%B9%8B%E9%97%B4%E7%9A%84%E5%8C%BA%E5%88%AB.png)
我需要你的帮助 - 我想看看使用 DPDK 和不使用 DPDK 之间的区别。现在,我使用 netperf 测试了我的链接(1G)。我在 netperf 上更改了数据包大小,我将数据包大小从 64 字节逐渐增加到 1024,但仍然获得相同的吞吐量(~940Mbps)。这有什么问题?我希望观察到,在没有 Intel DPDK 的物理机上,随着数据包大小的增加,吞吐量会继续增加。你知道如何正确测试它以查看任何差异吗?请帮帮我,因为现在我还不知道。
总而言之,如果我的 1G 链路(940Mbps)具有最大吞吐量,那么目前我认为没有必要使用 DPDK,但我必须对其进行测试...所以我需要了解它们之间的区别。也许你有什么想法?
答案1
在我看来,DPDK 主要用于数据包处理和转发,并经过测试和调整。因此,常见的简单网络基准测试在某种程度上处于这种赛车优化的边缘。
由于其专业性,例如执行路由+特殊功能的应用程序 - 许多测试通常采用复杂的设置,例如包括昂贵的流量生成器。
我必须承认,有时我也想要一个更简单的测试,在某种程度上你可以做到。例如,我将一个(最简单的)带有两个 KVM 客户机的 Openvswitch 设置与带有 Openvswitch-DPDK 的相同设置进行了比较。
在这种情况下,您可以运行东/西流量(客户机到客户机)或北/南流量(外部到客户机)。这可能在很大程度上取决于最低限度的调整,但我能够通过以下“正常”基准测试显示改进:Netperf - 非常小的数据包 Netper - 8k 数据包 Uperf - 非常小的数据包 Uperf - 8k 数据包 Uperf - 非常小的数据包,许多连接
但是例如没有改进,因为之前使用以下方法效果很好:Uperf - 8k 数据包,许多连接 Iperf - 单个或多个连接
数量不同,但某种程度上 EW 和 NS 连接也是如此。但要小心,Host-Guest 似乎比较特殊,至少在我的案例中存在问题。
需要记住的 TL;DR 是:如果正常的网络堆栈已经很快了,那么您就无法获得很多好处 - 事实上,由于效率较低,您会失去一些好处,因此请尝试正常 Linux 堆栈较慢的情况。
所有这些都是开源的,我们所做的工作也是如此,因此,尽管我的测试完全是 WIP(目前不是我优先维护的),并且可能会发生很大变化,但您可能会从中获得一些灵感,甚至基于此进行测试矿。我上传了一些结果由 Yakkety 于 9 月份为您生成 =>http://paste.ubuntu.com/23547387/。在之前的版本中,我使用旧版本来创建我的博客
PS:正如您所预料的,所有调整都会有退化,因此请了解您的工作量!
答案2
数据平面开发套件 (DPDK) 用于加速数据包处理能力。使用普通 OVS,我们无法实现高吞吐量,因为数据包必须从用户空间和内核空间传递。在 DPDK 中,我们可以跳过内核空间延迟部分。
每个处理器插槽都有多个核心。每个核心都有其私有的 L1 缓存、L2 缓存和共享的 LLC(末级缓存),之后将进入主内存(RAM)。
因此,重点是当您将 DPDK 与 OVS 一起使用时,您将拥有更少的延迟,从而获得更高的吞吐量。
答案3
在 1Gbps NIC 和正确的 CPU 上,ovs 与 ovs-dpdk 在基本端口到端口转发测试中不会显示出太大差异。但 10gbps、25Gbps、40Gbps 和 100Gbps OVS(内核桥)转发与 OVS-DPDK(用户空间桥)转发相比,影响很大,因为 DPDK-OVS 通过以下方式缓解性能问题
- 减少端口转发之间的复制
- 由于有一个简单的端口到端口转发,精确匹配表被添加到流缓存表中,这使得查找和操作更快。
- 使用
hw-offload=true
32 位匹配 ID 返回操作表中的条目,从而无需缓存表。
笔记:
- 根据链接速度,每个大小的数据包数量会有所不同[数据包大小和 mpps
- 在 OVS 上启用速率限制、隧道终止等功能将导致 OVS 与 OVS-DPDK 相比数据包处理差异更大。
因此,由于数据包数量不受压力,因此简单端口到端口转发 Ovs 和 Ovs-dpdk 的观察适用于具有各种数据包大小的 1Gbps。