rtsp服务器性能测试工具,RTSP性能优化 · ZLMediaKit/ZLMediaKit Wiki · GitHub

提示

最新的性能参数,请参考 #406

GB28181的推流性能测试,请参考:#961

概述

在最近ZLMediaKit的一次提交中,我对rtsp服务器的性能做了一次改进,本次改进中,核心的思想是:

缓存时间戳相同的RTP包(意味着是同一帧数据),作为一个数据包进行分发。

理论上,这样做可以大大减少多线程分发时线程切换次数、多余发送逻辑代码的执行以及系统调用次数,预期在不增加播放延时的情况下能大幅提高rtsp服务器的性能.

测试

为了验证本次优化的预期目标,我在linux服务器上做了一系列的测试对比,以下是测试环境:

操作系统:ubuntu16 desktop 64bit

cpu: 4核心的Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz

编译器:gcc 5.4.0,开启Release编译(cmake -DCMAKE_BUILD_TYPE=Release)

malloc库:连接jemalloc

网络: 127.0.0.1本地循环网络

测试码流:4K H264的RTSP流,通过MP4 Rtsp点播实现,文件200秒,190MB,码流大概8Mb/s

测试方法:通过test_benchmark播放500路RTSP 4K点播,总码流大概4Gb/s,分别测试新老版本的MediaServer的进程。

测试数据

启动的播放器个数:

9182f122b360c6a23bb8e97eef6028d8.png

实时码流:

e7a2303215f201fd6dc295f0fcb9761c.png

性能对比

老版本数据

cpu使用率(浮动比较大,最高200%+):

c8d42e705805b38403e4728539c05459.png

8da9dc01c6a5f15858b8499c321542cc.png

性能分析(perf top):

835b658b57ccdcb1c691109f042880c0.png

总结 : cpu占用主要发生在内核态的系统调用(syscall)、tcp_sendmsg、内存拷贝。

新版本数据:

cpu使用率(浮动比较小,50%以下):

098ca167efd362ea6c35b78036c61180.png

a8bcddae6c6bce3152036c8e894b508b.png

后面我又测试了2000个播放器,掉了一批,最后稳定在1800个左右,实时流量17.5Gb/s(单向)左右,cpu占用300%左右:

6871d2101b171cacf57c433c57cac4bb.png

6328ea061df2f4e51502fcc6ed585d6b.png

463e9cee7c1fe139f57c7dc41641dfc6.png

7714b3dcb88593f4ae5962fec81ec585.png

性能分析(perf top):

f64bf4bfcd956fd829fe4d74af163c84.png

总结 : cpu占用主要发生在内核态内存拷贝,系统调用(syscall)、tcp_sendmsg的开销很小。

总结

本次性能测试基本证明了预想,性能提升大概有4倍以上。

本机器为i7-4790 4核心8线程的,所以cpu占用率最高为800%,现在ZLMediaKit在上面支撑500个4K RTSP播放器,实时流量大概4Gb/s时cpu使用率50%不到,通过简单换算,该cpu可以支撑大概8000个4K RTSP播放器,实时流量最高能达到64Gb/s,考虑到性能折损,我们保守估计可以支持6000个4K RTSP播放器,50Gb/s的流量。

最后

在ZLMediaKit流媒体服务器中,通过智能指针引用计数的方式实现了多线程的数据分发,不管分发多少次,数据拷贝次数都是固定的,所以ZLMediaKit可以达到如此夸张的性能参数,但是在测试中,我们也能发现,性能占用已经大部分发生在内核态了,应用层的cpu占用反而不是瓶颈了。这是因为在内核态,写socket缓存需要做内存拷贝,随着播放器个数的增加,内存拷贝会越来越多,此时性能瓶颈不再是应用层,而是由于内存带宽瓶颈导致的内核性能瓶颈。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值