5

背景:

我正在将一个数据包解析/操作程序从 FreeBSD 移植到 Linux(特别是 Debian - jessie)。该程序在两个物理接口之间实现双向桥接,同时在 TX 操作之前执行解析/操作。

在 FreeBSD 中,此应用程序使用 Pcap 进行 RX/TX。在 Linux 中,到目前为止,我已经使用 Pcap、PACKET_MMAP(使用 TPACKET_V2)和 Vanilla PF_RING 进行了测试。

测试结果:

使用相同的硬件和实验室环境,我从使用 iperf 执行的几个测试中观察到以下(近似)吞吐量结果:

  • FreeBSD 内核桥接:880Mb/s
  • FreeBSD Pcap(用户空间)网桥:700Mb/s
  • Debian 内核桥:880Mb/s
  • Debian Pcap(用户空间)网桥:120Kb/s
  • Debian Vanilla PF_RING(用户空间)网桥:980Kb/s
  • Debian PACKET_MMAP(用户空间)网桥:480Kb/s

想法和问题:

Debian 用户空间的速度对我来说似乎很荒谬。它们无法使用——我怀疑我遗漏了一些东西。是否有我需要启用的系统选项(“快点”,大声笑)?

或者这就是 Linux 用户空间桥接的方式?

编辑/更新

我一直怀疑存在影响 Debian 测试的管理限制。我正在搜索(某物/任何东西)的系统文档,但无济于事。关于什么可能限制这一点的任何想法?

4

1 回答 1

3

晦涩的问题找到晦涩的答案...

经过大量研究,我发现在这种情况下 Linux 的“问题”实际上是优化的结果。默认情况下,显然,系统正在针对大型持续负载进行优化(因此 YMMV 具有以下“修复”)。

通过使用 ethtool 调整我的两个桥接接口的优化,我解决了速度问题并发现了与 FreeBSD 系统相同的吞吐量:

ethtool -K eth1 gso off gro off tso off ufo off lro off

在两个接口上进行上述操作后,PF_RING 和 PACKET_MMAP 达到了内核桥接速度(这是我的测试实验室的最大速度),Pcap 测试结果约为 300Mb/s。

于 2017-06-28T16:25:08.307 回答