奇怪的UDP吞吐量现象

时间:2018-11-23 13:59:01

标签: c linux sockets optimization udp

我一直在尝试通过具有内置1G以太网MAC的功率相对较低的ARM SoC(双核cortex-A9)来最大化UDP吞吐量。

我的实验采取了各种方法,但是以下我无法解释。

我使用的代码是here。这是一个相当简单的小程序(由gcc -O3 udp_splurger.c -o udp_splurger编译),它输出固定数量的UDP数据包,然后报告执行该操作所需的时间,从而计算出该数量的数据包的总输出数据速率。

当我单独运行程序时,首先要注意的是程序在哪个内核上运行。我可以将其解释为与第一个内核具有硬亲缘关系的中断,因此,当程序在该内核上运行时,中断处理程序将与程序竞争,并且吞吐量下降。因此对于这两个线程,我看到以下内容:

对于CPU 0(具有50%CPU,2核系统中的1核):

$ sudo taskset 1 nice -10 ./udp_splurger 1
1: Writing simple data packets...
1: Runtime to send 131072 packets: 3.023376 seconds (483.817893 Mbits per second)
1: Runtime to send 131072 packets: 3.008770 seconds (486.166586 Mbits per second)
1: Runtime to send 131072 packets: 3.015237 seconds (485.123893 Mbits per second)

对于CPU 1(具有60%的CPU,2核系统中的> 1核):

$ sudo taskset 2 nice -10 ./udp_splurger 1  
1: Writing simple data packets...
1: Runtime to send 131072 packets: 1.974865 seconds (740.690268 Mbits per second)
1: Runtime to send 131072 packets: 1.973994 seconds (741.017183 Mbits per second)
1: Runtime to send 131072 packets: 1.975528 seconds (740.441811 Mbits per second)

好奇心是当我尝试运行两个进程时发生的事情。所以:

$ sudo taskset 2 nice -10 ./udp_splurger 1 & sudo taskset 1 nice -10 ./udp_splurger 2
[3] 1578
2: Writing simple data packets...
1: Writing simple data packets...
1: Runtime to send 131072 packets: 1.581942 seconds (924.662958 Mbits per second)
1: Runtime to send 131072 packets: 1.586901 seconds (921.773395 Mbits per second)
1: Runtime to send 131072 packets: 1.579631 seconds (926.016226 Mbits per second)
2: Runtime to send 131072 packets: 7.471531 seconds (195.778279 Mbits per second)
2: Runtime to send 131072 packets: 3.004867 seconds (486.798071 Mbits per second)
2: Runtime to send 131072 packets: 3.003318 seconds (487.049127 Mbits per second)

两个进程都在运行时,CPU净时间约为50%和42%。

从某种程度上来说,这似乎没问题-我们将CPU的总使用率提高到了CPU受限的问题,并实现了更高的吞吐量。但是,我不明白为什么一个过程突然突然变得更快了。

最初,我想知道第二个进程是否正在使CPU时间的中断处理程序匮乏,这意味着中断正在合并,因此减少了中断处理的总时间,但是我认为简单的CPU压力程序将具有同样的结果,但是不是(除非我们需要一些系统调用?)。

有什么想法吗?

如果没有运行两个进程的回旋机制,我能否做到这一点?

我可以确认目标接口上接收到的数据包数量正确,因此我相信这些数量不仅仅是错误的。

0 个答案:

没有答案