范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

SRS5优化如何将DVR性能提升一倍

  前言
  SRS支持将直播录制为VoD文件,在压测时,如果流路数很多,会出现CPU消耗很多的问题。
  原因是写入较小视频包时,SRS使用了write,由于没有缓冲能力,导致频繁的系统调用和磁盘繁忙。
  优化方案,可以选择fwrite(v5.0.133+),或者老版本用内存盘方案,可将DVR性能提升一倍以上。 环境
  SRS服务器配置如下: • CPU:INTEL Xeon 4110 双路16和32线程 • 内存:32G • 网卡:10Gb • 磁盘:两块980G的SSD盘做成RAID0(可用空间共1.8T) • 操作系统:CentOS 7.6。 • 流码率:3Mbps
  这里需要说明一下,采用SSD盘主要是为了确保磁盘性能足够,以确保能够支撑大的并发压力,从而在大并发压测的情况下观察系统性能情况,如果本身磁盘I/O性能比较低下,大量的I/O等待可能导致观察不到CPU瓶颈的现象。
  另外,在我的测试环境中,SRS经过了多进程改造,能够支持推流进来后自动将不同的流均衡到不同的SRS进程上面,从而能够充分利用服务器多核的能力,但是由此得出的结论同样适合于单进程SRS。
  SRS开启DVR录存功能,使用如下命令启动SRS: env SRS_LISTEN=1935 SRS_MAX_CONNECTIONS=3000 SRS_DAEMON=off SRS_SRS_LOG_TANK=console      SRS_HTTP_API_ENABLED=on SRS_VHOST_DVR_ENABLED=on ./objs/srs -e
  压测工具,用srs_bench套件中的sb_rtmp_publish模拟推流客户端进行大并发量推流模拟,一台机器压测能力不够可以开启多台机器进行压测。 ./objs/sb_rtmp_publish  -i doc/source.200kbps.768x320.flv      -c 100 -r rtmp://127.0.0.1:1935/live/livestream_{i}
  启动srs后,用压测工具进行压测,观察测试过程中的CPU、网络IO、磁盘IO相关数据,并进行对比。 写入SSD Disk
  SRS优化前,默认的方式就是使用write方法,直接写入磁盘。测试能支持1000路写入,CPU跑满。
  从上图可以看到,1000路3M的DVR录制已经将系统的CPU都跑满了,特别需要关注的是cpu的时间主要消耗在了内核空间上面,占了87.5%。
  用nload查看当时的输入带宽情况,发现系统输入带宽平均只有2.17Gb,没有达到预期的3Gb的带宽,应该是CPU负载过高导致SRS来不及处理网络I/O引起的性能下降。
  再用perf工具对其中一个srs 进程进行性能采样分析,得到下面的火焰图:
  可以发现,sys_write操作占用的时间消耗是最多的,对比上面用top看到的内核态消耗的时长占比可以得出的结论是一致的。
  最后看磁盘I/O情况:
  从上图看磁盘的利用率没有到100%,虽然有一定的波动,但是总体上还是在合理的可以接受的性能范围内。 fwrite SSD Disk
  SRS优化后,使用fwrite写入磁盘。录制1000路流,占用32%的CPU,性能提升一倍以上。
  从上图可以看到,1000路3M的DVR录制已经将系统的CPU整体来说还有很多空闲(这里说明一下,部分进程的SRS占比高的原因是因为当时任务分配的不够均衡引起的)。特别值得注意的是本次测试内核时间占比大幅下降,只有9.1%。
  再用nload看网络i/o情况,网络i/o相当平稳,和预期的3Gb完全吻合。
  再看磁盘i/o的情况,磁盘的利用率没有到100%,虽然有一定的波动,但是总体上还是在合理的可以接受的性能范围内。
  最后看火焰图:
  系统调用的时间占比大幅度缩短了,在上图几乎找不到sys_write的位置了。
  C++音视频学习资料免费获取方法:关注音视频开发T哥  ,点击正在跳转即可免费获取2023年最新 C++音视频开发进阶独家免费学习大礼包!
  write Memory Disk
  SRS优化前,也可以挂载内存盘,使用write写入内存盘。
  需要说明一下,由于我手上的服务器只有32G内存,只能分配16G内存给内存盘使用, 由于内存盘比较小,按照3Gb的写入速度,最多能写42s的DVR。
  采用如下命令挂载内存盘: mount -t tmpfs -o size=16G,mode=0755 tmpfs /data/memdisk
  并且修改srs的配置文件将文件写入到内存盘: env SRS_LISTEN=1935 SRS_MAX_CONNECTIONS=3000 SRS_DAEMON=off SRS_SRS_LOG_TANK=console      SRS_VHOST_DVR_DVR_PATH=/data/memdisk/[app]/[stream].[timestamp].flv      SRS_HTTP_API_ENABLED=on SRS_VHOST_DVR_ENABLED=on ./objs/srs -e
  测试数据如下,占用CPU27%左右:
  从CPU的情况看,采用内存盘也比较理想,load average只有 7.5,性能也不错。如果不需要录制大量的流,这种方式也是非常好的。 macOS 测试数据
  在macOS环境下,也做了一组数据,供参考: 1. macOS: MacBook Pro, 16-inch, 2019, 12CPU(2.6 GHz 6-Core Intel Core i7), 16GB memory(16 GB 2667 MHz DDR4). 2. v5.0.132优化前: RTMP to HLS,  200 streams , SRS  CPU 87%, 740MB 3. v5.0.133优化后: RTMP to HLS,  200 streams , SRS  CPU 56%, 618MB 4. v5.0.132优化前: DVR RTMP to FLV,  500 streams , SRS  CPU 83%, 759MB 5. v5.0.133优化后: DVR RTMP to FLV,  500 streams , SRS  CPU 35%, 912MB 6. v5.0.133优化后: DVR RTMP to FLV,  1200 streams , SRS  CPU 79%, 1590MB 结论
  从以上4个测试可以得出以下结论: 1. 无论ssd盘还是内存盘,采用fwrite的性能比采用write的性能有明显的提升,其主要得益于fwrite内置的缓存功能减少了系统调用的数量,带来内核时间消耗的减少,从而提升了性能。 2. 在ssd盘情况下,fwrite的缓冲能力可以大幅度降低对于CPU的消耗,但是在采用内存盘的情况下,CPU的消耗虽然也能够降低,但是不是那么明显。 3. 录制到内存盘性能也很好,如果流路数不多也可以考虑这种方案。 Note: 之前想当然地认为用write写内存盘,因为系统调用引起的用户态到核心态的切换还是会导致cpu大量消耗,一样会导致CPU消耗高居不下,但是事实看到是采用内存盘以后cpu消耗明显下降了,是不是可以认为系统调用引起的用户态到核心态的切换消耗实际上并没有想象的那么大,而是内核态在处理小块的文件write写入磁盘的时候还存在着其他因素引起消耗大量的cpu。
  譬如,因为最终写入磁盘都是按照扇区写入的,而小块写入需要操作系统将这个小块对齐并填充到一个完整的磁盘扇区,从而引起性能大幅下降,而内存盘是不是就不会存在这个问题?
  由于我自己没有内核方面的经验,所以只能存疑了,也请懂内核的朋友给予指点。 接下来该怎么办?
  在linux环境中,对于文件进行读写操作的时候,我们可以采用libc提供的fread/fwrite系列的一套函数,也可以采用操作系统提供的read/write系列的一套系统api函数。
  对于libc提供的文件读写函数,首先它可移植性比较好,因为libc为我们屏蔽了操作系统的底层差异,在linux、windows等不同的操作系统环境下面都有标准的接口实现,因此不需要我们为不同的操作系统进行适配。
  其次,libc提供了带缓冲功能的读写能力,而操作系统底层文件读写API却不提供这种能力,缓冲能力在大多数情况下能够为我们带来文件i/o性能的提升。
  当然libc的文件读写api函数也存在不足之处,缺少了writev/readv之类的函数。不过readv/writev的功能无非就是将多个缓冲区的内容合并成一次批量读写操作,而不需要进行多次API调用,从而减少实际物理I/O的次数,我想libc没有提供这类函数主要也是因为其缓冲功能已经能够将本来需要多次的小块物理I/O操作合并成了一次更大块的物理i/o操作,所以就没有必要再提供readv/writev了。
  不管SRS也好,还是NGINX也好,虽然前者采用st-thread框架的协程能力来实现网络异步i/o,但是和后者一样,最终还是采用epoll事件循环来实现网络异步i/o的,但是对于文件i/o,目前存在的问题是,无论是write还是fwrite都是同步操作,在磁盘请求比较繁忙的情况下,必然会导致进程或者线程阻塞,从而引起系统并发性能的下降。
  由于操作系统本身不支持epoll异步(linux下的ext4本身没有实现poll的回调),所以寄希望于epoll来实现文件i/o的异步操作是行不通的。NGINX对于文件异步i/o采用了aio+多线程的方式来实现的,个人感觉是由于和epoll模型来说是一套独立的框架,还是相对比较复杂。
  不过,好在linux在5.1内核以后提供了io_uring的异步i/o框架,它可以统一网络i/o和磁盘i/o的异步模型,并支持buffer IO,值得我们去关注学习一下,也值得我们后面一起去探讨一下未来如何在srs上采用io_uring来实现带有fwrite一样的缓冲能力的磁盘i/o的操作,来彻底解决磁盘i/o引起的性能瓶颈的问题。 作者:王磊
  原文链接:https://mp.weixin.qq.com/s?__biz=MzA4NTQ3MzQ5OA==&mid=2649005701&idx=1&sn=85df053c78dda929d92f8285c8fe65ce&chksm=87c75f30b0b0d6263f5d94d4569fa256105238aa1bc23b7ff323fa4625bb9f249d1437ce42fb&mpshare=1&scene=23&srcid=0217zlNwQFfuGuWLk8CIcCX7&sharer_sharetime=1676614132224&sharer_shareid=a96e9b09ebf11547090dd99009e597bb#rd
  #音视频开发##流媒体##把地球的故事讲给宇宙##程序员#

万国怎么选?这三大热门,闭眼买,不出错腕表之家腕表说万国在国内有三大热门,分别是飞行员计时葡萄牙计时柏涛菲诺计时。这3只万国计时表,自打2000年之后,名表在国内开始流行,就进入到玩家中广泛流通,就是万国在国内接受度最冷酷女生应该穿什么香水会更飒?其实女生在很多时候会选择穿男香,比如说蔚蓝大吉岭茶大地等或者是一些檀木香,确实很多女生穿男香给人的感觉都非常酷。但是今天我们不说男香,推荐几支你喷了之后不仅男生觉得你很酷女士也会觉心烦睡不着时,看看这三句话,帮你静心文泠泠人这辈子,做人真难,难在生活,难在如何跟人打交道,难在没有支持,没有人理解。世界上最难以直视的两样东西,一个是太阳,一个是人心。有时候,你掏心掏肺对一个人,却得不到真心相待。七言诗征途征途漫漫未清明,风雨雪霜坎坷行。时明明暗月缺圆,海浪翻滚湖水平。心有目标和理想,奋斗不停迎逆风。功夫不负有心人,千曲万折见丽景。少年追梦离乡井,坎坷征途迎风霜。独身孤影驾浪舟,勇闯转身不是逃避,再一次出发人生中最低谷时安慰自己的一句话是什么心在深渊,人就会在低谷。说起来,人生有没有低谷,不是别人判断的,都是自己的认知定位,如果你每一个细胞都时时快乐,你就时时在山巅,这无关物质有多丰美元兑日元如我中线规划下跌来到预期价位,后续走势怎么看?早在1月6号当天在我的个人朋友圈分享了对美元兑日元的中线规划看法,以下是附图开始对美元兑日元的看法下面是当天的规划图,分享了俩种波浪理论的看法第一种规划走ABC浪的C浪延伸浪也就是年,越来越近了!年,越来越近了!作者丨仲秋来源丨木兰书香(IDzhongqiu1964)一天有多远,晨昏之间一年有多远,冷暖之间一生有多远,无常之间。天地更迭有序,有风花雪月,就有日升月残岁月辗转赏读前世千百次的回眸,换取今生的重逢作者夕霞映雪穿越千年烟雨,于朦胧中,又见你隔世离空的笑靥,那般灿烂,那般温暖,荡起心中柔情几缕,涟漪几许。梦回前尘,隔着万里层云,千山暮雪,恍惚间,于雪山之巅,又现盛开的白莲,仿若年味浓!红的黄的白的,团在一起,吃了米花就团圆!糯米团团火烧龙船您知道这首童谣里唱的糯米团团是什么吗?在晋宁回龙村,糯米团团就是米花团。当家家户户开始制作米花团时,就意味着年来了。米花团里有年味吃了米花就团圆回龙村委米花团制作村顺昌之战以五千步卒硬撼金国十万大军,成就悍将刘锜的不世威名绍兴九年(1139)正月,南宋都城临安正准备就寝的宋高宗赵构,突然接到了一个令人不安的消息北方强敌金国内部发生政变,以好战闻名的完颜宗弼(兀术)取代主和派的完颜昌,掌握了女真的军政中国新能源重卡第一品牌力压东风汉马徐工,年销量达4196辆过去一年,中国重卡市场累计销售67。2万辆,同比缩减52,主流企业累计同比均呈现较大幅度的下滑,可谓降声一片。不过值得注意的是,新能源重卡市场却是喜获丰收,成为行业的一抹红。根据第
11月2日,甘肃059国家卫健委11月2日新增本土确诊病例531例11月2日024时,31个省(自治区直辖市)和新疆生产建设兵团报告新增确诊病例581例。其中境外输入病例50例(福建20例,广东12例,散文丨凌鹰风雅风雅文凌鹰一hr一个个巨大的背影就在时光的尽头若隐若现地接近池州,进入池州,融入池州。这些突然闯入池州的背影,这些刻意进驻池州的背影,这些被迫流放池州的背影,这些带着种种可能性和种牛肉是结节催化剂?提醒若不想结节恶化,尽量少吃4种食物导语我们现如今的生活当中大家都越来越重视健康了,很多人每年都会进行体检,但是体检报告一拿到手总会有人感觉自己又中枪了,而在这其中体检单上出现最频繁的一个词语,那就是结节,很多人对这拔罐真的可以排毒吗?拔出的水泡真的是体内的毒素吗?拔罐是利用火的燃烧和抽去罐内空气等方法使罐体产生负压而使身体表面局部产生淤血,最终达到活络通经行气活血祛风散寒等作用的一种中医的非药物疗法。无论罐体的材质是陶制玻璃制还是竹制,原理早晨起床后喝第一杯温水,等于喝细菌?医生揭秘,又涨知识了相信很多人早上起床后都有一种感觉嘴里发苦并且口干口渴,多数人都会立即拿起水杯喝一杯温开水,满足身体的需求。早上起床之后喝水对身体是有好处的,因为人体经过一整夜的代谢,身体处于缺乏水评论丨十年家国十年心,国人精神图谱如何扣系时代巨变邓紫璇(湖南女子学院)十年心可鉴,家国运相连。每一个人都是新时代的见证者开创者建设者,这是湖南广电打造的百集人物微纪录片十年家国十年心,润物细无声般传递给我们的理念。这是值得这个时尊重历史,抢救文化山东省淄博市周村老街,是中国北方历史上有名的古商业街,有金周村之称,商品俱全,是北方最大的商品生产批发中心,经济中心,发展起来很多富裕商户。这些商户在公私合营土地改革后,为了逃避成费尔干纳是乌兹别克斯坦的河南,保留了纯正的乌国文化全球之旅我在乌兹别克斯坦大家好,我是申典启,一个实地走访世界各地,关注全球华人的旅行者。在乌国最大城市塔什干,我没有找到正宗的抓饭。要吃正宗的乌兹别克斯坦美食,一定要去费尔干纳。因精神益生菌多吃发酵食品和富含纤维素食物可显著降压爱尔兰APC微生物组研究所团队成员在最新一期分子精神病学上发表论文称,人们的饮食也可能是应对压力的有效方法他们的最新研究表明,在短短4周内每天多吃发酵食品和富含纤维素的食物,对降低这些桥梁,以英雄的名字命名近日,有网友晒出G219新藏线的一组图片红军桥思远桥祥榕桥焯冉桥逝去的英雄化身为G219新藏线上的桥梁之名守卫着祖国的边疆在英雄倒下的地方一个个路标铭记着他们的冲锋一座座烈士桥回望15款帅气男发,精神时尚很百变,你要不要试试最近窝在家里没什么事,就为大家精选了15款帅气男发,精神时尚百变,你要不要试试呢?男士发型虽然不如女发的款式那么多,但是现如今男发的款式也不少,并且都很有型,就好比今天这15款,不