zoukankan      html  css  js  c++  java
  • 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?

    记起来了,应该是在IOManager.cpp里面注释掉UDPCHannels有关的行,注释掉RequestHandler有关的行。

    去掉UDPChannels和RequestHandler后,重新运行ROS和发送端程序,运行3个小时,带宽曲线和上图相似,平均带宽和也为26.1%左右,接收端的cpu idle 为 70%,发送端的cpu idle 为 74%, 接收端一共有8个接收线程,一个l2sv_main(占满了一个核),折算起来,发送端的8个进程单cpu占用率为(1-74%)/(8/24)=78%,接收端的9个进程的单CPU占用率为(1-70%)/(9/24)=80%。

    接收端和发送端的cpu占用率都没有达到100%,带宽没达到40Gb/s,那什么是瓶颈呢?会不会因为多进程之间的切换占用了cpu时间,导致这段时间的cpu空闲。。?

    继续增加ROS进程个数,当ROS进程个数为12时,查看接收端的CPU占用率,发现:

    Tasks: 690 total,   3 running, 673 sleeping,  14 stopped,   0 zombie
    Cpu(s):  5.0%us, 17.4%sy,  0.0%ni, 63.1%id,  0.1%wa,  0.0%hi, 14.4%si,  0.0%st
    Mem:  32979808k total, 13664180k used, 19315628k free,   178272k buffers
    Swap: 33554428k total,   140416k used, 33414012k free, 11532988k cached
    
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                  
    27147 lhaaso    20   0 1219m  42m  29m S 100.8  0.1  10:10.56 l2sv_main                                                                
    27223 lhaaso    20   0 1072m  29m  20m S 98.2  0.1   9:36.77 ReadoutApplicat                                                           
    27191 lhaaso    20   0 1072m  32m  20m S 81.8  0.1   8:08.77 ReadoutApplicat                                                           
    27169 lhaaso    20   0 1072m  28m  20m S 70.5  0.1   7:48.94 ReadoutApplicat                                                           
       25 root      20   0     0    0    0 R 60.2  0.0  37:11.73 ksoftirqd/5                                                               
    27256 lhaaso    20   0 1072m  28m  20m S 58.0  0.1   6:46.97 ReadoutApplicat                                                           
    27201 lhaaso    20   0 1072m  29m  20m S 55.7  0.1   6:34.52 ReadoutApplicat                                                           
    27241 lhaaso    20   0 1072m  28m  20m S 55.0  0.1   4:49.45 ReadoutApplicat                                                           
    27176 lhaaso    20   0 1072m  28m  20m S 45.9  0.1   3:35.92 ReadoutApplicat                                                           
    27247 lhaaso    20   0 1072m  28m  20m S 45.7  0.1   5:21.19 ReadoutApplicat                                                           
       57 root      20   0     0    0    0 R 44.1  0.0   8:39.69 ksoftirqd/13                                                              
    27162 lhaaso    20   0 1072m  28m  20m S 35.3  0.1   3:52.14 ReadoutApplicat                                                           
    27213 lhaaso    20   0 1072m  32m  20m S 35.0  0.1   4:30.98 ReadoutApplicat                                                           
     2234 root      20   0     0    0    0 S 26.6  0.0  28:43.09 kondemand/5                                                               
    27154 lhaaso    20   0 1072m  29m  20m S 25.4  0.1   2:41.38 ReadoutApplicat                                                           
    27183 lhaaso    20   0 1072m  31m  20m S 25.0  0.1   2:42.05 ReadoutApplicat                                                           
     2242 root      20   0     0    0    0 S 17.9  0.0  27:40.58 kondemand/13                                                              
       55 root      RT   0     0    0    0 S  3.0  0.0   0:18.14 migration/13                                                              
       23 root      RT   0     0    0    0 S  0.5  0.0   1:20.04 migration/5                                                               
      104 root      20   0     0    0    0 S  0.4  0.0   6:10.83 events/5                                                                  
      112 root      20   0     0    0    0 S  0.2  0.0   6:32.42 events/13                                                                 
     2230 root      20   0     0    0    0 S  0.2  0.0  22:22.66 kondemand/1                                                               
     2233 root      20   0     0    0    0 S  0.2  0.0  14:14.19 kondemand/4                                                               
     2246 root      20   0     0    0    0 S  0.2  0.0  16:26.91 kondemand/17                                                              
    23800 lhaaso    20   0 10.2g 254m  14m S  0.2  0.8   0:19.68 java                                                                      
    26918 lhaaso    20   0 1394m  32m  24m S  0.2  0.1   0:00.30 es_server                   
    top - 20:43:47 up 232 days,  9:55, 12 users,  load average: 5.52, 5.35, 4.90
    Tasks: 691 total,   2 running, 675 sleeping,  14 stopped,   0 zombie
    Cpu0  :  6.2%us, 28.3%sy,  0.0%ni, 64.7%id,  0.0%wa,  0.0%hi,  0.8%si,  0.0%st
    Cpu1  :  8.2%us, 42.4%sy,  0.0%ni, 13.1%id,  0.0%wa,  0.1%hi, 36.2%si,  0.0%st
    Cpu2  :  5.0%us, 20.9%sy,  0.0%ni, 73.3%id,  0.0%wa,  0.0%hi,  0.8%si,  0.0%st
    Cpu3  :  6.1%us, 29.9%sy,  0.0%ni, 62.5%id,  0.0%wa,  0.1%hi,  1.3%si,  0.0%st
    Cpu4  : 10.2%us, 38.1%sy,  0.0%ni, 26.7%id,  0.0%wa,  0.0%hi, 25.0%si,  0.0%st
    Cpu5  :  0.9%us,  5.3%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi, 93.5%si,  0.0%st
    Cpu6  :  2.4%us, 12.8%sy,  0.0%ni, 83.9%id,  0.9%wa,  0.0%hi,  0.0%si,  0.0%st
    Cpu7  :  2.6%us, 14.4%sy,  0.0%ni, 83.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Cpu8  :  2.2%us, 11.7%sy,  0.0%ni, 86.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Cpu9  :  1.4%us,  7.1%sy,  0.0%ni, 91.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Cpu10 :  0.1%us,  0.0%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Cpu11 : 39.3%us, 60.7%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Cpu12 :  8.8%us, 36.8%sy,  0.0%ni, 27.7%id,  0.1%wa,  0.0%hi, 26.6%si,  0.0%st
    Cpu13 :  0.2%us,  1.2%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi, 98.6%si,  0.0%st
    Cpu14 :  1.7%us,  6.8%sy,  0.0%ni, 91.1%id,  0.0%wa,  0.0%hi,  0.4%si,  0.0%st
    Cpu15 :  8.7%us, 37.4%sy,  0.0%ni, 26.7%id,  0.0%wa,  0.0%hi, 27.1%si,  0.0%st
    Cpu16 :  1.7%us,  6.9%sy,  0.0%ni, 91.2%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
    Cpu17 :  8.3%us, 44.9%sy,  0.0%ni,  4.6%id,  0.0%wa,  0.0%hi, 42.2%si,  0.0%st
    Cpu18 :  1.4%us,  8.8%sy,  0.0%ni, 89.5%id,  0.3%wa,  0.0%hi,  0.0%si,  0.0%st
    Cpu19 :  1.3%us,  6.7%sy,  0.0%ni, 92.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Cpu20 :  0.4%us,  2.3%sy,  0.0%ni, 97.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Cpu21 :  0.5%us,  2.9%sy,  0.0%ni, 96.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Cpu22 :  0.4%us,  1.2%sy,  0.0%ni, 98.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Cpu23 :  0.0%us,  0.1%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

    发现cpu5 和cpu13上 ksoftirqd , kondemand两个程序把cpu占满了,主要是 si 时间达到接近100%,也就是说软中断消耗时间占满了两个核。此时的总平均带宽为29.7Gb/s。

    在发送端运行sar -n TCP,ETCP 5命令,发现tcp有重传,重传率为0.1~0.4%. 是接收端服务器压力太大导致了丢包吗?接收端的软中断负载太高导致了丢包?此时的瓶颈也还是CPU。

    11:45:56 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
    11:46:01 AM      0.00      0.00    249.10      0.00      0.00
    
    11:46:01 AM  active/s passive/s    iseg/s    oseg/s
    11:46:06 AM      0.00      0.00 158001.41 140671.89
    
    11:46:01 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
    11:46:06 AM      0.00      0.00    380.52      0.00      0.00
    
    11:46:06 AM  active/s passive/s    iseg/s    oseg/s
    11:46:11 AM      0.00      0.00 152455.73 124130.38
    
    11:46:06 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
    11:46:11 AM      0.00      0.00    371.23      0.00      0.00
    
    11:46:11 AM  active/s passive/s    iseg/s    oseg/s
    11:46:16 AM      0.00      0.00 152367.28 111925.20
    
    11:46:11 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
    11:46:16 AM      0.00      0.00    228.66      0.00      0.00
    
    11:46:16 AM  active/s passive/s    iseg/s    oseg/s
    11:46:21 AM      0.00      0.00 154135.63 125263.97
    
    11:46:16 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
    11:46:21 AM      0.00      0.00    353.44      0.00      0.00
    ^C

    继续增加ROS进程数量到16个,见下一篇随笔。

  • 相关阅读:
    写一些,给2013
    C# DateTime变量不能赋null值
    31222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
    王爽《汇编语言》第三版 第十五章 外中断
    王爽《汇编语言》第三版 第十四章 端口
    王爽《汇编语言》第三版 第十二章 内中断
    王爽《汇编语言》第三版 第十一章 标志寄存器
    王爽《汇编语言》第三版 第十章 call和ret指令
    王爽《汇编语言》第三版 第九章 转移指令的原理
    王爽《汇编语言》第三版 第八章 数据处理的两个基本问题
  • 原文地址:https://www.cnblogs.com/zengtx/p/6664973.html
Copyright © 2011-2022 走看看