数据包的处理方法、装置及服务器的制造方法

文档序号:8489957阅读:313来源:国知局
数据包的处理方法、装置及服务器的制造方法
【技术领域】
[0001]本发明涉及通信领域,具体而言,涉及一种数据包的处理方法、装置及服务器。
【背景技术】
[0002]在基于Linux操作系统的流媒体服务器应用中,需要对码流进行转发,在这个过程中存在数据码流的接收,接收数据报文占用大量的CPU的资源,提高收包性能直接提高服务器的处理性能。
[0003]图1是根据相关技术的接收数据包的方法的流程图,在相关技术中,对于每一路音频流,都需要使用网络套接字,调用用户数据协议(User Date Protocol,简称为UDP)数据包接收接口,从协议栈接收数据。用户进程每接收一个数据包,就需要使用一次系统调用,每次系统调用需要先从用户态切换到内核态,系统调用返回后,再从内核态切换到用户态。在流媒体服务器负荷较重的情况下,会触发大量的数据拷贝和上下文切换操作,极大地消耗了系统的CPU资源,降低了系统的处理能力。
[0004]由上述流程可见,相关技术中,用户进程接收每个数据包,都需要调用一次系统,使系统接收数据包,从而导致频繁的系统调用,极大的消耗CPU资源,进而降低整个系统的性能,降低整个流媒体服务的质量。
[0005]针对相关技术中用户进程获取数据包时需频繁调用系统而导致的资源消耗大的问题,目如尚未提出有效的解决方案。

【发明内容】

[0006]本发明提供了一种数据包的处理方法、装置及服务器,以至少解决上述问题。
[0007]根据本发明的一个方面,提供了一种数据包的处理方法,包括:协议栈响应批量接收数据包的请求,通过操作系统的内核调试机制接收多个数据包;在所述多个数据包的数量大于预设的批量阈值后,返回所述多个数据包。
[0008]优选地,通过所述操作系统的内核调试机制接收所述多个数据包包括:通过所述操作系统的内核提供的jprobe机制接收所述多个数据包。
[0009]优选地,通过所述操作系统的内核提供的所述jprobe机制接收所述多个数据包包括:利用jprobe的打点方法,在所述协议栈的收包接口中增加批量接收数据包函数;调用所述批量接收数据包函数,接收所述多个数据包。
[0010]优选地,所述协议栈响应所述批量接收数据包的请求包括:所述协议栈响应用户进程的批量接收数据包的请求。
[0011]优选地,在所述多个数据包的数量大于所述预设的批量阈值后,返回所述多个数据包包括:判断内核态的接收队列中接收到的所述多个数据包的数量是否大于所述预设的批量阈值;在所述多个数据包的数量大于所述预设的批量阈值的情况下,将所述内核态的接收队列中的多个数据包拷贝到用户态的数据缓冲区,其中,所述用户态与所述用户进程相应,所述内核态与所述协议栈相应。
[0012]根据本发明的另一个方面,提供了一种数据包的处理装置,位于协议栈上,包括:控制模块,用于响应批量获取数据包的请求,通过操作系统的内核调试机制接收多个数据包;返回模块,用于在所述多个数据包的数量大于预设的批量阈值后,返回所述多个数据包。
[0013]优选地,所述控制模块还用于通过所述操作系统的内核提供的jprobe机制接收所述多个数据包。
[0014]优选地,所述控制模块包括:设置单元,用于利用jprobe的打点方法,在所述协议栈的收包接口中增加批量接收数据包函数;接收单元,用于调用所述批量接收数据包函数,接收所述多个数据包。
[0015]优选地,所述控制模块还用于响应用户进程的批量接收数据包的请求。
[0016]优选地,所述返回模块包括:判断单元,用于判断内核态的接收队列中接收到的所述多个数据包的数量是否大于所述预设的批量阈值;拷贝单元,用于在所述多个数据包的数量大于所述预设的批量阈值的情况下,将所述内核态的接收队列中的多个数据包拷贝到用户态的数据缓冲区,其中,所述用户态与所述用户进程相应,所述内核态与所述协议栈相应。
[0017]根据本发明的又一个方面,提供了一种服务器,包括协议栈,所述协议栈包括上述任一项所述的装置。
[0018]通过本发明,采用协议栈响应批量接收数据包的请求,通过操作系统的内核调试机制接收多个数据包,在多个数据包的数量大于预设的批量阈值后,返回多个数据包,解决了相关技术中协议栈资源消耗大的问题,进而达到了减轻资源消耗的效果。
【附图说明】
[0019]此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0020]图1是根据相关技术的接收数据包的方法的流程图;
[0021]图1a是根据本发明实施例的数据包处理方法的流程图;
[0022]图2是根据本发明实施例的数据包处理装置的结构示意图一;
[0023]图3是根据本发明实施例的数据包处理装置的结构示意图二 ;
[0024]图4是根据本发明实施例的数据包处理装置的结构示意图三;
[0025]图5是根据本发明实施例的服务器的结构示意图;
[0026]图6是根据本发明优选实施例的数据包处理方法一的流程图;以及
[0027]图7是根据本发明优选实施例的数据包处理方法二的流程图。
【具体实施方式】
[0028]下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
[0029]本发明实施例提供了一种数据包的处理方法,图1a是根据本发明实施例的数据包处理方法的流程图,如图1a所示,该方法包括以下步骤:
[0030]步骤S102,协议栈响应批量接收数据包的请求,通过操作系统的内核调试机制接收多个数据包;
[0031]步骤S104,在多个数据包的数量大于预设的批量阈值后,返回多个数据包。
[0032]通过上述步骤,改变了相关技术中用户进程每次接收一个数据包都需要调用操作系统的协议栈一次的做法,解决了相关技术中用户进程获取数据包时需频繁调用系统而导致的资源消耗大的问题,具有减轻资源消耗的有益效果。
[0033]在本发明实施例的一个优选实施方式中,通过操作系统的内核调试机制获取多个数据包的步骤可以包括:通过操作系统的内核提供的jprobe机制接收多个数据包。通过上述步骤可以不修改现有协议栈结构、用户态代码使用标准socket编程的情况下,通过内核提供的jprobe机制实现高效批量收包的方法,即可以有效减少系统调用,提高收包性能,同时有效降低代码的修改量。
[0034]在本发明实施例的一个优选实施方式中,通过所述操作系统的内核提供的所述jprobe机制接收所述多个数据包的步骤可以包括:利用jprobe的打点方法,在协议栈的收包接口中增加批量接收数据包函数;调用批量接收数据包函数,接收多个数据包。通过上述步骤,可以无需修改内核代码,灵活地增加内核处理流程,并且方便快捷、影响较小。
[0035]在本发明实施例的一个优选实施方式中,在多个数据包的数量大于预设的批量阈值后,将多个数据包返回给用户进程的步骤可以包括:协议栈判断内核态的接收队列中接收到的多个数据包的数量是否大于预设的批量阈值,在多个数据包的数量是否大于所述预设的批量阈值的情况下,将内核态的接收队列中的多个数据包拷贝到用户态的数据缓冲区,其中,用户态与用户进程相应,内核态与协议栈相应。通过上述步骤,提高了接收数据包的效率,将内核态、用户态切换的次数降低到1/n,其中,η是接收的数据包的数量。
[0036]在本发明实施例的一个优选实施方式中,该操作系统可以是Linux系统,数据包可以是流媒体数据包。当然,在其他的实施例中,也可能是其他操作系统,比如安卓系统,数据包也可能是其他类型的数据包,比如移动终端的语音通信的数据包。
[0037]在本实施例中还提供了数据包的处理装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。该装置位于协议栈上,图2是根据本发明实施例的数据包处理装置的结构示意图一,如图2所示,该装置包括:
[0038]控制模块22,用于响应批量获取数据包的请求,通过操作系统的内核调试机制接收多个数据包;
[0039]返回模块24,用于在多个数据包的数量大于预设的批量阈值后,返回多个数据包。
[0040]优选地,控制模块22还用于通过操作系统的内核提供的jprobe机制接收多个数据包。
[0041]优选地,如图3所示,控制模块22还可以包括:设置单元222,用于利用jprobe的打点方法,在协议栈的收包接口中增加批量接收数据包函数;接收单元224,用于调用批量接收数据包函数,接收多个数据包。
[0042]优选地,如图4所示,返回模块24还可以包括:判断单元242,用于判断内核态的接收队列中接收到的多个数据包的数量是否大于预
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1