gpt4 book ai didi

linux - Linux 中的高性能数据包处理

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:22 26 4
gpt4 key购买 nike

我正在使用 BeagleBone Black 在 Linux 中进行数据包 reshape 项目。基本上,数据包在一个 VLAN 上接收、修改,然后在不同的 VLAN 上发送出去。此过程是双向的 - VLAN 未指定为仅输入或仅输出。它类似于网桥,但数据包在传输过程中会发生变化(有时变化相当大)。

我尝试了两种不同的方法来实现这一点:

  1. 创建一个用户空间应用程序,在两者上打开原始套接字接口(interface)。所有数据包处理(包括桥接)都在应用程序。
  2. 设置软件桥(使用内核桥接模块)并添加一个安装 netfilter 的内核模块 Hook 后路由 (NF_BR_POST_ROUTING)。所有数据包处理是在内核中处理。

第二个选项似乎比第一个选项快 4 倍左右。我想更多地了解这是为什么。我试过集思广益,想知道在内核空间和用户空间之间快速切换是否会对性能产生实质性影响,或者套接字接口(interface)可能本身就很慢?

我认为用户应用程序已经相当优化(例如,我正在使用 PACKET_MMAP),但它有可能进一步优化。我在应用程序上运行 perf 并注意到它在 v7_flush_kern_dcache_area 中花费了大量时间 (35%),所以这可能是一个候选者。如果对优化数据包处理的常用方法有任何其他建议,我可以尝试一下。

最佳答案

上下文切换是昂贵的,内核到用户空间的切换意味着上下文切换。可以看到this article对于确切的数字,但规定的持续时间都是微秒的数量级。

您还可以使用 lmbench 对真实的 cost of context switches 进行基准测试在您的特定 CPU 上。

关于linux - Linux 中的高性能数据包处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27948953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com