在通过10 via网络接口连接到信号猎犬频谱分析器的服务器上,我很难确保所需的网络吞吐量。基本上,我可以获得良好的吞吐量时,只有无线电捕获进程正在运行,但当我运行其他进程,吞吐量开始下降。我使用的是PCIe以太网适配器和QNAP SFP+ 10 GbEThunderBolt3适配器。
当我在流模式下运行一个简单的python程序来从频谱分析器API轮询时,它在最大带宽(~800 to /S)上都工作得很好。当我这么做
$ stress --cpu 8 --io 8 --vm 8 --hdd 8同时,它降低到大约600 of /S,我开始减少很多数据。
我尝试过的事情:
从本质上说,我知道它可以实时运行,因为当它本身被限制在两个核心时,它可以正常工作。但由于某些原因,即使其他核心不干扰CPU周期或网络IRQ,当内核1-6处于重载时,它们会大大减缓主进程的速度。
如果有帮助的话,我发现--vm 4选项对stress造成的影响最大,因此我怀疑它与内存分配有关,也许与网卡的DRAM接口有关。
我基本上是从Ubuntu20.04机器(应该是非常强大的)上从收音机中获取每一个数据包。有人有这样的应用经验吗?
编辑:我在这里复制了一些性能曲线:
这就是我所看到的效果
这是利用情况。核心6在高应力阶段和“刚捕获”阶段都是软质的100%。我尝试过将网络数据分成两个核(5和6),但是其中一个始终保持加载,而另一个似乎很明显,即使它们有类似数量的中断。

在压力测试运行期间,CPU 6上的软is的实际数量不幸地下降了。

这是我在CPU6软件上看到的效果。

此外,中断似乎保持相对不变,尽管它们在高压力时期变得不那么一致。

这是直线的网络速度,在这两个时期,它看起来也有点不一致。

我非常仔细地寻找异常(尽管netstat中有很多情节),看起来在高压力时期没有进程间的内存。这会导致问题吗?

如果有人需要更多的阴谋,请告诉我。我不能从这些推断问题,但我希望这是足够的信息,以提出潜在的解决方案。
再次感谢!
发布于 2022-01-12 21:39:10
好了,我想我已经找到了我的问题的答案。我认为这里的关键图是“软”图。在正常情况下,我不认为应该这么高。
在分析过程中,我有一个小小的时间:基本上,由于我运行的是CUDA和其他一些繁琐的安装库,所以我在一个码头容器中运行所有这些(我知道你们都在说什么!)因为我没有为码头的收音机搞网络节目,所以我就没想过。是的,你猜到了,对接者网络增加了足够的处理能力,把我推到丢包的边缘。最后,我将network_mode设置为host以使用主机网络,这解决了我的问题。希望这能对别人有所帮助!
但这并不是全部--为了弄清楚这一点,我花了大量的时间来分析为什么我看到了我所看到的效果(感谢@AlexD提供的资源)。下面是运行API驱动程序的固定CPU 7的火焰图:

正如您所看到的,它在页面错误内存分配上花费了大量时间(这应该是另一条线索,尽管我没有在这里发布。在捕获过程中,轻微的记忆错误通过屋顶)。这就解释了为什么使用stress运行--vm 4会产生最糟糕的结果--这会导致内存争用,从而显着地减缓了驱动程序的运行速度。而且,在对它进行了一些测试之后,我认为它至少需要一个以上的核心(它只丢弃固定在core 7上的数据包,但是工作在6和7上)。在超频之后,我得到了更好的结果(但仍然不完美),这就解释了为什么。
所以你有了它:解释为什么一切都是这样的,用图表来支持它。我在无线电API的两个核上有大约60%的利用率,而且它在获取所有数据包方面相当稳定(另一个核心处理软see的速度约为10%,低于上面图表中的95% )。我觉得有点傻,没有想到码头拖慢了我,但更好的解决了这一切。希望这篇文章能帮助其他人!
https://serverfault.com/questions/1087852
复制相似问题