一种任务处理方法以及网卡与流程

文档序号:11530663阅读:299来源:国知局
一种任务处理方法以及网卡与流程

本申请涉及通信领域,尤其涉及一种任务处理方法以及网卡。



背景技术:

以太网络中的一项业务可以包括多种任务,举例来说,传输控制协议卸载(英文:tcpoffloadengine,缩写:toe)业务就包括接收任务以及发送任务。现有的以太网络的任务处理一般由服务器实现,服务器通过交换机接入以太网络(英文:ethernet)中,请参阅图1。其中服务器上插入有网卡,用于处理服务器与交换机之间的数据交换。网络设备在收发数据包的过程中会触发网络i/o中断,因此服务器在工作时要响应大量的i/o中断信号。例如,若网络任务以64kbps的速率发送传输控制协议(英文:transmissioncontrolprotocol,缩写:tcp)数据,则单单将数据封装成以太网数据包以及响应网络接受确认信号,每秒钟就会在服务器和网卡间触发60多个i/o中断。大量的中断处理会占用服务器相当可观的计算资源,拉低网络的整体性能。

为了解决上述问题,现阶段将协议栈的相关处理从服务器侧卸载到网卡上实现,以求解放服务器的计算资源,减少服务器和网卡之间的数据交互,进而提升网络的性能。例如现阶段的某些网卡已经能够支持融合以太网远程直接数据访问(英文:rdmaoverconvergedethernet,缩写:roce)功能、基于以太网的光纤通道(英文:fibrechanneloverethernet,缩写:fcoe)功能等。

但是,现阶段的网卡执行任务处理的性能较低,不能满足以太网络中大量任务的处理需求。



技术实现要素:

本申请提供了任务处理方法以及网卡,用于提升网卡的任务处理性能。

本申请第一方面提供了一种任务处理方法,适用于网卡进行任务处理。其中,任务处理按照执行顺序分为n个阶段,依次为第一阶段、第二阶段、……第n阶段。网卡包括处理器和网卡内存。处理器中运行多个线程,该多个线程在逻辑上构成了处理器的资源池。网卡获取待处理的p个报文,并从处理器的资源池中,确定该p个报文中每个报文对应的线程。网卡通过每个报文对应的线程,对每个报文依次执行n个阶段的任务处理,得到每个报文的第n阶段的任务处理结果。本申请中仅使用一个线程对报文执行完整的任务处理,故不需要在多个线程之间拷贝阶段性的任务处理结果,且整个任务程序只提供一个完整的函数功能集即可。这样就减少了任务处理消耗的资源和时延,降低了任务处理开销,减小了程序的体量,节约了存储空间。因此,本申请提供的任务处理流程与现有技术相比,具有较好的性能。

可选的,网卡内存中包括任务处理的上下文信息,该上下文信息包括与该n个阶段一一对应的n个信息块,依次为第一信息块、第二信息块、……第n信息块。其中第i信息块包括执行第i阶段的任务处理所需要使用的上下文信息,1≤i≤n。该p个报文中的第q报文对应第q线程,其中q为不大于p的任意正整数。例如第一报文对应第一线程,第二报文对应第二线程。在第q线程对第q报文执行第j阶段的任务处理时,网卡为第q线程加载第j信息块,并通过该第q线程,根据第j信息块以及第q报文的第j-1阶段的处理结果,对第q报文执行第j阶段的任务处理,得到第q报文的第j阶段的处理结果,其中j依次遍历[1,n]中的整数。其中,第q报文的第0阶段的处理结果即为第q报文。

可选的,该p个报文中包括第一报文和第二报文,第一报文对应第一线程,第二报文对应第二线程。网卡在通过第一线程执行完对第一报文的第j阶段的任务处理后,再为第二线程加载第j信息块,并通过第二线程执行对第二报文的第j阶段的任务处理。这样能够将多个线程按照阶段错开调度,避免不同的线程在访问上下文信息时出现读写冲突。

可选的,在第q线程执行第q报文的第j阶段的任务处理时,网卡可以锁定第j信息块,使得第j信息块不能被其它线程访问,以避免其它线程与第q线程同时访问第j信息块造成读写冲突。在第q线程执行完第q报文的第j阶段的任务处理后,网卡解锁第j信息块,使得第j信息块可以被其它线程访问。

可选的,若网卡解锁了为第q线程锁定的第j信息块后,j<n,则网卡继续为第q线程锁定第j+1信息块。

可选的,网卡在通过第q线程执行完对第q报文的第j阶段的任务处理后,可以将第q线程挂起以节约功耗。当网卡为第q线程加载了第j+1信息块后,网卡再唤醒第q线程对第q报文执行第j+1阶段的任务处理。

可选的,网卡在获取了该p个报文后,还可以对该p个报文进行加速,得到加速后的p个报文。网卡在确定了该p个报文对应的线程后,将加速后的p个报文分别发送给各自对应的线程。

可选的,网卡内存中还可以包括全局配置表,该全局配置表中记录了该n个信息块的地址信息。网卡可以根据该全局配置表的记录来获取第j信息块。

可选的,若任务发生演进,任务处理由原本的n个阶段更新为m个新阶段,则上下文信息页对应的由n个信息块重新划分为m个新信息块。在这种场景下,网卡可以接收修改指令,该修改指令用于将该全局配置表中记录的n个信息块的地址信息修改为m个新信息块的地址信息,该m个信息块中,第k新信息块包括执行第k新阶段的任务处理所需要使用的上下文信息,1≤k≤m。

可选的,任务处理的任务程序作为一个可执行文件保存在网卡内存中,该可执行文件包括有对应任务处理的n个阶段的n个程序段,分别为第一程序段、第二程序段、……第n程序段。其中第i程序段包括用于执行第i阶段的任务处理的程序指令。网卡为第q线程加载第j程序段,并调整第q线程的指针指向第j程序段。然后网卡通过第q线程,根据第j信息块以及第q报文的第j-1阶段的处理结果,执行第j程序段,即实现了执行第j阶段的任务处理。

本申请第二方面提供了一种网卡,用于对网络中的报文进行任务处理。其中,网卡包括处理器和网卡内存。任务处理按照执行顺序分为n个阶段,依次为第一阶段、第二阶段、……第n阶段。处理器中运行多个线程,该多个线程在逻辑上构成了处理器的资源池。处理器通过运行内部的线程来执行网卡内存中保存的程序,以实现本申请第一方面提供的任务处理方法。

本申请第三方面提供了一种任务处理方法,适用于网卡进行任务处理。其中,任务处理按照执行顺序分为n个阶段,依次为第一阶段、第二阶段、……第n阶段。网卡包括处理器、网卡内存、调度器、任务接口和总线。处理器中还运行多个线程,该多个线程在逻辑上构成了处理器的资源池。任务接口接收待处理的p个报文,调度器从处理器的资源池中,确定该p个报文对应的线程,并为该p个报文加载到对应的线程中。处理器通过每个报文对应的线程对每个报文依次执行n个阶段的任务处理,得到每个报文的第n阶段的任务处理结果。本申请中仅使用一个线程对报文执行完整的任务处理,故不需要在多个线程之间拷贝阶段性的任务处理结果,且整个任务程序只提供一个完整的函数功能集即可。这样就减少了任务处理消耗的资源和时延,降低了任务处理开销,减小了程序的体量,节约了存储空间。因此,本申请提供的网卡具有更好的使用性能。

可选的,网卡内存中包括任务处理的上下文信息,该上下文信息包括与该n个阶段一一对应的n个信息块,依次为第一信息块、第二信息块、……第n信息块。其中第i信息块包括执行第i阶段的任务处理所需要使用的上下文信息,1≤i≤n。该p个报文中的第q报文对应第q线程,其中q为不大于p的任意正整数。例如第一报文对应第一线程,第二报文对应第二线程。在第q线程对第q报文执行第j阶段的任务处理时,调度器为第q线程加载第j信息块,处理器通过该第q线程,根据第j信息块以及第q报文的第j-1阶段的处理结果,对第q报文执行第j阶段的任务处理,得到第q报文的第j阶段的处理结果,其中j依次遍历[1,n]中的整数。其中,第q报文的第0阶段的处理结果即为第q报文。

可选的,该p个报文中包括第一报文和第二报文,第一报文对应第一线程,第二报文对应第二线程。调度器待第一线程执行完第一报文的第j阶段的任务处理后,再为第二线程加载第j信息块。使得处理器待第一线程执行完对第一报文的第j阶段的任务处理后,才通过第二线程执行对第二报文的第j阶段的任务处理。这样能够将多个线程按照阶段错开调度,避免不同的线程在访问上下文信息时出现读写冲突。

可选的,在处理器通过第q线程执行第q报文的第j阶段的任务处理时,调度器可以为第q线程锁定第j信息块,使得第j信息块不能被其它线程访问,以避免其它线程与第q线程同时访问第j信息块造成读写冲突。在处理器通过第q线程执行完第q报文的第j阶段的任务处理后,调度器解锁第j信息块,使得第j信息块可以被其它线程访问。

可选的,调度器为第q线程解锁第j信息块后,若当前j<n,则调度器无需等待第q线程下发锁定第j+1信息块的指令,自动为第q线程锁定第j+1信息块,以减少线程和调度器之间的指令交互。

可选的,调度器在第q线程执行完对第q报文的第j阶段的任务处理后,可以将第q线程暂时挂起以节约功耗。在调度器为第q线程加载完第j+1信息块后,调度器再唤醒第q线程继续执行第j+1阶段的任务处理。

可选的,网卡中还包括加速器。在任务接口接收到待处理的p个报文后,加速器对该p个报文进行加速,得到加速后的p个报文。上面提到的调度器为第q线程加载第q报文,指的可以是调度器为第q线程加载该加速后的第q报文。上面提到的第q报文第0阶段的处理结果为第一报文,具体可以指第q报文第0阶段的处理结果为该加速后的第q报文。本申请中通过将报文的加速操作转移到加速器进行处理,使得处理器无需再对报文进行加速操作,能够简化处理器的功能,使得处理器无需额外定制加速引擎,降低了网卡的成本。

可选的,加速器进行的加速操作包括循环冗余校验(英文:cyclicredundancycheck,缩写:crc)、ip校验和(英文:checksum)、数据包解析(英文:packetparse)、数据包编辑(英文:packetedit)、查表等操作中的一项或多项。

可选的,网卡内存中还可以包括全局配置表,该全局配置表中记录了该n个信息块的地址信息。调度器可以根据该全局配置表的记录,来为第q线程加载第j信息块。

可选的,若任务发生演进,任务处理由原本的n个阶段更新为m个新阶段,则上下文信息页对应的由n个信息块重新划分为m个新信息块。在这种场景下,任务接口可以接收修改指令,该修改指令用于将该全局配置表中记录的n个信息块的地址信息修改为m个新信息块的地址信息,该m个信息块中,第k新信息块包括执行第k新阶段的任务处理所需要使用的上下文信息,1≤k≤m。

可选的,任务处理的任务程序作为一个可执行文件保存在网卡内存中,该可执行文件包括有对应任务处理的n个阶段的n个程序段,分别为第一程序段、第二程序段、……第n程序段。其中第i程序段包括用于执行第i阶段的任务处理的程序指令。若当前处理器需要通过第q线程对第q报文执行第j阶段的任务处理,则处理器为第q线程加载第j程序段,并调整第q线程的指针指向该第j程序段。处理器运行第q线程根据第j信息块以及第q报文第j-1阶段的处理结果,执行该第j程序段,以对第q报文进行第j阶段的任务处理。

本申请第四方面提供了又一种网卡,用于对网络中的报文进行任务处理。其中,网卡包括处理器、网卡内存、任务接口和总线,任务处理按照执行顺序分为n个阶段,依次为第一阶段、第二阶段、……第n阶段。处理器中运行多个线程,该多个线程在逻辑上构成了处理器的资源池。其中,任务接口用于接收待处理的p个报文,调度器用于从处理器的资源池中,确定该p个报文对应的线程,并将该p个报文加载到对应的线程中。处理器用于通过每个报文对应的线程对每个报文依次执行n个阶段的任务处理,得到每个报文的第n阶段的任务处理结果。本申请中网卡仅使用一个线程对报文执行完整的任务处理,故不需要在多个线程之间拷贝阶段性的任务处理结果,且整个任务程序只提供一个完整的函数功能集即可。因此本申请提供的网卡任务处理开销少,程序占用的存储空间小,与现有技术相比具有更好的性能。

可选的,网卡内存用于存储任务处理的上下文信息,该上下文信息包括与该n个阶段一一对应的n个信息块,依次为第一信息块、第二信息块、……第n信息块。其中第i信息块包括执行第i阶段的任务处理所需要使用的上下文信息,1≤i≤n。该p个报文中的第q报文对应第q线程,其中q为不大于p的任意正整数。例如第一报文对应第一线程,第二报文对应第二线程。调度器还用于:在第q线程对第q报文执行第j阶段的任务处理之前,为第q线程加载第j信息块。处理器具体用于:通过该第q线程,根据第j信息块以及第q报文的第j-1阶段的处理结果,对第q报文执行第j阶段的任务处理,得到第q报文的第j阶段的处理结果,其中j依次遍历[1,n]中的整数。其中,第q报文的第0阶段的处理结果即为第q报文。

可选的,该p个报文中包括第一报文和第二报文,第一报文对应第一线程,第二报文对应第二线程。调度器还用于待第一线程执行完第一报文的第j阶段的任务处理后,再为第二线程加载第j信息块。使得处理器待第一线程执行完对第一报文的第j阶段的任务处理后,才通过第二线程执行对第二报文的第j阶段的任务处理。这样能够将多个线程按照阶段错开调度,避免不同的线程在访问上下文信息时出现读写冲突。

可选的,调度器还用于:在处理器通过第q线程执行第q报文的第j阶段的任务处理时,为第q线程锁定第j信息块,使得第j信息块不能被其它线程访问,以避免其它线程与第q线程同时访问第j信息块造成读写冲突。在处理器通过第q线程执行完第q报文的第j阶段的任务处理后,解锁第j信息块,使得第j信息块可以被其它线程访问。

可选的,调度器为第q线程解锁第j信息块后,若当前j<n,则调度器还用于自动为第q线程锁定第j+1信息块,无需等待第q线程下发锁定第j+1信息块的指令,以减少线程和调度器之间的指令交互。

可选的,调度器还用于在第q线程执行完对第q报文的第j阶段的任务处理后,将第q线程暂时挂起以节约功耗。在为第q线程加载完第j+1信息块后,再唤醒第q线程继续执行第j+1阶段的任务处理。

可选的,网卡中还包括加速器。用于在任务接口接收到待处理的p个报文后对该p个报文进行加速,得到加速后的第一报文。上面提到的调度器用于为第q线程加载第q报文,指的可以是调度器用于为第q线程加载该加速后的第q报文。上面提到的第q报文第0阶段的处理结果为第q报文,具体可以指第q报文第0阶段的处理结果为该加速后的第q报文。本申请通过的网卡将报文的加速操作转移到加速器进行处理,使得处理器无需再对报文进行加速操作,能够简化处理器的功能,使得处理器无需额外定制加速引擎,降低了网卡的成本。

可选的,加速器具体可以包括crc单元、checksum单元、数据包解析器(英文:packetparser,简称:parser)、数据包编辑器(英文:packeteditor,缩写:pe)、查表单元中的一项或多项。其中,crc单元用于对第一报文进行crc校验;checksum单元用于对第一报文进行checksum校验;parser用于对第一报文进行数据包解析;pe,用于对第一报文进行数据包编辑;查表单元,用于查找所述第一报文的匹配表项。

可选的,网卡内存还用于保存全局配置表,该全局配置表中记录了该n个信息块的地址信息。调度器具体用于根据该全局配置表的记录,来为第一线程加载第j信息块。

可选的,任务接口还用于在任务处理由原本的n个阶段更新为m个新阶段时,接收修改指令,该修改指令用于将该全局配置表中记录的n个信息块的地址信息修改为m个新信息块的地址信息,该m个信息块中,第k新信息块包括执行第k新阶段的任务处理所需要使用的上下文信息,1≤k≤m。

可选的,网卡内存还用于保存任务处理的一个可执行文件,该可执行文件包括有对应任务处理的n个阶段的n个程序段,分别为第一程序段、第二程序段、……第n程序段。其中第i程序段包括用于执行第i阶段的任务处理的程序指令。调度器还用于:在处理器待通过第q线程对第q报文执行第j阶段的任务处理时,为第q线程加载第j程序段,并调整第q线程的指针指向第j程序段,使得第q线程能够直接开始执行第j程序段。处理器具体用于:通过第q线程,根据第j信息块以及第q报文的第j-1阶段的处理结果执行第j程序段,以对第q报文进行第j阶段的任务处理。

可选的,网卡还可以包括直接内存访问(英文:directmemoryaccess,缩写:dma)模块,用于从与网卡相连的主机的内存中,获取所述上下文信息,并将获取的所述上下文信息保存到所述网卡的内存中。

可选的,网卡还可以包括上下文管理模块,用于对所述上下文信息进行管理。

附图说明

图1为服务器、交换机、以太网的连接关系示意图;

图2为现阶段技术中网卡的一个结构图;

图3(a)为现阶段技术中任务处理方法的一个原理示意图;

图3(b)为现有技术中任务处理方法的另一个原理示意图;

图4(a)为本申请提供的任务处理方法一个实施例流程图;

图4(b)为本申请提供的任务处理方法另一个实施例的原理示意图;

图5(a)为本申请提供的网卡一个实施例结构图;

图5(b)为本申请提供的网卡另一个实施例结构图;

图6为本申请提供的任务处理方法另一个实施例的流程图。

具体实施方式

本申请提供了一种任务处理方法,可以提升网卡的任务处理性能。本申请还提出了相应的网卡,以下将分别进行说明。

现阶段的以太网络一般将协议栈的相关任务处理从服务器侧卸载到网卡上实现,以求解放服务器的计算资源,提升网络的性能。卸载到网卡上的任务可以大致分为有状态任务以及无状态任务两种,本申请介绍有状态任务的处理方法。

有状态任务指的是网络任务的先后报文或数据帧之间存在依赖关系,后面的报文或数据帧依赖于前面报文或数据帧,这种依赖关系一般通过上下文(英文:context)信息进行管理。上下文信息可以用于标识和管理一条特定的任务流,例如,网络小型计算机接口(英文:internetsmallcomputersysteminterface,缩写:iscsi)连接,远程直接内存访问队列(英文:remotedirectmemoryaccessqueuepairs,缩写:rdmaqps)等业务在网络传输过程中对报文有顺序要求,故这些业务中的每项任务都使用独立的上下文信息来维护任务自身的状态信息。任务的上下文信息一般保存在服务器中,网卡在工作时通过dma的方式从服务器中获取任务的上下文信息到网卡内存中。

现有的网卡200的基本结构请参阅图2,主要包括主机接口201和网络接口202等任务接口、dma模块203、网卡内存205以及处理器206,各个模块之间通过总线(英文:bus)相连。

主机接口201是网卡与服务器主机之间的通信接口,用于传输网卡与服务器之间的数据或报文,一般为快速外部组件互连标准(英文:peripheralcomponentinterconnectexpress,缩写:pcie)接口,也可以为其它类型的接口,此处不做限定。

网络接口202是网卡与以太网络之间的通信接口,一般用于在二层(即数据链路层)收发以太网络的报文。

dma模块203用于网卡直接获取服务器主机内存中的数据。其中,dma模块203为可选的模块,具体可以如图2所示由一个硬件电路来实现,也可以集成在处理器206中,由处理器206来实现dma模块的功能。当dma模块如图2所示由硬件来实现时,既可以为网卡中的独立模块,也可以与主机接口201设置在一起。当网卡不需要获取服务器主机内存中的数据时,dma模块203也可以省略。

网卡内存205用于存储网卡需要使用到的数据信息,网卡内存205至少包括两个内存区:(一)程序内存区,用于存储网卡所需要使用到的任务程序;(二)数据内存区,用于存储网卡使用的哈希表、线性表、全局配置表等各种表格,以及上下文信息或其它网卡需要使用的数据信息。网卡内存205可以采用易失性存储介质(英文:volatilememory)来实现,如随机存取存储器(英文:random-accessmemory,缩写:ram)等,也可以由非易失性存储介质来实现(英文:non-volatilememory,缩写:nvm),如只读存储器(英文:read-onlymemory,缩写:rom)、闪存(英文:flash)等,网卡内存也可以由上述多种类型的存储器组合而成,此处不做限定。

处理器206可以由一个或多个cpu组成,每个cpu可以包括一个或多个核(英文:core),每个核可以运行一个或多个线程(英文:thread)。处理器206共运行多个线程,这些线程在逻辑上组成了处理器206的资源池,本申请着重介绍资源池中各线程的调度。此外,处理器206还包括处理器缓存,该处理器缓存被分配给各线程使用。具体的,资源池中的每个线程都分配有处理器缓存的一部分作为指令缓存空间(英文:instructioncache,简称:icache),用于暂存线程所要执行的程序指令;并分配有处理器缓存的另一部分作为数据缓存空间(英文:datacache,简称:dcache),用于暂存线程所要使用的数据。各线程的icache与dcache不在图2中一一展示。

网卡还可以包括上下文管理模块。上下文管理模块用于对任务的上下文信息进行管理,例如包括驱动dma模块203获取主机内存中的上下文信息、对上下文信息进行分块、通过查找全局配置表确定待加载的上下文等中的一项或多项。上下文管理模块为可选的模块,具体可以由一个硬件电路来实现,也可以集成在处理器206中由处理器206来实现上下文信息管理的功能。当上下文管理模块由硬件来实现时,既可以为网卡中的独立模块,也可以与处理器206设置在一起。在不需要对任务的上下文进行管理的情况下,上下文管理模块也可以省略。

此外,网卡还可以包括用于控制网卡的基本管理配置信息的管理处理器、面向产品生命周期各/环节的设计(英文:designforx,缩写:dfx)模块、用于管理数据收发队列以及处理器的命令队列的队列管理模块、用于进行时钟相位同步的锁相环(英文:phaselockedloop,缩写:ppl)、任务流的计时器(英文:timer)等模块中的一项或多项,本申请中不在图2中一一进行展示。网卡还可以根据任务需求设置其它功能模块,此处不一一赘述。

下面将在图2所示的网卡的基础上,介绍现有的任务处理方法的基本流程。

任务处理往往能够拆分成n个相互独立可以分别执行的执行阶段(为了便于描述以下简称阶段。本领域内的技术人员可以理解的,本申请中的阶段在本领域内还可以有其它类似的描述。例如,本领域文献中任务的“段”、“分段”、“部分”、“子任务”等描述均可以等同为本申请中任务的阶段,或英文文献中任务的“section”、“stage”、“part”、“phase”、“period”等描述均可以等同为本申请中的阶段)。现有技术中,预先将任务程序按照不同的阶段划分为n个程序段,依次为第一程序段、第二程序段、……第n程序段,其中第i程序段用于执行任务处理的第i阶段,n为不小于2的整数,i为不大于n的整数。每个程序段分别作为一个执行文件保存在网卡内存的程序内存区中。

网卡通过dma方式从服务器处获取任务的上下文信息,并保存在网卡内存的数据内存区。现有技术中,上下文信息也与该n阶段对应划分为n个信息块,依次为第一信息块、第二信息块、……第n信息块。其中第i信息块包括执行第i阶段的任务处理所要使用的上下文信息,即第i程序段要使用的上下文信息。由于某些上下文信息可能会被多个程序段使用,因此该n个信息块可以有重叠部分。

现阶段的技术中,处理器运行资源池中的线程进行任务处理的方法请参阅图3(a):具体的,处理器在资源池中选择一个线程作为主线程,以对资源池中的其它线程进行调度。主线程在确定待处理的报文(待处理的报文可以是上行报文也可以是下行报文)后,为待处理的报文每个的阶段的任务处理分配一个空闲的线程。以n=3为例:主线程从资源池空闲的线程中选择第一线程,处理器通过第一线程,加载待处理的报文和第一信息块到第一线程的dcache,并加载第一程序段到第一线程的icache,然后根据报文以及第一信息块,执行第一线程icache中的程序,以对报文进行第一阶段的处理;然后主线程选择空闲的第二线程,处理器通过第二线程,加载第一线程对报文的第一阶段的处理结果以及第二信息块到第二线程的dcache,并加载第二程序段到第二线程的icache,对报文进行第二阶段的处理;最后主线程选择空闲的第三线程,处理器通过第三线程,加载第二线程对报文的第二阶段的处理结果以及第三信息块到第三线程的dcache,并加载第三程序段到第三线程的icache,对报文进行第三阶段的处理。在第三线程得到对报文的第三阶段的处理结果后,网卡即完成了的完整的报文任务处理流程。

另外,现有技术中还采用流水线(英文:pipeline)机制以充分利用网卡的计算资源,具体原理如3(b)所示:下一封报文无需等待当前报文进行全部阶段的任务处理,第i线程在完成了对当前报文的第i阶段的处理后,可以直接处理下一封报文的第i阶段。这样就使得网卡能够并行处理多封报文,有利于提升任务的处理效率。

但是,上述两种任务处理方法任务处理存在多种缺陷。举例来说:处理器运行不同的线程执行任务的不同阶段,因此线程之间需要彼此拷贝阶段性的处理结果。例如,第二线程需要将第一线程对报文的第一阶段的处理结果拷贝到第二线程的dcache中,才能执行对报文的第二阶段的处理。同样的,第三线程需要将第二线程对报文的第二阶段的处理结果拷贝到第三线程的dcache中,才能执行对报文的第三阶段的处理。各线程之间相互拷贝阶段性的任务处理结果,会占用大量的计算资源,产生严重的时延,加大任务处理的开销。此外,由于各程序段由不同的线程运行,故每个程序段均需要提供完整的函数功能集。这样就导致任务程序的总体量较大,会占用过多的程序内存区空间。

为了解决上述问题,本申请在现有技术的基础上提供了新的任务处理方法以及网卡,以下将对其进行详细描述。

本申请中,任务程序也与任务处理的n个阶段对应划分为n个程序段,分别为第一程序段、第二程序段、……第n程序段。其中第i程序段用于执行任务的第i阶段,n为不小于2的整数,i为不大于n的正整数。处理器调整线程的指针指向第i程序段,即可通过线程进行第i阶段的任务处理。处理器在进行任务处理时,顺序执行各程序段。

上下文信息也与该n个阶段对应划分为n个信息块,依次为第一信息块、第二信息块、……第n信息块。其中第i信息块包括执行第i阶段的任务处理所要使用的上下文信息,即第i程序段要使用的上下文信息。由于某些上下文信息可能会被多个程序段使用,因此该n个信息块可以有重叠部分。

任务在演进更新时,阶段的划分随时可能发生变化。例如,同一任务,旧版本可能将任务处理按照执行顺序划分为n个阶段,而新版本可能将任务处理按照执行顺序划分为m个新阶段。此时上下文信息也要对应的进行重新划分,即划分为m个新信息块,其中第k新信息块包括执行第k新阶段的任务处理所需要使用的上下文信息,1≤k≤m。

上下文信息划分后得到的n个信息块的地址信息可以记录在一张全局配置表中,网卡在执行第i程序段时根据该全局配置表访问对应的第i信息块,该全局配置表保存在网卡内存的数据内存区中。其中,信息块的地址信息可以包括信息块相对于上下文信息的偏移量和长度,也可以为其它形式,此处不做限定。

若任务处理从n个阶段更新为m个新阶段,则全局配置表也应相应的进行更新。具体的,网卡可以接收主机下发的修改指令,该修改指令用于将全局配置表中记录的n个信息块的地址信息修改为m个新信息块的地址信息。表1是全局配置表的一个示例,其中,业务号用于标识任务的业务类型,如toe业务、roce业务等。任务号用于标识一个业务中包括的多种任务,如接收任务、发送任务等。阶段号用于标识任务的各个阶段,偏移量用于表示各阶段对应的信息块相对于上下文信息的偏移量,长度用于表示各阶段对应的信息块的长度。网卡根据当前任务的业务号、任务号和阶段号,能够确定对应信息块的偏移量和长度,进而获取对应的信息块。

表1仅用于形象的展示全局配置表的逻辑结构,全局配置表在实际应用中也可以为其它结构或配置其它的参数,此处不做限定。

在本申请的一些实施方式中,网卡也可以根据业务号、任务号和阶段号中的一个或两个参数来确定信息块,或根据其它参数来确定信息块,此处不做限定。

本申请中,网卡用于对接收到的待处理的p个报文进行任务处理,p为正整数。其中,该p个报文可以是网卡批量接收的,也可以是网卡在一段时间内逐个接收的,本申请中不做限定。网卡接收到该p个报文后,可以优先处理在前接收到的报文,其次处理在后接收到的报文,也可以不优先处理在前接收到的报文,本申请中不做限定。网卡将该p个报文全部并行处理,也可以在处理完该p个报文中的一个或多个报文后,再处理该p个报文中剩余未处理的报文,本申请中不做限定。

本申请中,网卡通过图4(a)、图4(b)或图6所示的实施例中介绍的任务处理方法,对该p个报文中的每个报文进行任务处理。为了便于描述,本申请实施例仅以在先接收的第一报文,以及在后接收的第二报文为例对本申请提供的任务处理方法进行介绍。该p个报文中的其它报文的处理方法与第一报文以及第二报文的处理方法类似,本申请实施例中不做赘述。

本申请中,该p个报文均对应处理器中的一个线程。为了便于描述,该p个报文中的第q报文对应的线程用第q线程来表示,q为不大于p的正整数。例如,第一报文对应第一线程,第二报文对应第二线程。

在本申请的一些应用场景中,某目标报文对应的目标线程处理完该目标报文后,网卡可以继续指定该目标线程对应新的报文。因此本申请的p个报文中,不同报文对应的线程可以相同也可以不同。即若q分别取值为q1以及q2,则第q1线程与第q2线程可以为同一个线程,也可以为不同的线程,其中q1、q2为不大于p且互不相等的正整数。

本申请提供的任务处理方法的基本流程请参阅图4(a)。图1和图2中的网卡在工作时执行该方法。

401、获取待处理的第一报文。

本实施例以网卡对第一报文的处理为例进行描述。首先,网卡获取待处理的第一报文。第一报文可以是上行报文也可以是下行报文。第一报文可以由网卡的网络接口从以太网处获取,可也可以由网卡的主机接口从服务器处获取,此处不做限定。

402、确定用于处理第一报文的第一线程;

网卡从处理器的资源池中寻找空闲的第一线程分配给第一报文,第一线程负责对第一报文执行完整的任务处理流程。

可选的,网卡的处理器中可以包括多个cpu,其中一个cpu作为主cpu执行本步骤402的操作。或,网卡处理器资源池中包括多个线程,其中一个线程作为主线程执行本步骤402的操作。

403、获取任务的上下文信息。

网卡可以通过dma模块从服务器处获取任务的上下文信息,并将上下文信息保存在网卡内存中。

本申请不限定步骤403与前面之间的先后关系,步骤403也可以位于步骤402甚至步骤401之前。在网卡内存中已经保存有任务处理的上下文信息的情况下,步骤403也可以省略。

404、通过第一线程对第一报文依次执行n个阶段的任务处理。

网卡执行完了步骤401~403后,即完成了任务流程的准备工作。之后处理器运行第一线程对第一报文依次执行任务的n个阶段的处理。具体的,处理器运行第一线程根据第j信息块以及第一报文的第j-1阶段的处理结果,对第一报文执行第j阶段的任务处理,得到第一报文的第j阶段的处理结果,其中j为不大于n的正整数。当j依次遍历了[1,n]中的所有整数后,第一线程就完成了对第一报文的任务处理,得到了第一报文的第n阶段的处理结果,也就是第一报文最终的任务处理结果。

特别指出的是,当j=1时,第一线程需要使用第一报文的第0阶段的处理结果,其中第0阶段可以理解为还未对第一报文进行处理,故第一报文的第0阶段的处理结果就是第一报文。

更为具体的,对于j=1,第一线程加载第一报文以及第一信息块到第一线程的dcache,并加载第一程序段到第一线程的icache,然后根据第一报文以及第一信息块,执行第一程序段,以对第一报文进行第一阶段的任务处理,得到第一报文的第一阶段的处理结果暂存在dcache中。

对于j≥2,在得到第j-1阶段的处理结果后,第一线程加载第j信息块到第一线程的dcache,并加载第j程序段到第一线程的icache,然后根据第一报文第j-1阶段的处理结果以及第j信息块,执行第j程序段,以对第一报文进行第j阶段的任务处理,得到第一报文的第j阶段的处理结果暂存在dcache中,然后若j<n,则将j加1并再次执行本段所描述的步骤。

其中,第一线程在执行第j阶段的任务处理时,可以直接使用第一线程的dcache中对第一报文的第j-1阶段的处理结果,无需从其它线程处拷贝。

网卡在完成了的对第一报文的任务处理后,可以将第一线程重新作为空闲的线程释放到资源池中,使得第一线程能够处理网卡后续接收到的报文。

网卡在完成了对第一报文的任务处理后,可以将第一报文的处理结果按照预定的转发路径,通过网络接口转发到以太网中,或通过主机接口转发给服务器。

将图4(a)所示的实施例与现有技术进行对比可以发现:现有技术中采用不同的线程执行不同阶段的任务处理,而本申请仅采用一个线程执行所有阶段的任务处理。由于本申请仅使用了一个线程,因此就不需要在多个线程之间相互拷贝任务的阶段性处理结果,减少了拷贝操作消耗的资源和时延,降低了任务处理开销。且由于本申请仅使用了一个线程,因此程序只需要提供一次函数功能集即可,不需要为每个程序段都提供完整的函数功能集,减小了程序的体量,节约了存储空间。因此,本申请提供的任务处理流程与现有技术相比,具有较好的性能。

上文在现有技术的介绍部分中提到,任务程序分为n个程序段,各程序段由彼此独立的线程运行,故各程序段均作为一个独立的可执行文件保存在网卡内存中。在对任务处理流程进行改进时,往往需要修改每个可执行文件。例如,假设任务流程原本分为3个阶段,则任务程序原本分为3个可执行文件保存在网卡内存中。若用户希望将任务流程细化为4个程序段以增大任务的吞吐量,则需要将原本的3个可执行文件重新划分为4个可执行文件,该操作涉及3个可执行文件的修改,工作量较大,灵活性较差,不利于任务程序的发展演进。

与现有技术不同的,本申请中由一个线程来执行完整的任务处理流程,故整个任务程序可以仅作为一个可执行文件保存在网卡内存的程序内存区中。由于任务程序仅为一个可执行文件,因此在对任务处理流程进行改进时只需要修改一个可执行文件即可,涉及的可执行文件数据较少,修改工作量小灵活性高,有利于任务程序的发展演进。

可选的,若第一线程的icache空间足够,第一线程也可以一次性的将多个甚至所有程序段加载到icache中,然后通过指针来逐阶段执行各程序段。

值得指出的是,现有技术使用不同的线程处理不同的任务阶段,使得多个报文可以按照pipeline方式并行处理,进而提高了任务的吞吐量和效率。相比之下,本申请使用一个线程处理所有的任务阶段,因此无法直接照搬现有的pipeline方式。为此,本申请在图4(a)所示实施例的基础上引入了一种新的pipeline方式,其原理请参阅图4(b):

网卡获取第一报文后,处理器分配第一线程对第一报文进行处理。若之后网卡又获取了待处理的第二报文,则处理器分配空闲的第二线程对第二报文进行处理。若之后网卡又获取了待处理的第三报文,则处理器分配空闲的第三线程进行处理,以此类推。单个线程具体的处理方法与图4(a)所示的实施例类似,此处不做赘述。其中,处理器通过第一线程执行第j阶段的任务处理时需要使用第j信息块,在此过程中可能会对第j信息块进行改写。为了避免发生数据读写冲突,应避免其它线程在此时访问第j信息块。因此,若第二线程对第二报文执行完第j-1阶段的任务处理时,第一线程还未对第一报文执行完第j阶段的任务处理,则处理器可以将第二线程暂时挂起,待第一线程执行完对第一报文的第j阶段的任务处理后,第二线程再加载第j信息块,并根据第j信息块以及第二报文的第j-1阶段的处理结果对第二报文执行第j阶段的任务处理。其余更多的线程也可以采用类似的方法调度,此处不做赘述。本申请通过这样的方法,将多个线程按照阶段错开调度,使得多个线程可以在不发生读写冲突的情况下并行处理多个报文,实现了pipeline机制,提高了任务的吞吐量和效率。

可选的,在第一线程执行第j阶段的任务处理时,网卡可以锁定第j信息块,以保证第j信息块无法被其它线程访问。具体的锁定方式可以为将第j信息块的标志位翻转,也可以为其它锁定方式,此处不做限定。在第一线程执行完对第一报文的第j阶段的任务处理后,网卡再解锁第j信息块。这样在采用pipeline方式多线程并行处理报文时,能够更安全的避免多个线程同时改写一个信息块所造成的访问冲突。举例来说:网卡在第一线程根据第j信息块对第一报文执行第j阶段的任务处理时,为第一线程锁定第j信息块。此时第二线程待对第二报文执行第j阶段的任务处理,但由于第j信息块已经被锁定,故第二线程获取不到第j信息块,网卡将第二线程暂时挂起。在第一线程执行完对第一报文的第j阶段的任务处理后,网卡解锁第j信息块。然后网卡再为第二线程加载第j信息块,并唤醒第二线程对第二报文执行第j阶段的任务处理。

可选的,当网卡解锁了为第一线程锁定的第j信息块后,若当前j<n,则网卡可以自动为第一线程锁定第j+1信息块。

本申请可以采用图2所示的网卡200来实现图4(a)与图4(b)所示的任务处理方法。其中,任务程序保存在网卡内存205的程序内存区中,上下文信息以及全局配置表保存在网卡内存205的数据内存区中,图4(a)与图4(b)中所描述的步骤则由处理器206来执行。网卡的具体运行方式可以参考图4(a)与图4(b)所示的方法实施例的相关描述,此处不做赘述。

图4(a)与图4(b)所示的任务处理方法主要由网卡中的处理器采用软件层面的方法来执行。由于处理器的可编程性好,因此使用处理器来处理任务具有很高的灵活性。但是处理器的价格高、能耗大,因此其达到的性能与成本相比并不尽如人意。相比之下,硬件电路往往速度快、能耗小、价格低,性能高,因此具有比处理器更高的性价比。

为此,本申请对现有的网卡进行了改进,以结合软件与硬件的优点,在保留网卡的灵活性的同时提升网卡的性能。改进后的网卡500的结构请参阅图5(a),与现有技术相比,本申请提供的网卡除了包括现有的主机接口501和网络接口502等任务接口、网卡内存505以及处理器506之外,还新增了调度器(英文:scheduler)508。主机接口501、网络接口502、网卡内存505的功能与现有的网卡基本相同,具体可以参考图2所示的网卡的描述。下面主要介绍处理器506与调度器508。

本申请在网卡中设置了调度器508。调度器508由硬件电路搭建而成,用于协调加速器507、处理器506以及网卡的其它模块之间的交互配合。具体的:调度器508用于在主机接口501或网络接口502等任务接口接收到第一报文后,确定用于处理第一报文的第一线程,并为第一线程加载第一报文,使得处理器506通过第一线程对第一报文依次执行n个阶段的任务处理。

可选的,调度器508还用于在处理器506运行第一线程对第一报文执行第j阶段的任务处理器之前,为第一线程加载第j信息块。

可选的,调度器508还用于:在任务接口接收到第二报文后,确定用于处理第二报文的第二线程,并为第二线程加载第二报文。在处理器运行第二线程对第二报文执行第j阶段的任务处理器之前,为第二线程加载第j信息块。

可选的,所述调度器508待第一线程执行完对第一报文第j阶段的任务处理后,再为第二线程加载第j信息块。

可选的,调度器508在处理器运行第一线程来对第一报文执行第j阶段的任务处理时,为第一线程锁定第j信息块,使得第j信息块无法被除了第一线程之外的其它线程访问。在第一线程执行完对第一报文的第j阶段的任务处理后,调度器508解锁第j信息块,使得第j信息块可以被任意的线程访问。

可选的,调度器508在为第一线程解锁第j信息块后,若当前j<n,则可以自动的为第一线程锁定第j+1信息块,无需等待第一线程下发锁定第j+1信息块的指示。

可选的,调度器508在处理器通过第一线程执行完了第一报文的第j阶段的任务处理后,可以将第一线程暂时挂起,并在调度器508为第一线程加载了第j+1信息块后,再唤醒第一线程。

可选的,网卡内存505中还包括全局配置表,用于记录n个信息块的地址信息。调度器508在为第一线程加载第j信息块时,具体根据该全局配置表中第j信息块的地址信息,来为第一线程加载第j信息块。

可选的,任务处理的程序指令作为一个完整的可执行文件保存在网卡内存505中,该可执行文件包括n个程序段,其中第i程序段中包括用于执行第i阶段的任务处理的程序指令。调度器508在处理器通过第一线程对第一报文执行第j阶段的任务处理之前,还用于为第一线程加载第j程序段,并调整第一线程的指针指向第j程序段,使得第一线程能够根据执行第j程序段。

本申请中处理器506依然包括多个线程构成的资源池,具体可以参考图2所示的实施例的相关介绍,此处不做赘述。处理器506主要用于运行第一线程对第一报文依次执行n个阶段的业务处理,具体的,处理器506运行第一线程循环执行如下步骤,使得j遍历[1,n]中的整数,最终得到第一报文的第n阶段的任务处理结果:根据第j信息块以及第一报文的第j-1阶段的处理结果,对第一报文执行第j阶段的任务处理,得到第一报文第j阶段的处理结果。其中,第一报文的第0阶段的处理结果为第一报文。

可选的,若任务接口接收了第二报文,则处理器506还用于循环执行如下步骤,使得j遍历[1,n]中的整数,最终得到第二报文的第n阶段的任务处理结果:根据第j信息块以及第二报文的第j-1阶段的处理结果,对第二报文执行第j阶段的任务处理,得到第二报文第j阶段的处理结果。其中,第二报文的第0阶段的处理结果为第二报文。

可选的,处理器506可以待通过第一线程执行完对第一报文的第j阶段的任务处理后,再通过第二线程执行对第二报文的任务处理。

处理器在对报文进行任务处理时,一般需要先进行多种加速操作。举例来说,处理器需要预先对报文进行数据完整性(英文:dataintegrityfield,缩写:dif)检查来确保报文是否完整,具体包括crc、ipchecksum等。crc、checksum等dif校验都可以视为报文的加速操作。此外,packetparse、packetedit、查表(即查找报文匹配表项)等操作也可以视为报文的加速操作。现有技术中这些加速操作是由处理器自行完成的,一般需要根据任务需要的加速功能在处理器的cpu上搭建加速引擎,得到定制的cpu。定制得到的cpu造价较高,且一旦搭建好后便难以改动其硬件结构。

但是与复杂的任务处理操作不同,加速操作往往逻辑简单、重复度高,功能单一,通过简单的硬件电路就能够实现。因此可选的,本申请在网卡中设置了独立的加速器507,将报文的加速操作处理集中到加速器507来执行,请参阅图5(b)。加速器507是纯硬件电路,具体可以是将多种加速功能集成为一体的电路,也可以是多个加速单元电路的集合。例如,加速器507中可以包括如下加速单元中的一项或多项:用于进行crc校验的crc单元5071、用于进行checksum校验的checksum单元5072、数据包解析器(英文:packetparser,简称:parser)5073、数据包编辑器(英文:packeteditor,缩写:pe)5074、用于进行查表操作的查表单元5075。加速器507中还可以包括其它的加速单元,也可以包括上述加速单元中几个单元的组合电路,此处不做限定。加速器507在任务接口接收到第一报文后,对第一报文进行加速操作,得到加速后的第一报文。上文中提到的调度器508为第一线程加载第一报文,具体可以是为第一线程加载该加速后的第一报文;上文中提到的第一报文的第0阶段的处理结果,具体可以是该加速后的第一报文。

本申请中,加速器507负责处理报文的一种或多种加速处理,减少了处理器506执行的加速处理的种类。在加速器507负责报文的全部加速处理的情况下,处理器506甚至不需要执行任何加速操作。因此,本申请中的处理器506可以采用普及通用的cpu,无需特地定制具有多种加速引擎的cpu,能够进一步的降低网卡成本。

此外,本申请提供的网卡还可以包括可选模块dma模块503,dma模块503与现阶段的dma模块203基本相同,此处不做赘述。本申请提供的网卡还可以包括上下文管理模块、管理处理器、dfx模块、队列管理模块、ppl、timer等模块中的一项或多项,具体可以参考图2所示的实施例中的相关描述,此处不做赘述。

基于图5所示的网卡结构,本申请又提供了一种需要软件硬件相互协调的任务处理方法,其流程请参阅图6,包括:

601、获取待处理的第一报文。

本实施例以网卡对第一报文的处理为例进行描述。首先,网卡获取待处理的第一报文。第一报文可以是上行报文也可以是下行报文。第一报文可以由网卡的网络接口从以太网处获取,可也可以由网卡的主机接口从服务器处获取,此处不做限定。

602、加速器对第一报文进行加速处理,并将加速后的第一报文发送给调度器;

本实施例以网卡对第一报文的处理为例进行描述。首先,加速器对第一报文进行加速处理。加速处理包括crc校验、checksum校验、数据包编辑、数据包解析、查表等加速操作中的一项或多项。

第一报文经过加速处理后变为元数据(metadata)的形式,加速器将metadata形式的第一报文发送给调度器。

603、调度器确定用于处理第一报文的第一线程,并为第一线程加载加速后的第一报文;

与图4所示的实施例不同的,本实施例中调度资源池中的各个线程由调度器来执行,而不再由主cpu或者主线程执行。故本步骤中,调度器从处理器的资源池中寻找空闲的第一线程分配给第一报文。

调度器确定了第一线程后,将metadata形式的第一报文加载到第一线程的dcache中。

604、dma模块获取任务的上下文信息保存在网卡内存中;

dma模块从服务器处获取任务的上下文信息,并将上下文信息保存在网卡内存中。

本申请不限定步骤601至步骤604的先后顺序,步骤604可以在步骤601至603中任一项之前,步骤602与603的顺序也可以颠倒,只要步骤602与603在步骤601后即可。

与实施例4类似的,本实施例中任务处理也分为n个阶段,任务程序也分为第一程序段、第二程序段……第n程序段,上下文信息也分为第一信息块、第二信息块……第n信息块,具体的划分方法可参阅实施例4中的描述,此处不做赘述。信息块的划分记录在如表1所示的全局配置表中,并保存在网卡内存的数据内存区里。待执行第i阶段的任务处理时,调度器根据该全局配置表访问对应的第i信息块。

网卡执行完了步骤601至604后,即完成了任务流程的准备工作,之后网卡从j=1开始,循环执行步骤605和606,使得第一线程对第一报文依次执行任务的n个阶段的处理:

605、调度器为第一线程加载第j程序段以及第j信息块。

调度器将第j信息块从网卡内存加载到第一线程的dcache中,并将第j程序段从网卡内存加载到第一线程的icache中。

调度器还可以修改第一线程的指针指向第j程序段,然后唤醒第一线程,使得第一线程能够执行第j程序段。

606、处理器通过第一线程,根据第j信息块以及第一报文的第j-1阶段的处理结果,对第一报文执行第j阶段的任务处理,得到第一报文的第j阶段的处理结果。

处理器通过第一线程,根据第j信息块以及第一报文的第j-1阶段的处理结果执行第j程序段,以对第一报文进行第j阶段的任务处理,得到第一报文的第j阶段的处理结果暂存到第一线程的dcache。其中,第一报文的第j-1阶段的处理结果也由第一线程处理获得,故无需从其它线程处拷贝。

特别指出的是,当j=1时,第一报文的第0阶段的处理结果就是第一报文。

若执行完步骤606后j<n,则将j加1并再次执行步骤605。

当对j=1,2,……n执行了步骤605与606后,网卡就完成了对第一报文的任务处理,对第一报文的第n阶段的任务处理结果,就是第一报文最终的任务处理结果。

在完成了的对第一报文的任务处理后,调度器可以将第一线程重新作为空闲的线程释放到资源池中。

网卡在完成了对第一报文的任务处理后,可以将第一报文按照预定的转发路径,通过网络接口转发到以太网中,或通过主机接口转发给服务器。

本实施例与图4(a)所示的实施例类似的,通过采用一个线程执行所有阶段的任务处理,降低了任务处理开销,减小了程序的体量,并提高了程序的灵活性,进而相对于现有技术而言能够全面提高了网卡进行任务处理的性能。此外,本实施例将逻辑复杂、计算开销大、有较高演进要求的任务处理操作仍交由处理器的线程执行,但是将逻辑简单、计算开销小、重复性高的加速操作交由硬件的加速器来执行,这样就兼顾了软件的灵活性与硬件的高性能的优点,提高了网卡的任务处理性能。

其中,步骤604为可选步骤。在网卡内存中已经保存了上下文信息或网卡中未设置dma模块等情况下,步骤604也可以省略。

其中,步骤602为可选步骤,在网卡中未设置加速器或报文的加速操作由处理器来执行等情况下,可以省略步骤602,由处理器运行线程来执行报文的加速操作。

可选的,调度器在加载第j程序段以及第j信息块时,可以将第一线程暂时挂起(英文:suspend),被挂起的第一线程会停止任务处理操作,能够节约功耗。待第j信息块加载完后,调度器再将第一线程唤醒继续执行任务处理操作。

可选的,在调度器加载第j程序段以及第j信息块时,第一线程也可以先执行第j阶段的一些不需要使用上下文的操作,以节约任务处理时间。

可选的,若第一线程的icache空间足够,第一线程也可以一次性的将多个甚至所有程序段加载到icache中,然后通过指针来逐阶段执行各程序段。

可选的,若在任务处理流程中仍需要进行加速操作,如需要进行内部查表等操作,则调度器再次调度查表单元等加速器进行加速操作。

图6所示的实施例仅从第一报文的角度介绍了网卡的任务处理流程。若当前还有第二报文、第三报文或更多报文待处理,则网卡按照图6所示的方法,通过处理器分配第二线程、第三线程或其它线程进行处理,此处不做赘述。网卡还可以采用图4(b)所示的pipeline方式对多封报文进行并行处理,即:若处理器通过第二线程执行完第j-1阶段时,第一线程还未执行完第j阶段,则调度器暂时挂起第二线程,待第一线程执行完第j阶段后,调度器再将第二线程唤醒,并为第二线程加载第j信息块执行第j阶段。调度器对其余更多的线程也可以采用类似的方法调度,此处不做赘述。这样就能够将多个线程按照阶段错开调度,使得多个线程可以在不发生读写冲突的情况下并行处理多个报文,进而提高了任务的吞吐量和效率。

可选的,图4(b)所示的实施例中提到锁定与解锁信息块的操作,也可以由调度器来完成。例如,在第一线程执行第j阶段时,调度器锁定第j信息块,以保证第j信息块无法被其它线程访问。若此时第二线程待执行第j阶段的任务处理,则由于第二线程无法获取第j信息块,调度器可以将第二线程暂时挂起。第一线程执行完第j阶段后,向调度器发送第一指示信息,以告知调度器当前阶段的任务处理操作执行完成。调度器根据第一指示信息解锁第j信息块,并为第二线程加载第j信息块,然后唤醒第二线程执行第j阶段的任务处理。这样即使采用pipeline方式并行处理报文时,也能够避免多个线程同时改写一个信息块所造成的访问冲突。又可选的,由于任务各阶段是顺序执行的,因此调度器在解锁了为第一线程锁定的第j信息块后,可以主动的为第一线程锁定第j+1信息块,不必等待第一线程下发第二指示信息告知锁定第j+1信息块。这样能够减少线程与调度器之间的指令交互,进一步的提升网卡的性能。

值得指出的是,任务处理的某些阶段也有可能为空操作,若跳过该空操作阶段,则应同时跳过对空操作阶段对应的信息块的锁定、加载和解锁操作。但是本实施例中,各阶段的信息块的位置是由调度器顺序查找全局配置表获得的。若跳过某些信息块的锁定、加载和解锁操作,需要调度器能够跳跃地查找全局配置表,这样就对调度器的智能性有较高的要求。而调度器是由纯硬件电路搭建的,提升调度器的智能性必然导致调度器的电路设计的较为复杂,进而大幅度增高硬件的功耗、成本和电路面积。

为了解决上述问题,在本申请的一些实施例中,处理器的线程在空操作阶段可以不进行任务处理操作,但仍向调度器发送指示信息指示当前阶段的任务处理操作执行完成。调度器则按照全局配置表的记录,顺序的处理各阶段的信息块即可。以第j阶段为空操作为例:在第一线程执行完第j-1阶段的任务处理后,调度器解锁第j-1信息块,并主动为第一线程锁定和加载第j信息块。第一线程确定第j阶段为空操作,于是不执行任务处理,但仍然向调度器发送指示信息。调度器根据该指示信息,解锁第j信息块,并主动为第一线程锁定和加载第j+1信息块。通过这样的方法,使得调度器可以根据全局配置表,按照从第1阶段到第n阶段的顺序,依次为线程锁定、加载、解锁每个阶段的信息块,而不必跳过空操作阶段的信息块。这样就降低了对调度器智能性的需求,能够简化硬件成本。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,模块和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

本申请所述的“第一”、“第二”等描述,仅用于区分不同的技术特征,并不用于对技术特征进行进一步的限定。举例来说,本申请中的“第一线程”,在实际应用中也可以作为“第二线程”。本申请中的“第一报文”,在实际应用中也可以作为“第二报文”。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,模块或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用程序功能单元的形式实现。

所述集成的单元如果以程序功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以程序产品的形式体现出来,该计算机程序产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1