基于XDP技术的高性能rtp媒体转发服务程序

news/2024/11/19 23:39:31/

在软交换中,经常有公网转发音频、视频媒体的需求,开源软件有rtpproxy、rtpengine之类,但性能并不是太好,经常有人说跑音、视频几百路就把机器CPU跑满了。

以前写过一篇“跨平台、高性能的媒体转发服务器实现”,本质上是sip软交换B2B服务器,那篇文章对于媒体rtp的转发使用的还是epoll,性能还算马马虎虎,大体上和rtpproxy、rtpengine是一类水平。

Linux有个较新的技术,叫XDP,也叫eBpf,允许我们写一个内核级别的模块,将其绑定到网卡上,数据包还没上达协议栈之前就可以被我们的内模块进行处理:或者丢弃,或者转发,或者放行——正常上达协议栈。XDP是比较新的、热门的技术,很多大厂用它来实现防火墙、负载均衡等,我用它来实现 RTP数据的转发,可谓xdp最佳应用。

xdp内核模块如此早就对数据包进行处理,相当于驱动层或者至少是内核层级别的速度,性能相当优异,经测试比起普通的应用层转发,有10到30倍以上的性能提升,而且转发速度飞快,几乎没有延时。

下面简单说一下要点:

1、对 Linux内核有要求,太老的内核是不能支持 XDP的。我的环境是 CentOS 7,但内核升级到5.4.232。

2、需要安装 libBpf,开发环境需要安装最新的 clang、llvm,运行环境则不需要。

3、写好内核模块后,我在虚拟机上测试,按默认安装为xdpdrv,不能通过,一开始以为是校验和计算不对,深入调试后,发现改为xdpgeneric模式附加到网卡就可以。在客户的云服务器上,安装为 xdpdrv模式一切正常。

4、如前所述,将 rtp数据包用 XDP模块转发后,数据包无法上传到操作系统的协议栈——这正是它高效的原因,带来的问题是无法用tcpdump抓包,如果要使用普通的抓包录音软件,是没办法录到的。解决方法是在xdp和用户层程序进行通信,xdp内核模块在转发之前将数据提交给我们的程序,程序将rtp包写入wav文件,这里很多细节,有一定的复杂度。

经测试3000路rtp媒体转发(使用g711u音频),如果不录音,系统cpu没有上升,仅仅信令处理占用cpu在9%以下。如果录音,应用层增加的cpu也很小,几个百分点而已。

对XDP、eBpf、音频视频媒体转发技术感兴趣的,欢迎讨论。程序可以试用,欢迎压力测试。


http://www.ppmy.cn/news/500991.html

相关文章

基于SpringCloud微服务FTP客户端设计

一、引言 21世纪是信息化时代,是多媒体的时代,网络技术快速发展,推动了世界范围的信息传输和信息交流。人与人之间共享文件越来越频繁,随着科技质量的提高,文件变的相比较而言比以前大了不少,这时人们对文件处理需求就会有很大要求。我们可以通过邮件来传输,或者通过U盘…

three.js几何体的_UV_、法向属性以及BufferGeometry类介绍

一、几何体的_UV_以及法向属性 UV属性是一组二维坐标,每个顶点都有一个对应的UV坐标。在三维模型上贴上二维的纹理贴图时,需要将所有顶点映射到纹理上的对应位置。UV属性的取值范围一般是[0,1],表示纹理上的相对位置。通过修改UV属性&#xf…

提升项目经理能力,有什么方法?

一,项目管理是职场的基础能力 他思考了一会,和我说:项目经理这个职业,同事专业性强,薪酬稳定,福利优越。只要有几年的项目管理经验,也能生存无忧。 但是,如果你不满足于只做一个普…

时间序列中的无监督表示学习

自监督学习中,有一个常用的方法是对比学习; 2.  时间序列的表示学习 1.1 采用对比学习的方式 Time-series representation learning via temporal and contextual contrasting(IJCAI’21) 本文采用对比学习的方式进行时间序列表示学习。首先对于同一…

中望3d快捷键命令大全_中望3D快捷键设置

三维CAD软件大都是通过鼠标点击来完成工作,然而作为一名长期坐在电脑旁使用三维软件来工作的人,如果长期使用单手工作是不利于健康的,且工作效率也比使用双手配合工作的人低。此时,我们可以通过在三维CAD中设置快捷键的方式来减少…

3DMAX部分快捷键

F3 线框覆盖 F4 边面 Z 选择物体单独最大化显示,没有选择物体时则是场景中所有物体最大化显示 Alt 鼠标中键 环绕操作 Alt W 最大化视图切换 Ctrl N 数值表达求值器 Q 选择物体 Ctrl 加选 Alt 减选 Ctrl I 反选 Ctrl A 全选 Ctrl Z 撤销 W 移动 …

3ds Max,Maya用户转Blender的方案“同快捷键或同操作方案”

目录 系列文章目录 文章目录 前言 一、3ds Max 、Maya用户最快捷加入Blender的方案(插件篇) 1、Blender插件【BsMax】获取地址: 2、Blender快速实现操作习惯的同步(纯属个人经验,仅供参考) 2.1 3ds M…

3Dmax界面及快捷键介绍

3Dmax界面及快捷键介绍 界面介绍视图区文件选项新建、保存和重置导入和导出 视图的基础操作及快捷键正交视图基本几何体几何体操作模式单位 界面介绍 首先看图: 3Dmax的主页面就长成这个样子,以上介绍的几个部分会经常用到,如果没有显示&am…