用户 space 桥接 - Linux 与 FreeBSD
User space bridging - Linux vs. FreeBSD
背景:
我正在努力将 parsing/manipulation 程序包从 FreeBSD 移植到 Linux(特别是 Debian - jessie)。该程序在两个物理接口之间实现双向桥接,同时在 TX 操作之前执行 parsing/manipulation。
在 FreeBSD 中,此应用程序使用 Pcap RX/TX。在 Linux 中,到目前为止,我已经使用 Pcap、PACKET_MMAP(使用 TPACKET_V2)和 Vanilla PF_RING.
进行了测试
测试结果:
使用相同的硬件和实验室环境,我从使用 iperf 执行的多项测试中观察到以下(近似)吞吐量结果:
- FreeBSD 内核桥:880Mb/s
- FreeBSD Pcap(用户space)网桥:700Mb/s
- Debian 内核桥:880Mb/s
- Debian Pcap(用户space)网桥:120Kb/s
- Debian Vanilla PF_RING(用户 space)网桥:980Kb/s
- Debian PACKET_MMAP(用户space)网桥:480Kb/s
想法和问题:
Debian 用户 space 速度对我来说似乎很荒谬。它们无法使用 - 我怀疑我遗漏了什么。是否有我需要启用的系统选项("go fast",哈哈)?
或者这就是 Linux 用户 space 桥接的情况?
编辑/更新
我一直怀疑存在影响 Debian 测试的管理限制。我正在搜索系统文档(某物/任何东西)但无济于事。关于什么可能限制这一点的任何想法?
晦涩的问题找到晦涩的答案...
经过大量研究,我发现 "problems" 和 Linux 在这种情况下实际上是优化的结果。显然,默认情况下,系统正在针对大的持续负载进行优化(因此 YMMV 具有以下 "fix")。
我通过使用 ethtool 调整我的两个桥接接口的优化解决了速度问题并发现与 FreeBSD 系统相同的吞吐量:
ethtool -K eth1 gso off gro off tso off ufo off lro off
在两个接口上进行上述操作后,PF_RING 和 PACKET_MMAP 达到了内核桥接速度(这是我的测试实验室的最大速度)并且 Pcap 测试结果约为 300Mb/s。
背景:
我正在努力将 parsing/manipulation 程序包从 FreeBSD 移植到 Linux(特别是 Debian - jessie)。该程序在两个物理接口之间实现双向桥接,同时在 TX 操作之前执行 parsing/manipulation。
在 FreeBSD 中,此应用程序使用 Pcap RX/TX。在 Linux 中,到目前为止,我已经使用 Pcap、PACKET_MMAP(使用 TPACKET_V2)和 Vanilla PF_RING.
进行了测试测试结果:
使用相同的硬件和实验室环境,我从使用 iperf 执行的多项测试中观察到以下(近似)吞吐量结果:
- FreeBSD 内核桥:880Mb/s
- FreeBSD Pcap(用户space)网桥:700Mb/s
- Debian 内核桥:880Mb/s
- Debian Pcap(用户space)网桥:120Kb/s
- Debian Vanilla PF_RING(用户 space)网桥:980Kb/s
- Debian PACKET_MMAP(用户space)网桥:480Kb/s
想法和问题:
Debian 用户 space 速度对我来说似乎很荒谬。它们无法使用 - 我怀疑我遗漏了什么。是否有我需要启用的系统选项("go fast",哈哈)?
或者这就是 Linux 用户 space 桥接的情况?
编辑/更新
我一直怀疑存在影响 Debian 测试的管理限制。我正在搜索系统文档(某物/任何东西)但无济于事。关于什么可能限制这一点的任何想法?
晦涩的问题找到晦涩的答案...
经过大量研究,我发现 "problems" 和 Linux 在这种情况下实际上是优化的结果。显然,默认情况下,系统正在针对大的持续负载进行优化(因此 YMMV 具有以下 "fix")。
我通过使用 ethtool 调整我的两个桥接接口的优化解决了速度问题并发现与 FreeBSD 系统相同的吞吐量:
ethtool -K eth1 gso off gro off tso off ufo off lro off
在两个接口上进行上述操作后,PF_RING 和 PACKET_MMAP 达到了内核桥接速度(这是我的测试实验室的最大速度)并且 Pcap 测试结果约为 300Mb/s。