![在 OpenBSD 和 NIC 上设置支持 TCO 的 VDSL 路由器](https://linux22.com/image/483751/%E5%9C%A8%20OpenBSD%20%E5%92%8C%20NIC%20%E4%B8%8A%E8%AE%BE%E7%BD%AE%E6%94%AF%E6%8C%81%20TCO%20%E7%9A%84%20VDSL%20%E8%B7%AF%E7%94%B1%E5%99%A8.png)
这是我的第一个问题,我希望我做的一切都是正确的。感谢设置 serverfault - 互联网上很久以来就没有这样的网站了。
在接下来的几周内,我将获得 VDSL 25 连接(最好是 25 Mbit 下载和 5 Mbit 上传)。所以现在我正在考虑为 VDSL 设置自己的路由器,因为我不想使用 VDSL 25 附带的 Speedport 路由器。
我真的很喜欢 OpenBSD,我找到了一个关于将 OpenBSD 与 VDSL 结合使用. 在一篇关于建立基于 FreeBSD 的 pfSense 用于 VDSL我读到计算机至少应该有 1 GHz 的主频和 1024 MB 的 RAM。
我的机器将是一台 800 MHz Pentium 3 和 512 MB RAM,但我考虑购买一台 30 美元的 Intel Gigbit NIC 和 TCO(TCP 校验和卸载)。一位同事向我建议这样做,因为他认为这将大大降低 CPU 负载,而我的 800 MHz P3 就足够了。
那么,您是否对 VDSL 的“硬件要求”有一些经验,以及带有 TCO 的 NIC 是否有帮助?
提前感谢您的所有回答!
答案1
pfSense 的推荐规格太过分了。您的机器应该能够轻松处理该负载。作为参考,我在生产中使用了 Soekris Net5501 一段时间,它的速度降到了 45Mbps 左右。它的规格为 500MHz Geode、256MB RAM 和一些有史以来最差的网卡(通过 Rhinestone - vr 驱动程序)。
根据我的经验,像这样的路由器最常见的性能障碍是快速触发中断所需的上下文切换。像 Rhinestones 这样的劣质网卡会为收到的每个数据包触发一次中断。这会成为一个大问题,因为每个数据包都必须处理,但是哎呀!在处理过程中,另一个数据包进来了。所以你把它拉出来,被中断,等等。上下文切换是一项昂贵的操作,很快就会让慢速 CPU 不堪重负。
好的 NIC(英特尔和博通都很稳定)具有中断缓解功能,这意味着只有当它们累积了一定数量的数据包或计时器到达 0 时,它们才会干扰 CPU。像这样以块的形式进行操作比不断进行上下文切换要高效得多。
一些操作系统试图通过轮询来模拟中断缓解 - 内核忽略 NIC 的中断,只是偶尔检查其缓冲区。这可以带来更高的吞吐量和更低的 CPU 利用率,但代价是延迟,如果 NIC 的缓冲区已满,可能会丢失数据包等。OpenBSD 尚未实现轮询。根据我的经验,中断缓解优于轮询,而且优质 NIC 的价格足够低,因此没有太多借口。
内存真的不应该成为问题。OpenBSD 和 PF 非常高效。在相当慢的一天(今天),我的一个生产路由器的内存中大约有 17.5k 个状态。它还运行 spamd、记录所有被阻止的数据包,并在其最活跃的接口上执行 tcpdump。使用 191MB 的 RAM。
所以,不管有没有 TCO,都说明您的规格已经足够了。
答案2
OpenBSD 不支持 TCO,因此您不会从此类卡中获得任何好处。