首页 > 代码库 > ROS:8个进程接收数据的带宽

ROS:8个进程接收数据的带宽

将接收端和发送端的套接字缓冲区设置为【8MB, 8MB】,接收端是while循环recv的directrecv模式下,8个ROS进程,每个ROS处理一个socket, 发送和接收包长为2KB, 运行了大约12个小时的带宽曲线如下:

技术分享

计算得到每个接收进程的平均带宽,以及8个进程的平均带宽的和为:

2.61563
3.5609
3.50985
3.12713
3.22121
3.13252
3.00344
3.99146
sum ave bw: 26.16214

总的平均带宽为26Gb/s,且接收端的CPU idle 为0,发送端的CPU idle 为80%。此时的瓶颈为接收端的CPU。

通过top -H -p pid 命令可以查看进程的线程数,通过gstack pid可以看到线程的函数调用栈。用前面两条命令可以查看到每个ROS进程都有三个线程在执行:一个是ROS::UDPChannels, 一个是ROS::RequestHandler; 一个是Recv。其中只要Recv是当前接收数据线程。可以将另外两个线程disable掉,释放一部分CPU资源,增加线程数,看看带宽会不会继续增加。

 

问题是:如何disable掉UDPChannels?

ROS:8个进程接收数据的带宽