报文接收方法、报文接收模块、装置及系统的制作方法

文档序号:6370452阅读:154来源:国知局
专利名称:报文接收方法、报文接收模块、装置及系统的制作方法
技术领域
本发明涉及计算机通信技术,尤其涉及一种报文接收方法、报文接收模块、装置及系统。
背景技术
直接访问内存(Direct Memory Access, DMA)技术是一种外设与内存之间高速传输数据的方法,外部设备接口卡以DMA方式可以直接访问主机存储器中的数据。DMA传输技术采用两种关键技术,即报文缓冲区描述符维护和中断处理例程。报文缓冲区描述符维护主要用于对描述符以及描述符所指的报文缓冲区的申请和管理;中断处理例程主要涉及缓冲区内报文处理和缓冲区的释放。但是,接收和发送描述符的同步需要软硬件协同维护,需要设置多种寄存器,例如,描述符基地址寄存器、中断寄存器、中断阈值寄存器、描述符数量寄存器和超时寄存器等,不仅处理复杂,而且占用了大量中央处理器(Central Processing Unit, CPU)的开销以及硬件逻辑资源。中断触发机制需要根据设定的阈值向CPU产生中断,若中断次数过于频繁,会造成大量的进程切换开销,影响CPU的工作效率。因此,现有技术中的DMA传输技术存在系统处理效率较低的问题。

发明内容
本发明提供一种用于提高DMA传输技术的处理效率,并减小系统开销的报文接收方法、报文接收模块、装置及系统。本发明的第一个方面是提供一种报文接收方法,包括接收到报文之后,将所述报文与第一描述符队列内的第一描述符中的物理地址和虚拟地址,以及所述第一描述符队列内的第二描述符中的虚拟地址构造为总线报文;其中,所述第一描述符包括内存中当前报文缓冲区的物理地址和虚拟地址;所述第二描述符顺序排列在所述第一描述符之后,包括所述内存中所述当前报文缓冲区后的下一个报文缓冲区的物理地址和虚拟地址;将所述总线报文发送至所述内存中与所述第一描述符中的物理地址对应的所述当前报文缓冲区,以供中央处理器根据所述当前报文缓冲区对应的虚拟地址,读取所述当前报文缓冲区中的报文;清除所述第一描述符中的物理地址和虚拟地址之后,将所述第一描述符队列中的描述符顺序进行移位,以使所述第二描述符中的物理地址和虚拟地址成为更新后的第一描述符中的物理地址和虚拟地址。本发明的另一个方面是提供一种报文接收模块,包括第一接收单元,用于在接收到报文之后,将所述报文与第一描述符队列内的第一描述符中的物理地址和虚拟地址,以及所述第一描述符队列内的第二描述符中的虚拟地址构造为总线报文;、
其中,所述第一描述符包括内存中当前报文缓冲区的物理地址和虚拟地址;所述第二描述符顺序排列在所述第一描述符之后,包括所述内存中所述当前报文缓冲区后的下一个报文缓冲区的物理地址和虚拟地址;第一发送单元,用于将所述总线报文发送至所述内存中与所述第一描述符中的物理地址对应的所述当前报文缓冲区,以供中央处理器根据所述当前报文缓冲区对应的虚拟地址,读取所述当前报文缓冲区中的报文;第一处理单元,用于在清除所述第一描述符中的物理地址和虚拟地址之后,将所述第一描述符队列中的描述符顺序进行移位,以使所述第二描述符中的物理地址和虚拟地址成为更新后的第一描述符中的物理地址和虚拟地址。
本发明的又一个方面是提供一种网络接口卡,包括上述报文接收模块。本发明还提供了一种报文接收系统,包括上述网络接口卡、内存和中央处理器。本发明提供的报文接收方法、报文接收模块、装置及系统,通过将接收到的报文构造为包括内存中当前报文缓冲区的描述符和下一报文缓冲区的描述符的总线报文,使得CPU从内存中读取当前报文缓冲区的报文时能够获知下一报文缓冲区的虚拟地址,从而能够通过轮询的方式顺序读取报文缓冲区中的内容,不需要使用多种寄存器进行配合,也不需要向CPU产生中断,有效地提高了系统的处理效率,减小了系统开销。


图I为本发明报文接收方法一实施例的流程图;图2为本发明实施例内存中报文缓冲区格式的示意图;图3为本发明报文接收方法另一实施例的流程图;图4为本发明实施例报文接收模块接收报文的流程图;图5为本发明实施例中央处理器接收报文的流程图;图6为本发明报文接收模块实施例的结构示意图;图7为本发明报文接收系统实施例的结构示意图;图8为本发明实施例报文接收系统的一种系统结构。
具体实施例方式本发明各实施例中的技术方案,是对主机内存从DMA控制器接收报文的方法进行的改进。DMA控制器采用DMA技术实现与主机内存之间的报文收发,其中,DMA控制器包括DMA发送引擎和DMA接收引擎。DMA发送引擎用于将主机内存中的报文发送至外置设备或者网络设备等;DMA接收引擎用于将从外置设备或网络设备接收到的报文发送至主机内存。本发明各实施例中的报文接收模块包括DMA接收引擎和相关的功能模块,即在以下各实施例中的报文接收模块具有DMA接收引擎的功能以及相关的控制和处理功能;主机内存在以下各实施例中还被简称为内存;中央处理器在以下各实施例中还被简称为CPU。图I为本发明报文接收方法一实施例的流程图,如图I所示,该方法包括步骤101、接收到报文之后,将所述报文与第一描述符队列内的第一描述符中的物理地址和虚拟地址,以及所述第一描述符队列内的第二描述符中的虚拟地址构造为总线报文。
其中,所述第一描述符包括内存中当前报文缓冲区的物理地址和虚拟地址;所述第二描述符顺序排列在所述第一描述符之后,包括所述内存中所述当前报文缓冲区后的下一个报文缓冲区的物理地址和虚拟地址。报文接收模块从外置设备或者网络设备接收到报文之后,需要将接收到的报文构造为总线报文,该总线报文包括描述符域和报文域。
具体的构造方法为,从该报文接收模块中存储的第一描述符队列中读取第一描述符和第二描述符,将第一描述符中的物理地址和虚拟地址,第二描述符中的虚拟地址,以及控制信息与接收到的报文构造为总线报文。其中,第一描述符中的物理地址和虚拟地址,第二描述符中的虚拟地址和控制信息存储在总线报文的描述符域中,接收到的报文存储在总线报文的报文域中。总线报文中所包含信息的顺序由报文接收模块和预先存储在CPU中的软件程序进行控制,根据通信双方的协议进行构造即可。其中,报文接收模块中存储的第一描述符队列,包括至少两个顺序排列的描述符,每个描述符均包括一个物理地址和一个虚拟地址,并且同一个描述符中物理地址和虚拟地址对应着内存中的同一存储空间。区别在于,物理地址是内存中存储报文的存储空间的实际地址,用于供其他装置或模块根据该物理地址将报文写入内存中对应的存储空间中,当CPU需要读取内存中该存储空间的报文时,则需要根据虚拟地址访问该存储空间,物理地址和虚拟地址指向的是内存中的同一存储空间。由于第一描述符队列中的描述符是顺序排列的,因此将其中位于队列起始位置的描述符定义为第一描述符,将顺序排列在第一描述之后的描述符定义为第二描述符。第一和第二仅用于标记描述符在队列中的位置次序。在构造总线报文时,将第一描述符中的物理地址和虚拟地址所指向的内存中的存储空间,作为该总线报文的目的地;除了包括目的地地址以外,还在总线报文中携带第二描述符中的虚拟地址,该第二描述符中的虚拟地址所指向的内存中的存储空间,是顺序排列在总线报文发送目的地之后的存储空间,即下一报文缓冲区。控制信息中包括该总线报文的传输状态信息,此外还包括该总线报文的报文域中报文的长度和传输报文的端口信息等保证报文正常传输的信息。将第一描述符中的物理地址和虚拟地址、第二描述符中的虚拟地址,以及控制信息存储在总线报文的描述符域中,将接收到的报文存储在报文域中,将描述符域和报文域构造为总线报文。内存中的接收总线报文的报文缓冲区采用的是链表形式,具体的,当前报文缓冲区中保存的第二描述符中的虚拟地址,即为指向下一报文缓冲区的指针。可以理解的是,为了保证内存能够正常接收到报文接收模块所发送的总线报文,总线报文的格式与内存中接收总线报文的报文缓冲区的格式是一致的。图2为本发明实施例内存中报文缓冲区格式的示意图,如图2所示,对报文缓冲区的格式进行举例说明。报文缓冲区由描述符域和报文域构成,其中设报文缓冲区的大小为2KB,分为64个单元,每个单元的大小为256位。其中,第I个单元为报文缓冲区的描述符域,包括当前报文缓冲区的64位物理地址Phy_Addr,64位虚拟地址Virt_Addr,64位控制信息Ctrl_Status以及当前报文缓冲区之后的下一报文缓冲区的64位虚拟地址Next_Virt_Addr,其中控制信息中包括I位硬件传输完成标识位HWCpl,其余位保留;第2个单元至第64个单元为报文域Packet。其中,Phy_Addr为当前报文缓冲区的物理地址,报文接收模块可以根据该物理地址将报文写入该当前报文缓冲区。Virt_Addr为当前报文缓冲区的虚拟地址,CPU可以根据该虚拟地址访问该当前报文缓冲区中的报文。Ctrl_Status为该总线报文的控制信息,主要包括传输完成标识位HWCpl。若报文缓冲区未接收到总线报文时,该报文缓冲区的描述符域中该标识位为0,报文接收模块所构造的总线报文中该标识位为1,那么当报文缓冲区接收到总线报文之后,该标识位即更新为1,从而说明报文缓冲区接收到了总线报文,报文接收模块与内存的报文传输完成;若将报 文接收模块中控制信息设为0和报文缓冲区中控制信息设为1,同样可以实现内存在接收到总线报文之后控制信息的更新,并且控制信息的形式并不仅限于此。Next_Virt_Addr为该当前报文缓冲区之后的下一报文缓冲区的虚拟地址,用于供CPU在访问当前报文缓冲区时获知下一报文缓冲区的虚拟地址,从而在需要访问下一报文缓冲区时,利用该虚拟地址即可实现访问。报文域用于存储接收到的报文内容。由于报文接收模块所发送的总线报文的格式与报文缓冲区的格式是一致的,报文缓冲区在未接收到总线报文时,其描述符域中包括当前报文缓冲区、下一报文缓冲区的地址信息和控制信息,而报文域为空;当前报文缓冲区接收到总线报文之后,总线报文的内容覆盖当前报文缓冲区的内容,从而使得当前报文缓冲区中的控制信息得到更新,并且报文域中写入了报文内容。可以理解的是,以上举例说明的内容仅为本发明实施例中的一种实现方式,可选的实现方式并不仅限于此。步骤102、将所述总线报文发送至所述内存中与所述第一描述符中的物理地址对应的所述当前报文缓冲区,以供中央处理器根据所述当前报文缓冲区对应的虚拟地址,读取所述当前报文缓冲区中的报文。报文接收模块在构造完总线报文之后,根据该总线报文的描述符域中所携带的从第一描述符中读取到的物理地址,将总线报文发送至该物理地址对应的报文缓冲区,该报文缓冲区即为当前报文缓冲区。报文接收模块将总线报文发送至内存之后,CPU可以根据对应的报文缓冲区的虚拟地址,从内存中读取该报文缓冲区的报文域中的报文内容。CPU对当前报文缓冲区的描述符域中的控制信息进行判断,若判断出当前报文缓冲区已接收到报文,则读取当前报文缓冲区的报文域中报文,若判断出当前报文缓冲区中未接收到报文,则处于等待状态。步骤103、清除所述第一描述符中的物理地址和虚拟地址之后,将所述第一描述符队列中的描述符顺序进行移位,以使所述第二描述符中的物理地址和虚拟地址成为更新后的第一描述符中的物理地址和虚拟地址。报文接收模块在将构造的总线报文发送至内存之后,将第一描述符队列中的第一描述符对应的内容清除,即,将第一描述符中的物理地址和虚拟地址清除。并且,由于第一描述符队列中顺序排列有两个或多个描述符,若第一描述符队列中的描述符为三个或以上时,将该第一描述符队列中的描述符顺序进行移位,也就是说,当第一描述符中的内容被清除之后,第一描述符为空,将描述符整体向前移位,使位于第二描述符中的物理地址和虚拟地址移位到第一描述符中,在原第一描述符队列中排列在第三个位置的描述符移位到第二描述符中,以此类推,描述符均向前移一位,相应地,第一描述符队列中末尾的描述符的存储位置为空。第一描述符和第二描述符中的物理地址和虚拟地址分别得到了更新。在实际应用中,报文接收模块在构造总线报文时,从第一描述符队列中读取第一描述符和第二描述符的方式还可以为,将读取到的第一描述符存入寄存器Cur_DeS,将读取到的第二描述符存入寄存器NeXt_DeS,利用这两个寄存器中的描述符构造总线报文;并且第一描述符队列中的前两个描述符被读取之后,把给两个描述符清除,队列中的描述符整体向前移位,使得第一描述符队列的初始的存储描述符的位置不为空;从而在报文接收模块将该总线报文发送出去之后,在构造下一总线报文时,将原寄存器Cur_DeS中存储的物理地址和虚拟地址清除,原寄存器Next_Des中的物理地址和虚拟地址存入寄存器Cur_Des,继续从第一描述符队列中的初始位置读取新的描述符,存入寄存器Next_DeS,并以此 类推。本发明实施例中的报文接收方法,通过将接收到的报文构造为包括内存中当前报文缓冲区的描述符和下一报文缓冲区的描述符的总线报文,使得CPU从内存中读取当前报文缓冲区的报文时能够获知下一报文缓冲区的虚拟地址,从而能够通过轮询的方式顺序读取报文缓冲区中的内容,不需要使用多种寄存器进行配合,也不需要向CPU产生中断,有效地提高了系统的处理效率,减小了系统开销。进一步地,在上述实施例的基础上,执行步骤103之后,该方法还包括步骤104、接收所述中央处理器在读取到所述当前报文缓冲区内的报文之后所发送的,对所述当前报文缓冲区的物理地址和虚拟地址进行回收的回收指令。步骤105、将所述回收指令中携带的物理地址和虚拟地址存入所述第一描述符队列的末尾。CPU在从当前报文缓冲区中读取到报文之后,将读取到的报文发送到网络协议栈,并且向报文接收模块发送回收指令,该回收指令中携带有当前报文缓冲区的物理地址和虚拟地址,也就是说,该报文缓冲区可以继续用来接收报文接收模块所发送的总线报文。此时,该当前报文缓冲区中的描述符域中的控制信息被更新为未接收到总线报文的状态,并且报文域中的内容保留,等待该报文缓冲区接收到后续的总线报文时,该报文域中的内容将被新的总线报文的报文域中的内容覆盖。报文接收模块在接收到CPU发送的回收指令后,将该回收指令中携带的物理地址和虚拟地址存储在第一描述符队列的末尾的空位上。本发明实施例中的报文接收方法,通过在CPU读取完内存中当前报文缓冲区的报文后,指示报文接收模块对当前报文缓冲区的描述符进行回收,存入第一描述符队列的末尾,以使报文接收模块顺序从第一描述符队列中读取描述符构造总线报文时,可以连续获取到可用的描述符,从而避免了报文接收模块在可用描述符全部被使用之后发起中断的动作,有效地提高了系统的处理效率,减小了系统开销。图3为本发明报文接收方法另一实施例的流程图,在上述各实施例的基础上,执行步骤101之前,如图3所示,该方法还包括步骤200、接收所述中央处理器在对所述内存进行初始化之后,发送的所述内存中的第二描述符队列的基地址,以及所述第二描述符队列内描述符的数量。其中,所述第二描述符队列存储有所述内存中的至少两个报文缓冲区各自的描述符,所述描述符包括所述报文缓冲区在所述内存中的物理地址和虚拟地址。步骤201、将根据所述基地址从所述内存中读取到的所述数量的描述符,作为所述第一描述符队列。在报文接收模块接收报文之前,需要先获取用于构造总线报文的第一描述符队列。具体方法为,CPU在对内存进行初始化时,会将内存中初始化的至少两个报文缓冲区的描述符存储在队列中,该队列即为第二描述符队列。第二描述符队列中保存了该至少两个报文缓冲区各自的描述符,每个报文缓冲区的描述符包括该报文缓冲区的物理地址和与该物理地址对应的虚拟地址;CPU将第二描述符队列的基地址和第二描述符队列中存储的描述符的数量,发送给报文接收模块,其中该基地址为存储第二描述符队列的起始的物理地址;报文接收模块根据该基地址和数量,从内存中该基地址对应的存储空间,读取该数量的描述符,并将读取到的描述符顺序组成第一描述符队列,用于构造总线报文。 本发明实施例中的报文接收方法,通过CPU对内存进行初始化时,获取内存中的报文缓冲区的描述符,用于构造总线报文,由于CPU在读取完的报文缓冲区的描述符之后,会告知报文接收模块对该描述符进行回收,使得报文接收模块在内存初始化时获得的描述符能够被循环利用,无需向CPU产生中断,有效地提高了系统的处理效率,减小了系统开销。进一步地,在上述各实施例的基础上,CPU从内存中读取当前报文缓冲区中的报文时,其获知当前报文缓冲区的虚拟地址的方法有以下两种。第一种情况为,若所述总线报文为向所述内存发送的首个总线报文,也就是说,CPU在对内存进行初始化之后,访问内存中的第一个报文缓冲区的情况。CPU对内存进行初始化之后,内存中存储的第二描述符队列内的首个描述符中的虚拟地址即为第一个报文缓冲区的虚拟地址,CPU从第二描述符队列中读取首个描述符的虚拟地址,即可访问内存中对应的报文缓冲区,获得当前报文缓冲区的报文域中的报文内容。第二种情况为,若所述总线报文不是向所述内存发送的首个总线报文,也就是说,CPU已经从内存中读取到了报文缓冲区中的报文,则CPU从该已读取的报文缓冲区的描述符域中可以获知准备进行读取的报文缓冲区的虚拟地址。CPU根据该虚拟地址即可访问内存中的当前报文缓冲区,读取当前报文缓冲区中的报文域内的报文内容。依此类推,根据总线报文的结构和报文缓冲区的格式可知,CPU从当前报文缓冲区的描述符域中能够获知下一报文缓冲区的虚拟地址,从而能够根据获知到的该虚拟地址访问下一报文缓冲区。本发明实施例中的报文接收方法,CPU在对内存初始化之后,根据首个报文缓冲区的虚拟地址读取报文之后,即可根据当前报文缓冲区的描述符域中的下一报文缓冲区的虚拟地址,访问下一报文缓冲区,并利用此方法轮询内存中的报文缓冲区,不需要单独维护描述符列表,也不需要向CPU产生中断,有效地提高了系统的处理效率,减小了系统开销。、
图4为本发明实施例报文接收模块接收报文的流程图,如图4所示,报文接收模块接收报文的流程包括步骤400、报文接收模块在接收报文之前,需要进行初始化,从CPU中的第二描述符队列中读取内存中至少两个报文缓冲区的描述符,将读取到的描述符存入第一描述符队列中;步骤401、报文接收模块检测·是否接收到报文,若未接收到报文,则循环执行步骤401,等待接收报文;若接收到报文,则继续执行步骤402 ;步骤402、报文接收模块在接收到报文之后,申请报文缓冲区的描述符,即从第一描述符队列中申请描述符,从第一描述符队列中位于队列起始位置的描述符和顺序排列在该描述符之后的描述符,分别存入寄存器Cur_Des和寄存器Next_Des ; 步骤403、报文接收模块提取寄存器Cur_Des中的物理地址Phy_Addr和虚拟地址Virt_Addr,准备将构造的总线报文存入该描述符对应的内存中的当前报文缓冲区中;提取寄存器Next_Des中的虚拟地址Virt_Addr,作为Nest_Virt_Addr,用于构造总线报文时携带于总线报文的描述符域中,以使CPU根据该虚拟地址获知当前报文缓冲区之后的下一报文缓冲区的存储地址;步骤404、报文接收模块利用从寄存器Cur_Des和寄存器NeXt_Des中提取到的物理地址和虚拟地址,以及接收到的报文和传输报文所需要的控制信息,构造包含上述各数据的总线报文;步骤405、报文接收模块将构造的总线报文写入内存中的报文缓冲区,该报文缓冲区即为报文接收模块从寄存器Cur_DeS中提取到的物理地址对应的当前报文缓冲区;步骤406、报文接收模块在将总线报文写入内存之后,将寄存器Next_Des中的描述符写入寄存器Cur_Des中,继续从第一描述符队列中申请新的描述符存入寄存器Next_Des中,并继续执行步骤401,等待接收报文,相应地执行后续操作。图5为本发明实施例中央处理器接收报文的流程图,如图5所示,中央处理器接收报文的流程包括步骤500、CPU提取线程参数,根据对内存进行初始化时,内存中存储的第二描述符队列中首个报文缓冲区的虚地址,访问读取该虚地址对应的报文缓冲区;步骤501、CPU根据传输完成标识位HWCpl,判断当前报文缓冲区内是否有报文,由于该报文缓冲区未接收到总线报文时,其HWCpl为0,在接收到总线报文之后,HWCpl为I ;从而根据HWCpl若判断出当前报文缓冲区中未接收到总线报文,则循环执行步骤501,等待接收总线报文;若判断出当前报文缓冲区中已接收到总线报文,则执行步骤502 ;步骤502、CPU在接收到总线报文之后,提取总线报文的报文域中报文的摘要信息,并执行步骤503将摘要信息存储到摘要队列中,以供系统对所接收到的报文的数量、字节长度、数据流的数量和数据流的持续时间等信息进行记录;同时继续执行步骤504 ;需要说明的是,步骤502中的实现方式与现有技术中所采用的方式相同;步骤504、CPU将接收到的报文发送至网络协议栈,其中网络协议栈为上层应用;步骤505、CPU接收并处理完报文之后,将该报文缓冲区的描述符域中的HWCpl恢复为初始状态,即清零;步骤506、CPU将读取完的报文缓冲区进行回收,将该报文缓冲区的物理地址和虚拟地址携带于回收指令中,发送给报文接收模块,指示报文接收模块对该报文缓冲区进行回收,也就是说,该报文缓冲区处于可用状态,可用于接收新的总线报文;步骤507、CPU根据已读取的报文缓冲区的描述符域中所携带的下一报文缓冲区的虚拟地址,即可访问下一报文缓冲区,从而实现CPU对内存中的报文缓冲区的轮询。本发明实施例通过将接收到的报文构造为,包括内存中当前报文缓冲区的描述符和下一报文缓冲区的描述符的总线报文,使得CPU从内存中读取当前报文缓冲区的报文时能够获知下一报文缓冲区的虚拟地址,从而能够通过轮询的方式顺序读取报文缓冲区中的内容,不需要使用多种寄存器进行配合,也不需要向CPU产生中断,有效地提高了系统的处理效率,减小了系统开销。本领域普通技术人员可以理解实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟 或者光盘等各种可以存储程序代码的介质。图6为本发明报文接收模块实施例的结构示意图,如图6所示,该报文接收模块包括第一接收单元11,用于在接收到报文之后,将所述报文与第一描述符队列内的第一描述符中的物理地址和虚拟地址,以及所述第一描述符队列内的第二描述符中的虚拟地址构造为总线报文;其中,所述第一描述符包括内存中当前报文缓冲区的物理地址和虚拟地址;所述第二描述符顺序排列在所述第一描述符之后,包括所述内存中所述当前报文缓冲区后的下一个报文缓冲区的物理地址和虚拟地址;第一发送单元12,用于将所述总线报文发送至所述内存中与所述第一描述符中的物理地址对应的所述当前报文缓冲区,以供中央处理器根据所述当前报文缓冲区对应的虚拟地址,读取所述当前报文缓冲区中的报文;第一处理单元13,用于在清除所述第一描述符中的物理地址和虚拟地址之后,将所述第一描述符队列中的描述符顺序进行移位,以使所述第二描述符中的物理地址和虚拟地址成为更新后的第一描述符中的物理地址和虚拟地址。进一步地,在上述实施例的基础上,该报文接收模块还包括第二接收单元14,用于在所述第一处理单元13将所述第一描述符队列中的描述符顺序进行移位之后,接收所述中央处理器在读取到所述当前报文缓冲区内的报文之后所发送的,对所述当前报文缓冲区的物理地址和虚拟地址进行回收的回收指令;第二处理单元15,用于将所述回收指令中携带的物理地址和虚拟地址存入所述第一描述符队列的末尾。进一步地,在上述各实施例的基础上,该报文接收模块还包括第三接收单元16,用于在所述第一接收单元11接收到报文之前,接收所述中央处理器在对所述内存进行初始化之后,发送的所述内存中的第二描述符队列的基地址,以及所述第二描述符队列内描述符的数量;其中,所述第二描述符队列存储有所述内存中的至少两个报文缓冲区各自的描述符,所述描述符包括所述报文缓冲区在所述内存中的物理地址和虚拟地址;
第三处理单元17,用于将根据所述基地址从所述内存中读取到的所述数量的描述符,作为所述第一描述符队列。进一步地,在上述各实施例的基础上,若所述第一发送单元12向所述内存发送的总线报文为首个总线报文;相应地,所述第一发送单元12还用于,将所述总线报文发送至所述内存中与所述第一描述符中的物理地址对应的所述当前报文缓冲区,以供所述中央处理器根据所述第二描述符队列内的首个描述符中的虚拟地址, 读取所述当前报文缓冲区中的报文;若所述第一发送单元12向所述内存发送的总线报文不是首个总线报文;相应地,所述第一发送单元12还用于,将所述总线报文发送至所述内存中与所述第一描述符中的物理地址对应的所述当前报文缓冲区,以供所述中央处理器根据从所述当前报文缓冲区前的上一个报文缓冲区读取到的所述当前报文缓冲区的虚拟地址,读取所述当前报文缓冲区中的报文。需要说明的是,对各功能模块的命名时所采用的第一、第二和第三等内容,仅用于区别各功能模块,不代表各功能模块之间的次序。具体的,本发明实施例中的报文接收模块进行报文接收的方法,可以参见上述对应的方法实施例,此处不再赘述。本发明实施例中的报文接收模块,通过将接收到的报文构造为包括内存中当前报文缓冲区的描述符和下一报文缓冲区的描述符的总线报文,使得CPU从内存中读取当前报文缓冲区的报文时能够获知下一报文缓冲区的虚拟地址,从而能够通过轮询的方式顺序读取报文缓冲区中的内容,不需要使用多种寄存器进行配合,也不需要向CPU产生中断,有效地提高了系统的处理效率,减小了系统开销。图7为本发明报文接收系统实施例的结构示意图;图8为本发明实施例报文接收系统的一种系统结构。如图7所示,该报文接收系统包括网络接口卡I、内存2和中央处理器3,其中网络接口卡I中包括报文接收模块4。具体的,本发明实施例中报文接收系统进行报文接收的方法,可以参见上述对应的方法实施例,此处不再赘述。本发明实施例中的报文接收系统,通过将接收到的报文构造为包括内存中当前报文缓冲区的描述符和下一报文缓冲区的描述符的总线报文,使得CPU从内存中读取当前报文缓冲区的报文时能够获知下一报文缓冲区的虚拟地址,从而能够通过轮询的方式顺序读取报文缓冲区中的内容,不需要使用多种寄存器进行配合,也不需要向CPU产生中断,有效地提高了系统的处理效率,减小了系统开销。最后应说明的是以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
权利要求
1.一种报文接收方法,其特征在于,包括 接收到报文之后,将所述报文与第一描述符队列内的第一描述符中的物理地址和虚拟地址,以及所述第一描述符队列内的第二描述符中的虚拟地址构造为总线报文; 其中,所述第一描述符包括内存中当前报文缓冲区的物理地址和虚拟地址;所述第二描述符顺序排列在所述第一描述符之后,包括所述内存中所述当前报文缓冲区后的下一个报文缓冲区的物理地址和虚拟地址; 将所述总线报文发送至所述内存中与所述第一描述符中的物理地址对应的所述当前报文缓冲区,以供中央处理器根据所述当前报文缓冲区对应的虚拟地址,读取所述当前报文缓冲区中的报文; 清除所述第一描述符中的物理地址和虚拟地址之后,将所述第一描述符队列中的描述符顺序进行移位,以使所述第二描述符中的物理地址和虚拟地址成为更新后的第一描述符中的物理地址和虚拟地址。
2.根据权利要求I所述的报文接收方法,其特征在于,所述将所述第一描述符队列中的描述符顺序进行移位之后,所述方法还包括 接收所述中央处理器在读取到所述当前报文缓冲区内的报文之后所发送的,对所述当前报文缓冲区的物理地址和虚拟地址进行回收的回收指令; 将所述回收指令中携带的物理地址和虚拟地址存入所述第一描述符队列的末尾。
3.根据权利要求I或2所述的报文接收方法,其特征在于,所述接收到报文之前,所述方法还包括 接收所述中央处理器在对所述内存进行初始化之后,发送的所述内存中的第二描述符队列的基地址,以及所述第二描述符队列内描述符的数量; 其中,所述第二描述符队列存储有所述内存中的至少两个报文缓冲区各自的描述符,所述描述符包括所述报文缓冲区在所述内存中的物理地址和虚拟地址; 将根据所述基地址从所述内存中读取到的所述数量的描述符,作为所述第一描述符队列。
4.根据权利要求3所述的报文接收方法,其特征在于,若所述总线报文为向所述内存发送的首个总线报文; 相应地,所述将所述总线报文发送至所述内存中与所述第一描述符中的物理地址对应的所述当前报文缓冲区,以供中央处理器根据所述当前报文缓冲区对应的虚拟地址,读取所述当前报文缓冲区中的报文包括 将所述总线报文发送至所述内存中与所述第一描述符中的物理地址对应的所述当前报文缓冲区,以供所述中央处理器根据所述第二描述符队列内的首个描述符中的虚拟地址,读取所述当前报文缓冲区中的报文; 若所述总线报文不是向所述内存发送的首个总线报文; 相应地,所述将所述总线报文发送至所述内存中与所述第一描述符中的物理地址对应的所述当前报文缓冲区,以供中央处理器根据所述当前报文缓冲区对应的虚拟地址,读取所述当前报文缓冲区中的报文包括 将所述总线报文发送至所述内存中与所述第一描述符中的物理地址对应的所述当前报文缓冲区,以供所述中央处理器根据从所述当前报文缓冲区前的上一个报文缓冲区读取到的所述当前报文缓冲区的虚拟地址,读取所述当前报文缓冲区中的报文。
5.一种报文接收模块,其特征在于,包括 第一接收单元,用于在接收到报文之后,将所述报文与第一描述符队列内的第一描述符中的物理地址和虚拟地址,以及所述第一描述符队列内的第二描述符中的虚拟地址构造为总线报文; 其中,所述第一描述符包括内存中当前报文缓冲区的物理地址和虚拟地址;所述第二 描述符顺序排列在所述第一描述符之后,包括所述内存中所述当前报文缓冲区后的下一个报文缓冲区的物理地址和虚拟地址; 第一发送单元,用于将所述总线报文发送至所述内存中与所述第一描述符中的物理地址对应的所述当前报文缓冲区,以供中央处理器根据所述当前报文缓冲区对应的虚拟地址,读取所述当前报文缓冲区中的报文; 第一处理单元,用于在清除所述第一描述符中的物理地址和虚拟地址之后,将所述第一描述符队列中的描述符顺序进行移位,以使所述第二描述符中的物理地址和虚拟地址成为更新后的第一描述符中的物理地址和虚拟地址。
6.根据权利要求5所述的报文接收模块,其特征在于,所述报文接收模块还包括 第二接收单元,用于在所述第一处理单元将所述第一描述符队列中的描述符顺序进行移位之后,接收所述中央处理器在读取到所述当前报文缓冲区内的报文之后所发送的,对所述当前报文缓冲区的物理地址和虚拟地址进行回收的回收指令; 第二处理单元,用于将所述回收指令中携带的物理地址和虚拟地址存入所述第一描述符队列的末尾。
7.根据权利要求5或6所述的报文接收模块,其特征在于,所述报文接收模块还包括 第三接收单元,用于在所述第一接收单元接收到报文之前,接收所述中央处理器在对所述内存进行初始化之后,发送的所述内存中的第二描述符队列的基地址,以及所述第二描述符队列内描述符的数量; 其中,所述第二描述符队列存储有所述内存中的至少两个报文缓冲区各自的描述符,所述描述符包括所述报文缓冲区在所述内存中的物理地址和虚拟地址; 第三处理单元,用于将根据所述基地址从所述内存中读取到的所述数量的描述符,作为所述第一描述符队列。
8.根据权利要求7所述的报文接收模块,其特征在于,若所述第一发送单元向所述内存发送的总线报文为首个总线报文; 相应地,所述第一发送单元还用于,将所述总线报文发送至所述内存中与所述第一描述符中的物理地址对应的所述当前报文缓冲区,以供所述中央处理器根据所述第二描述符队列内的首个描述符中的虚拟地址,读取所述当前报文缓冲区中的报文; 若所述第一发送单元向所述内存发送的总线报文不是首个总线报文; 相应地,所述第一发送单元还用于,将所述总线报文发送至所述内存中与所述第一描述符中的物理地址对应的所述当前报文缓冲区,以供所述中央处理器根据从所述当前报文缓冲区前的上一个报文缓冲区读取到的所述当前报文缓冲区的虚拟地址,读取所述当前报文缓冲区中的报文。
9.一种网络接口卡,其特征在于,包括如权利要求5-8任一所述的报文接收模块。
10.一种报文接收系统,其特征在于,包括如权利要求9所述的网络接口卡、内存和中央处理器。
全文摘要
本发明提供一种报文接收方法、报文接收模块、装置及系统,其中报文接收方法包括接收到报文之后,将报文与第一描述符队列内的第一描述符中的物理地址和虚拟地址,以及第一描述符队列内的第二描述符中的虚拟地址构造为总线报文;将总线报文发送至内存中与第一描述符中的物理地址对应的当前报文缓冲区,以供中央处理器根据当前报文缓冲区对应的虚拟地址,读取当前报文缓冲区中的报文;清除第一描述符中的物理地址和虚拟地址之后,将第一描述符队列中的描述符顺序进行移位。从而使得中央处理器通过轮询的方式即可顺序读取报文缓冲区中的内容,有效地提高了系统的处理效率,减小了系统开销。
文档编号G06F13/28GK102750245SQ20121017188
公开日2012年10月24日 申请日期2012年5月29日 优先权日2012年5月29日
发明者吕高锋, 唐路, 孙志刚, 徐东来, 李韬, 杨安, 石巍, 陈一骄 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1