Clone
20
v1_CN_RaspberryPi
winlin edited this page 2022-01-06 11:57:15 +08:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

HOME > CN > RaspberryPi

Performance benchmark for SRS on RaspberryPi

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

Install SRS

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

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

RaspberryPi

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

  • RaspberryPiB型
  • 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卡所以可以忽略不计用的是class24GB的卡。

软件环境如下:

  • RaspberryPi提供的img2014-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
  • 重启srssudo /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.200kbps.768x320.flv \
        -acodec copy -vcodec copy \
        -f flv -y rtmp://192.168.1.105:1935/live/livestream; \
    sleep 1; 
done

* 查看服务器的地址:`192.168.1.105`

```bash
[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 
  • 数据见下表:
Server CPU Mem Conn E带宽 A带宽 sb 延迟
SRS 1.0% 3MB 3 不适用 不适用 不适用 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秒以上并记录数据
Server CPU Mem Conn E带宽 A带宽 sb 延迟
SRS 17% 1.4MB 11 2.53Mbps 2.6Mbps 1.3% 1.7秒
  • 再启动一个模拟10个连接的srs-bench共20个连接。
  • 客户端开始播放30秒以上并记录数据
Server CPU Mem Conn E带宽 A带宽 sb 延迟
SRS 23% 2MB 21 4.83Mbps 5.5Mbps 2.3% 1.5秒
  • 再启动一个模拟10个连接的srs-bench共30个连接。
  • 客户端开始播放30秒以上并记录数据
Server CPU Mem Conn E带宽 A带宽 sb 延迟
SRS 50% 4MB 31 7.1Mbps 8Mbps 4% 2秒

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

Server CPU Mem Conn E带宽 A带宽 sb 延迟
SRS 17% 1.4MB 11 2.53Mbps 2.6Mbps 1.3% 1.7秒
SRS 23% 2MB 21 4.83Mbps 5.5Mbps 2.3% 1.5秒
SRS 50% 4MB 31 7.1Mbps 8Mbps 4% 2秒

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

Benchmark SRS 0.9.72

一次性能测试记录:

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

数据如下:

Server CPU Mem Conn E带宽 A带宽 sb 延迟
SRS 5% 2MB 2 1Mbps 1.2Mbps 0% 1.5秒
SRS 20% 2MB 12 6.9Mbps 6.6Mbps 2.8% 2秒
SRS 36% 2.4MB 22 12.7Mbps 12.9Mbps 2.3% 2.5秒
SRS 47% 3.1MB 32 18.5Mbps 18.5Mbps 5% 2.0秒
SRS 62% 3.4MB 42 24.3Mbps 25.7Mbps 9.3% 3.4秒
SRS 85% 3.7MB 52 30.2Mbps 30.7Mbps 13.6% 3.5秒

cubieboard benchmark

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

Winlin 2014.3