Skip to main content
版本:7.0 (Unstable) 🚧

Performance benchmark for SRS on RaspberryPi

SRS支持arm,在树莓派上成功运行,本文记录了树莓派的性能指标。

Install SRS

树莓派下安装和运行SRS,有以下方式:

查看SRS是否启动:/etc/init.d/srs status

RaspberryPi

本次测试的硬件环境如下:

  • RaspberryPi:B型
  • SoC BroadcomBCM2835(CPU,GPU,DSP,SDRAM,USB)
  • CPU ARM1176JZF-S(ARM11) 700MHz
  • GPU Broadcom VideoCore IV, OpenGL ES 2.0, 1080p 30 h.264/MPEG-4 AVC decoder
  • RAM 512MByte
  • USB 2 x USB2.0
  • VideoOutput Composite RCA(PAL&NTSC), HDMI(rev 1.3&1.4), raw LCD Panels via DSI 14 HDMI resolution from 40x350 to 1920x1200 plus various PAL and NTSC standards
  • AudioOutput 3.5mm, HDMI
  • Storage SD/MMC/SDIO socket
  • Network 10/100 ethernet
  • Device 8xGPIO, UART, I2C, SPI bus, +3.3V, +5V, ground(nagetive)
  • Power 700mA(3.5W) 5V
  • Size 85.60 x 53.98 mm(3.370 x 2.125 in)
  • OS Debian GNU/linux, Fedora, Arch Linux ARM, RISC OS, XBMC

另外,直播不会用到SD卡,所以可以忽略不计,用的是class2,4GB的卡。

软件环境如下:

  • RaspberryPi提供的img:2014-01-07-wheezy-raspbian.img
  • uname: Linux raspberrypi 3.10.25+ #622 PREEMPT Fri Jan 3 18:41:00 GMT 2014 armv6l GNU/Linux
  • cpu: arm61
  • 服务器: srs 0.9.38
  • 服务器类型: raspberry pi
  • 客户端srs-bench
  • 客户端类型: 虚拟机,CentOS6
  • 观看客户端: PC win7, flash
  • 网络: 百兆交换机(pi只支持百兆)

流信息:

  • 码率:200kbps
  • 分辨率:768x320
  • 音频:30kbps

环境搭建参考:SRS: arm

OS settings

超过1024的连接数测试需要打开linux的限制。且必须以root登录和执行。

  • 设置连接数:ulimit -HSn 10240
  • 查看连接数:
[root@dev6 ~]# ulimit -n
10240
  • 重启srs:sudo /etc/init.d/srs restart

  • 注意:启动服务器前必须确保连接数限制打开。

Publish and Play

可以使用centos虚拟机推流到srs,或者用FMLE推流到raspberry-pi的SRS。假设raspberry-pi服务器的ip是192.168.1.105,请换成你自己的服务器ip。

推送RTMP流到服务器和观看。

  • 启动FFMPEG循环推流:
for((;;)); do \
    ./objs/ffmpeg/bin/ffmpeg \
        -re -i doc/source.flv \
        -acodec copy -vcodec copy \
        -f flv rtmp://192.168.1.105:1935/live/livestream; \
    sleep 1; 
done
  • 查看服务器的地址:192.168.1.105
[root@dev6 nginx-rtmp]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 08:00:27:8A:EC:94  
          inet addr:192.168.1.105  Bcast:192.168.2.255  Mask:255.255.255.0
  • SRS的流地址:rtmp://192.168.1.105:1935/live/livestream
  • 通过srs-players播放SRS流:播放SRS的流

Client

使用linux工具模拟RTMP客户端访问,参考:srs-bench

sb_rtmp_load为RTMP流负载测试工具,单个进程可以模拟1000至3000个客户端。为了避免过高负载,一个进程模拟800个客户端。

  • 编译:./configure && make
  • 启动参数:./objs/sb_rtmp_load -c 800 -r <rtmp_url>

Record Data

测试前,记录SRS的各项资源使用指标,用作对比。

  • 查看服务器端srs消耗的CPU:
pid=`ps aux|grep srs|grep objs|awk '{print $2}'` && top -p $pid
  • 查看客户端srs-bench消耗的CPU:
pid=`ps aux|grep load|grep rtmp|awk '{print $2}'` && top -p $pid
  • 查看客户端连接数命令:
for((;;)); do \
    srs_connections=`sudo netstat -anp|grep 1935|grep ESTABLISHED|wc -l`;  \
    echo "srs_connections: $srs_connections";  \
    sleep 5;  \
done
  • 查看客户端消耗带宽(不影响服务器CPU),其中,单位是bytes,需要乘以8换算成网络用的bits,设置dstat为30秒钟统计一次,数据更准:
[winlin@dev6 ~]$ dstat 30
----total-cpu-usage---- -dsk/total- -net/lo- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  0   0  96   0   0   3|   0     0 |1860B   58k|   0     0 |2996   465 
  0   1  96   0   0   3|   0     0 |1800B   56k|   0     0 |2989   463 
  0   0  97   0   0   2|   0     0 |1500B   46k|   0     0 |2979   461 
  • 数据见下表:
ServerCPUMemConnE带宽A带宽sb延迟
SRS1.0%3MB3不适用不适用不适用0.8秒

期望带宽(E带宽):譬如测试码率为200kbps时,若模拟1000个并发,应该是1000*200kbps=200Mbps带宽。

实际带宽(A带宽):指服务器实际的吞吐率,服务器性能下降时(譬如性能瓶颈),可能达不到期望的带宽,会导致客户端拿不到足够的数据,也就是卡顿的现象。

客户端延迟(延迟):粗略计算即为客户端的缓冲区长度,假设服务器端的缓冲区可以忽略不计。一般RTMP直播播放器的缓冲区设置为0.8秒,由于网络原因,或者服务器性能问题,数据未能及时发送到客户端,就会造成客户端卡(缓冲区空),网络好时将队列中的数据全部给客户端(缓冲区变大)。

srs-bench(srs-bench/sb):指模拟500客户端的srs-bench的平均CPU。一般模拟1000个客户端没有问题,若模拟1000个,则CPU简单除以2。

其中,“不适用”是指还未开始测试带宽,所以未记录数据。

Benchmark SRS 0.9.38

本章测试SRS使用Epoll机制的性能。

开始启动srs-bench模拟客户端并发测试SRS的性能。

树莓派一般10个以内的连接比较常用,所以我们先测试10个链接的情况。加上推流链接实际上11个。

  • 启动10客户端:
./objs/sb_rtmp_load -c 10 -r rtmp://192.168.1.105:1935/live/livestream >/dev/null &
  • 客户端开始播放30秒以上,并记录数据:
ServerCPUMemConnE带宽A带宽sb延迟
SRS17%1.4MB112.53Mbps2.6Mbps1.3%1.7秒
  • 再启动一个模拟10个连接的srs-bench,共20个连接。
  • 客户端开始播放30秒以上,并记录数据:
ServerCPUMemConnE带宽A带宽sb延迟
SRS23%2MB214.83Mbps5.5Mbps2.3%1.5秒
  • 再启动一个模拟10个连接的srs-bench,共30个连接。
  • 客户端开始播放30秒以上,并记录数据:
ServerCPUMemConnE带宽A带宽sb延迟
SRS50%4MB317.1Mbps8Mbps4%2秒

SRS使用epoll时,RaspberryPi B型,230Kbps视频性能测试如下表:

ServerCPUMemConnE带宽A带宽sb延迟
SRS17%1.4MB112.53Mbps2.6Mbps1.3%1.7秒
SRS23%2MB214.83Mbps5.5Mbps2.3%1.5秒
SRS50%4MB317.1Mbps8Mbps4%2秒

可见,RaspberryPi B型,SD卡class4,能支持的并发,SRS使用EPOLL时,码率为230kbps时,大约为xxxx个,网络带宽占用xxxxMbps。

Benchmark SRS 0.9.72

一次性能测试记录:

  • 硬件:raspberry-pi,B型,700MHZCPU,500MB内存,百兆有线网络
  • 编码器:SRS自己采集,视频码率516kbps,音频码率63kbps,数据码率580kbps。时长220秒。avatar宣传片。
  • 服务器:SRS 0.9.72。服务器至少有一个连接:采集程序推流到SRS。
  • 客户端:flash播放器,RTMP协议,srs-bench(RTMP负载测试工具)

数据如下:

ServerCPUMemConnE带宽A带宽sb延迟
SRS5%2MB21Mbps1.2Mbps0%1.5秒
SRS20%2MB126.9Mbps6.6Mbps2.8%2秒
SRS36%2.4MB2212.7Mbps12.9Mbps2.3%2.5秒
SRS47%3.1MB3218.5Mbps18.5Mbps5%2.0秒
SRS62%3.4MB4224.3Mbps25.7Mbps9.3%3.4秒
SRS85%3.7MB5230.2Mbps30.7Mbps13.6%3.5秒

cubieboard benchmark

cubieboard是armv7 CPU,双核,性能比树莓派强很多。初步测试SRS支持300个客户端,占用一个CPU80%,可惜没有多进程;要是有多进程,能支持600个客户端,比较实用了。

Winlin 2014.3