流媒体服务器用户层通信方法

文档序号:7970705阅读:146来源:国知局
专利名称:流媒体服务器用户层通信方法
技术领域
本发明涉及一种流媒体服务器发送流媒体数据包的方法,特别是指一种流媒体服务器在用户层直接发送流媒体数据包的方法。
背景技术
随着3G手机、数字电视、IPV6等技术的发展,网络的速度愈来愈快。但在实际应用中,网络上共享的资源内容是关键因素。在这些资源内容中,流媒体是一种非常重要的内容。网络速度的提高和用户的增多,就对流媒体服务器的性能提出了非常高的要求。
但目前的流媒体服务器的性能还不是很高,其性能瓶颈之一就是网络通信性能。目前的流媒体通信用户层协议通常使用实时传输协议,底层的通信协议通常使用UDP/IP协议。但目前的UDP/IP协议通常实现在操作系统的核心层中(如图1所示)。这就大大限制的网络性能的发挥。第一,流媒体应用在发送流媒体数据的时候必须陷入核心发送,时间开销很大。第二,在核心层发送数据,就必然有多次的数据复制,时间开销很大。第三,在核心层发送数据,有着复杂的缓冲区管理,时间开销很大。这些时间开销很大的操作,占用了流媒体服务器处理器的大部分处理时间,再加上流媒体请求的调度时间和数据读写时间,就使得流媒体服务器不能够充分的利用网络带宽。

发明内容
本发明的目的是提供一种高效率的流媒体服务器发送流媒体数据包的方法,解决流媒体服务器的流媒体数据发送端口网络带宽利用率低的问题。
本发明的目的是通过如下的技术方案实现的。
本发明使用用户层通信的方法来发送流媒体数据包。流媒体服务器在用户层处理流媒体数据包,然后,在用户层直接通过操作网络硬件设备发送流媒体数据包,而不经过操作系统的核心层。这种方法就可以克服背景技术中所述的在核心层发送数据包的缺点。第一,流媒体应用在用户层发送流媒体数据的时候,无需陷入核心发送(如图2所示,以UDP/IP用户层实现为例),时间开销小。第二,在用户层发送数据,数据复制次数少,甚至做到0-复制,时间开销小。第三,在用户层发送数据,缓冲区管理简单,时间开销小。
本发明的特征在于所述的流媒体服务器在用户层发送流媒体数据包的具体步骤如下
1、初始化系统在软件方面由网络接口控制器(NIC)驱动程序、核心代理程序和用户代理程序组成(如图3所示)。NIC驱动程序负责NIC硬件设备资源的管理。NIC硬件设备资源包括硬件门铃、发送队列地址寄存器组、接收队列地址寄存器组、发送队列状态寄存器组、接收队列状态寄存器组,等等。硬件门铃是应用程序通知NIC发送和接收数据的途径。发送(接收)队列保存发送(接收)描述子。发送(接收)描述子用来描述发送(接收)任务。描述子中保存发送(接收)任务的各种信息,包括发送(接收)目的地址,数据缓冲区地址,等等。发送(接收)队列地址寄存器用来存储发送(接收)队列地址。发送(接收)队列状态寄存器组用来保存发送(接收)队列的状态,包括完成任务和未完成任务情况,等等。核心代理负责管理数据通信过程中的核心资源。核心资源包括发送队列组状态、接收队列组状态、地址转换表,等等。用户代理用来包装用户层发送和接收等程序接口。应用程序就可以通过这些程序接口来发送(接收)数据,而不需要自行处理数据包。当系统启动时,核心代理首先启动,并注册设备文件。应用程序将使用这些设备文件来映射核心资源和NIC硬件设备资源。NIC驱动程序扫描NIC硬件设备。如果发送硬件设备,则逐一登记,初始化这些设备,并分配发送(接收)队列。然后,NIC驱动程序将向核心代理注册。完成初始化工作后,将等待应用程序发送(接收)数据。流媒体应用程序运行在用户空间中。
2、流媒体应用程序把核心资源和NIC硬件设备资源从核心地址空间映射到用户地址空间;3、流媒体应用程序在用户地址空间任意为流媒体数据包分配发送缓冲区;4、流媒体应用程序把发送缓冲区地址注册到核心空间中,在注册过程中,将把缓冲区的虚拟地址转换成物理(线性)地址;5、流媒体应用程序在用户层根据指定的网络通信协议要求来处理流媒体数据包,把流媒体数据包打包成通信数据包;6、流媒体应用程序根据指定的网络硬件设备要求,分解通信数据包,打包成硬件数据包;7、流媒体应用程序通过映射到用户空间的NIC硬件设备资源之一——发送队列状态寄存器组——来查询发送队列中是否有空闲的发送描述子,如果没有,则等待,如果有,则继续。
8、流媒体应用程序为每一个硬件数据包分配和填写发送队列中的描述子;
9、流媒体应用程序按动门铃,通知网络硬件设备传输发送队列中的数据包;10、流媒体应用程序查询是否把通信数据包全部分解成了硬件数据包,如果是,则继续,如果否,则转到6;11、查询是否把流媒体数据全部打包成了通信数据包,如果是,则结束,如果否,则转到5;12、网络硬件设备处理描述子,并发送其指定的数据包。
前10个步骤由流媒体服务器的处理器来完成,步骤11则是由网络硬件设备完成。步骤11是和前10个步骤并行进行的。
下面实施例的实际测试结果如图8所示,图中所示为延迟时间测试。“uudp”代表实施例实现的用户层通信系统,“kudp”代表操作系统中实现的核心udp实现。可以看出uudp的延迟时间要远远的小于kudp的延迟时间。例如,在16字节的小数据包发送时,uudp的延迟时间为1.4微秒,而kudp的延迟时间为9.3微秒。在9216字节的大数据包发送时,uudp的延迟时间为8.0微秒,而kudp的延迟时间为50.3微秒。
可以看出,本发明的提升效果相当显著。


图1传统流媒体服务器通信结构说明图。
图2本发明流媒体服务器通信结构说明图。
图3本发明流媒体服务器通信结构实施图。
图4实施例中地址映射关系图SDQ发送描述子队列,ATPT地址转换表;DB门铃;D描述子;P端口;NIC网络接口控制器。
图5实施例中地址注册关系图VAddr虚拟地址;PAddr物理地址;Ptag保护标签;Flag标志。
图6实施例详细流程图。
图7描述子说明图。
图8实施例的实际测试结果图。
具体实施例方式以下结合附图及实施例对本发明作进一步的详细说明

图6为本发明一实施例的详细流程图。在该实施例中,数据通信协议使用的是UDP/IP协议,网络硬件设备使用的是以太网网络设备。
1、流媒体应用程序映射核心资源和网络硬件设备资源(如图4所示);核心资源包括发送队列、地址转换表,网络硬件设备资源包括门铃、队列状态寄存器组等等。发送队列由发送描述子组成。发送描述子描述发信息。在本实施例中,由于要发送的是以太网数据包,所以,发送描述子中只需要有数据包地址信息和数据包长度信息就可以了,如图7所示。发送队列由操作系统核心分配,并把队列物理地址告知网络硬件设备。发送队列用于流媒体应用程序和网络硬件设备的信息交换。流媒体应用程序填写发送队列中的描述子。网络硬件设备就可以读取这些描述子。地址转换表用于流媒体应用程序把流媒体数据缓冲区的虚拟地址转换成物理地址,并填写到发送描述子中。门铃用于流媒体应用程序通知网络硬件设备有流媒体数据要发送。队列状态描述结构用于流媒体应用程序查询流媒体数据包的发送状态。
2、流媒体应用程序分配流媒体数据包发送缓冲区;3、流媒体应用程序注册流媒体数据包发送缓冲区(如图5所示);注册流媒体数据包发送缓冲区是为了把缓冲区的虚拟地址转换成物理地址,并填写到地址转换表中。地址转换表被映射到用户空间,可以由流媒体应用程序使用。
4、流媒体应用程序在用户层把流媒体数据打包成UDP数据包,再打包成IP数据包;5、流媒体应用程序把IP包再分解打包成以太网数据包;6、流媒体应用程序查询发送队列中是否有空闲的发送描述子,如果没有,则等待,如果有,则继续。
7、流媒体应用程序为每一个以太网数据包分配和填写发送队列中的描述子;8、流媒体应用程序按动门铃,通知网络硬件设备传输发送队列中的数据包;9、查询是否把IP数据包全部分解成了以太网数据包,如果是,则继续,如果否,则转到5;10、查询是否把流媒体数据全部打包成了UDP/IP数据包,如果是,则结束,如果否,则转到4;11、网络硬件设备处理描述子,并发送其指定的数据包。
前10个步骤由流媒体服务器的处理器来完成,步骤11则是由网络硬件设备完成。步骤11是和前10个步骤并行进行的。
权利要求
1.流媒体服务器用户层通信方法,其特征在于,所述方法在流媒体服务器的用户层按以下步骤实现。步骤(1),初始化在流媒体服务器设置网络接口控制器驱动程序、核心代理程序和用户代理程序,具体网络控制器驱动程序,位于流媒体服务器的核心层,负责包括硬件门铃、发送队列地址寄存器组、接收队列地址寄存器组、发送队列状态寄存器组、接收队列状态寄存器组在内的硬件设备资源的管理,在所述发送或接收队列所保存的发送或接收描述子中含有数据包地址信息和数据包长度信息;核心代理程序,位于流媒体服务器的核心层,负责管理包括发送队列组状态、接收队列组状态和地址转换表在内的数据通信用到的核心资源;用户代理程序,位于流媒体服务器的用户层,包含用于包装用户层在发送和接收信息时所用的程序和程序接口,以供流媒体服务器应用程序发送或接收数据;步骤(2),系统启动启动核心代理程序,并注册用于映射所述核心资源和网络接口控制器硬件设备资源的设备文件;网络接口控制器驱动程序初始化包括发送硬件设备在内的网络接口控制器硬件设备,并任意分配发送和接收队列,然后该驱动程序向所述核心代理程序注册;步骤(3),流媒体应用程序把核心资源和网络接口控制器中的硬件设备资源从核心地址空间映射到用户地址空间;流媒体应用程序通过所述地址转换表把流媒体数据缓冲区的虚拟地址转换成物理地址,并填写到发送描述子中,通过网络接口控制器发往网络硬件设备;网络硬件设备读取这些带有物理地址的发送描述子;步骤(4),运行在用户空间的流媒体应用程序在用户地址空间任意为流媒体数据包分配发送缓冲区;步骤(5),流媒体应用程序把发送缓冲区地址注册到核心空间,把缓冲区的虚拟地址转换为物理地址,并填写到地址转换表中;步骤(6),流媒体应用程序在用户层先根据指定的网络通信协议要求处理流媒体数据包,再把流媒体数据包打包成通信数据包;步骤(7),流媒体应用程序根据指定的网络硬件设备要求,分解所述通信数据包,打包成硬件数据包;步骤(8),流媒体应用程序通过已映射的用户空间的发送队列状态寄存器组来查询发送队列中是否有空闲的发送描述子,若没有,则等待,若有,则执行下一步骤;步骤(9),流媒体应用程序为每一个硬件数据包分配和填写所述发送队列中的描述子;步骤(10),流媒体应用程序按动硬件门铃,通知网络硬件设备传输所述发送队列中的硬件数据包;步骤(11),流媒体应用程序查询是否把通信数据包全部分解成了硬件数据包,如果否,则转步骤(7),如果是,则转下一步骤;步骤(12),流媒体应用程序查询是否把流媒体数据包全部打包成了通信数据包,如果否,则转步骤(6),如果是,则停止。
全文摘要
一种流媒体服务器对外服务端口的用户层通信方法,属于流媒体通信技术领域,其特征在于,流媒体应用程序在用户层根据流媒体协议和网络通信协议处理流媒体数据包,最终把流媒体数据包处理成网络硬件设备可以直接识别的数据包格式,然后,流媒体应用程序把这些流媒体数据包填写到一定发送队列中,并在用户层直接操作网络硬件设备,通知网络硬件设备把流媒体数据包发送到网络上。从而,减少了流媒体服务器处理器大量的处理时间,充分的利用了流媒体服务器的处理器能力。
文档编号H04L29/08GK1972192SQ20061014428
公开日2007年5月30日 申请日期2006年12月1日 优先权日2006年12月1日
发明者朱子玉 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1