首页 / 智能网卡侧的异常处理方法和装置

智能网卡侧的异常处理方法和装置无效专利 发明

技术领域

[0001] 本发明涉及通信技术领域,尤其是涉及一种智能网卡侧的异常处理方法和装置。

相关背景技术

[0002] 云化是目前电信设备的一个重要发展方向,而网络和计算的虚拟化是云化的基础之一,目前的服务器基本都是基于中央处理器(如X86)+网络接口卡(Network Interface Card,NIC)平台来实现网络和计算的虚拟化。传统的网络接口卡,比如英特尔(Intel)的网卡芯片i350/82599,不支持网络流量的协议处理,对网络虚拟化提供的支持有一定的限制,在网络流量比较大时,会耗费中央处理器大量资源进行处理。鉴于这种情况,基于虚拟化技术,提出了智能网卡(Intelligent Network Interface Card,INIC)的概念,使网络接口卡拥有自己独立的处理器,能够支持网络流量的协议处理,减小了中央处理器的负荷。搭载智能网卡的中央处理器一侧,相当于主设备(host),与中央处理器建立通信连接的智能网卡,相当于从设备,中央处理器与智能网卡通常通过新一代PCI总线(PCI Express,PCIE)接口建立通信连接,目前的智能网卡一般为PCIE网卡。
[0003] 由于智能网卡拥有独立的处理器,因此能够加载自己的操作系统,运行相应的网络协议处理软件与host进行通信。然而智能网卡上的应用有时会发生异常,当智能网卡侧发生异常时,host侧可能会表现为与智能网卡通信异常,但具体智能网卡上发生了什么异常,则无从得知。由于不知道智能网卡侧的异常信息,导致异常问题不能得到快速解决。

具体实施方式

[0037] 应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0038] 参见图1,提出本发明智能网卡侧异常的处理方法一实施例,所述方法应用于服务器,包括以下步骤:
[0039] S11、中央处理器申请一段内存空间,并将内存空间的信息传递给智能网卡。
[0040] 本发明实施例中,中央处理器(相当于host)与智能网卡通过通信接口建立通信连接,二者分别搭载独立的操作系统,如Linux系统。中央处理器和智能网卡上运行虚拟化相关的应用,共同完成网络协议的处理,且中央处理器和智能网卡上的应用彼此通过通信接口进行通信。
[0041] 在某些实施例中,也可以将具有中央处理器(如x86处理器)的服务器作为host,智能网卡作为EP(PCIE设备的一种工作模式,可以简单理解为从设备)通过通信接口(如PCIE接口)与服务器建立通信连接,智能网卡和host分别运行独立的操作系统。
[0042] 中央处理器申请一段内存空间,该内存空间优选为一段连续的内存空间,然后将该内存空间的内存基址、内存长度等信息通过通信接口传递给智能网卡,以将该内存空间分配给智能网卡记录异常信息。内存空间的连续性,以Linux系统为例,可以借助Linux保留内存或者巨页的方式实现,或者也可以采用现有的其它方式实现,在此不赘述。
[0043] 可选地,所述通信接口为PCIE接口,即中央处理器与智能网卡通过PCIE接口连接,则中央处理器通过PCIE将内存空间的信息传递给智能网卡。具体的,中央处理器将该内存空间的信息写入智能网卡对应的PCIE存储空间(pcie memory),以便于智能网卡直接从其对应的PCIE存储空间获取该内存空间的信息。
[0044] S12、智能网卡获取内存空间的信息。判断是否发生异常,当发生异常时,执行下一步骤S13。
[0045] 智能网卡通过通信接口获取中央处理器传递的内存空间的内存基址、内存长度等信息,从而可以根据该信息访问该内存空间。
[0046] 可选地,当通信接口为PCIE接口,即中央处理器与智能网卡通过PCIE接口连接时,智能网卡直接从其对应的PCIE存储空间中读取中央处理器分配的内存空间的信息。
[0047] S13、智能网卡获取异常信息,并将异常信息写入内存空间。
[0048] 当智能网卡侧的某个应用发生异常时,智能网卡首先从用户态获取异常信息,然后将异常信息写入中央处理器分配的内存空间。
[0049] 由于中央处理器分配的内存空间的长度是固定的,为了防止异常信息的覆盖,以及防止写入的异常信息长度超过分配的内存长度而导致信息溢出,本发明实施例优选采用以下方式来写入信息:智能网卡每次写入异常信息时,均为异常信息添加标记,同时写入的位置从内存基址开始依次向后偏移,直到超过内存长度时,再从内存基址重新写入,覆盖之前写入的内容,以保证内存空间中记录的异常信息是最新的。
[0050] 为异常信息添加的标记可以为前缀或后缀,该前缀或后缀的内容可以为当前的系统时间,或者为逐次累加的数字。逐次累加数字时,初始数字优选为1或0,当然也可以是任意数字,后续每次写入时只要在前一次的数字上加1即可。
[0051] 可选地,当内存空间为连续的内存空间时,智能网卡则调用直接存储器存取(Direct Memory Access,DMA)接口,通过DMA接口将异常信息写入内存空间,以实现快速写入。DMA是指存储器和外设接口之间进行直接数据交换而不需要通过处理器暂存的存取方式。
[0052] S14、中央处理器获取内存空间中的异常信息。
[0053] 中央处理器读取分配给智能网卡的内存空间中的内容,获取其中的异常信息,然后可以将该异常信息输入特定的文件,也可以直接在屏幕上显示。
[0054] 本发明实施例智能网卡侧异常的处理方法,通过host(中央处理器)侧为智能网卡侧分配一段内存空间,当智能网卡侧发生异常时,智能网卡则将异常信息写入内存空间中,实现了智能网卡侧异常信息的记录,host侧可以从内存空间中获取异常信息,实现了异常信息从智能网卡向host的传递。本发明的方法,相当于智能网卡将异常信息直接写入host的内存中,并在host上存储智能网卡侧的异常日志。通过对智能网卡侧异常信息的记录,使得技术人员可以参考异常信息来排除故障,提高了异常问题的解决速度。本发明的方法具有通用性,可以适用于现有的各种服务器或云化系统。
[0055] 参见图2,提出本发明智能网卡侧异常的处理装置一实施例,所述装置应用于服务器,包括中央处理器100和智能网卡200,中央处理器100(相当于host)与智能网卡200通过通信接口(如PCIE接口)建立通信连接,二者分别搭载独立的操作系统,如Linux系统。中央处理器100和智能网卡200上运行虚拟化相关的应用,共同完成网络协议的处理,且中央处理器100和智能网卡200上的应用彼此通过通信接口进行通信。中央处理器100包括一异常信息获取模块110,智能网卡200包括一异常信息记录模块210,其中:
[0056] 异常信息获取模块110:用于申请一段内存空间,并将该内存空间的信息传递给智能网卡200,以将该内存空间分配给智能网卡200进行异常信息的记录;获取内存空间中的异常信息。
[0057] 异常信息记录模块210:用于获取中央处理器100分配的内存空间的信息,以根据该信息访问该内存空间,当发生异常时,获取异常信息,并将异常信息写入该内存空间。
[0058] 如图3所示,异常信息获取模块110包括申请单元111、传递单元112和第二获取单元113,其中:
[0059] 申请单元111:用于申请一段内存空间,获取该内存空间的内存基址、内存长度等信息。该内存空间优选为一段连续的内存空间,内存空间的连续性,以Linux系统为例,可以借助Linux保留内存或者巨页的方式实现,或者也可以采用现有的其它方式实现,在此不赘述。
[0060] 传递单元112:用于将申请单元111申请获取的内存空间的内存基址、内存长度等信息通过通信接口传递给智能网卡200,以将该内存空间分配给智能网卡200记录异常信息。
[0061] 当中央处理器100与智能网卡200通过PCIE接口连接时,传递单元112通过PCIE将内存空间的信息传递给智能网卡200。具体的,传递单元112将内存空间的信息写入智能网卡200对应的PCIE存储空间,以便于智能网卡200直接从其对应的PCIE存储空间获取该内存空间的信息。
[0062] 第二获取单元113:读取分配给智能网卡200的内存空间中的内容,获取其中的异常信息,然后可以将该异常信息输入特定的文件,也可以直接在屏幕上显示。
[0063] 如图4所示,异常信息记录模块210包括第一获取单元211和写入单元212,其中:
[0064] 第一获取单元211:用于通过通信接口获取中央处理器100分配的内存空间的内存基址、内存长度等信息,以使写入单元212可以根据该信息访问该内存空间。
[0065] 当通信接口为PCIE接口,即中央处理器100与智能网卡200通过PCIE接口连接时,第一获取单元211直接从其对应的PCIE存储空间中读取中央处理器100分配的内存空间的信息。
[0066] 写入单元212:用于当智能网卡200侧的某个应用发生异常时,从用户态获取异常信息,然后将异常信息写入中央处理器100分配的内存空间。
[0067] 由于中央处理器100分配的内存空间的长度是固定的,为了防止异常信息被覆盖,以及防止写入的异常信息长度超过分配的内存长度而导致信息溢出,本发明实施例优选采用以下方式来写入信息:写入单元212每次写入异常信息时,均为异常信息添加标记,同时写入的位置从内存基址开始依次向后偏移,直到超过内存长度时,再从内存基址重新写入,覆盖之前写入的内容,以保证内存空间中记录的异常信息是最新的。
[0068] 为异常信息添加的标记可以为前缀或后缀,该前缀或后缀的内容可以为当前的系统时间,或者为逐次累加的数字。逐次累加数字时,初始数字优选为1或0,当然也可以是任意数字,后续每次写入时只要在前一次的数字上加1即可。
[0069] 可选地,当内存空间为连续的内存空间时,写入单元212则调用直接存储器存取(Direct Memory Access,DMA)接口,通过DMA接口将异常信息写入内存空间,以实现快速写入。DMA是指存储器和外设接口之间进行直接数据交换而不需要通过处理器暂存的存取方式。
[0070] 本发明实施例智能网卡侧异常的处理装置,通过host(中央处理器)侧的异常信息获取模块为智能网卡侧分配一段内存空间,当智能网卡侧发生异常时,智能网卡侧的异常信息记录模块则将异常信息写入内存空间中,实现了智能网卡侧异常信息的记录,host侧可以从内存空间中获取异常信息,实现了异常信息从智能网卡向host的传递。本发明的方法,相当于智能网卡将异常信息直接写入host的内存中,并在host上存储智能网卡侧的异常日志。通过对智能网卡侧异常信息的记录,使得技术人员可以参考异常信息来排除故障,提高了异常问题的解决速度。本发明的装置具有通用性,可以适用于现有的各种服务器或云化系统。
[0071] 以下参见图5-图8,通过一实例对本发明的技术方案进行详细说明:
[0072] 如图5所示,为应用本发明实施例智能网卡侧异常的处理方法的服务器的结构示意图。其中,服务器包括主设备(以下简称host)和智能网卡(以下简称INIC),host为中央处理器(如X86处理器),INIC支持PCIE接口,将服务器的PCIE接口扩展为标准网口,通过PCIE插槽与host连接。host和INIC运行独立的操作系统,例如,host加载Linux系统,INIC加载Linux系统。host和INIC上运行虚拟化相关的应用,共同完成网络协议的处理,host和INIC上的应用彼此通过PCIE进行通信,如图1所示,虚拟应用(virtual app)跨越host与INIC。Exclog和InicExclog两个模块(或称进程)分别在host和INIC上运行,其中,Exclog相当于异常信息获取模块,InicExclog相当于异常信息记录模块。
[0073] 如图6所示,为服务器host侧的Exclog模块进行异常信息获取操作的示意图。其中,host侧的Exclog模块主要完成两个工作:一是通过函数ExcMemInit初始化内存空间,并通过函数ExcMemTran将内存空间的信息传递给INIC,实现内存空间的分配;二是通过函数ExcLogShow读取内存空间中的异常信息。其中,ExcMemInit相当于申请单元,ExcMemTran相当于传递单元,ExcLogShow相当于第二获取单元。
[0074] Exclog模块初始化时调用函数ExcMemInit,申请一段连续的内存空间。内存空间的连续可以借助Linux保留内存或者巨页的方式实现。在申请内存空间前,ExcMemInit首先判断标志位MemInitFlag是否为1;如果为1,标志内存空间已分配,直接退出;如果为0,标志内存空间还未分配,则申请一段连续的内存空间,进行内存空间的分配。标志位MemInitFlag的初始值为0,函数ExcMemInit在第一次内存分配成功后置为1。
[0075] 内存空间确定后,Exclog模块再调用函数ExcMemTran,将内存空间的内存基址、内存长度等信息写入INIC对应的PCIE存储空间(pcie memory),便于INIC获取host分配的内存空间的信息。在写入内存空间的信息前,ExcMemTran首先判断标志位MemInitFlag是否为0;如果为0,标志内存空间还未分配,直接退出;如果为1,标志内存空间已分配,则写入内存空间的信息。
[0076] 最后,Exclog模块调用函数ExcLogShow读取分配给INIC的内存空间中的内容,获取异常信息,然后可以将异常信息输入特定的文件,也可以直接显示在屏幕上。在读取内存空间中的异常信息前,ExcLogShow首先判断标志位MemInitFlag是否为0;如果为0,标志内存空间还未分配,直接退出;如果为1,标志内存空间已分配,则读取内存空间中的异常信息。
[0077] 如图7所示,为服务器INIC侧的InicExcLog模块进行异常信息记录操作的示意图。在INIC侧,为了便于多个应用通过系统调用进行异常信息记录,可以将异常信息记录相关的主体功能做成ko的模式,直接加载到内核。其中,InicExcLog模块初始化时(即图中的module_init),在INIC文件系统下生成字符设备文件/dev/exc_log,之后各个应用可以通过该字符设备文件进行系统调用,调用InicExcLog模块内核态的功能函数,具体调用过程将在后面图8中进行详细说明。InicExcLog模块关闭异常信息记录功能时(即图中的module_exit),则删除字符设备文件/dev/exc_log。
[0078] InicExcLog模块为用户态提供的系统调用功能有两个,一个是通过函数MemInit获取host分配的内存空间的信息,另一个是通过函数LogWrite向内存空间写入异常信息。其中,MemInit相当于第一获取单元,LogWrite相当于写入单元。
[0079] InicExcLog模块调用函数MemInit从INIC对应的PCIE存储空间中读取host分配的内存空间的内存基址内存长度等信息。MemInit在读取内存空间的信息前,首先判断标志位ExcMemReady是否为1;如果为1,标志内存空间的信息已经获取,则不再往下执行,并将标志位的值返回给用户态;如果为0,则继续往下执行,当读取到的内存长度值为0时,说明host没有执行分配内存的操作,为标志位ExcMemReady赋值0,反之,当读取到内存长度值不不为0时,为标志位ExcMemReady赋值1,并将标志位的值返回给用户态。
[0080] InicExcLog模块调用函数LogWrite向内存空间写入异常信息。LogWrite在写入异常信息前,首先判断标志位ExcMemReady是否为0;如果为0,标志内存空间的信息尚未获取,则直接退出;如果为1,则继续往下执行,先从用户态获取要异常信息,再调用DMA接口进行DMA操作,将异常信息写入host分配的内存空间中。
[0081] LogWrite写入异常信息时要判断内存空间的占用情况,因为host分配的内存空间的内存长度是固定的,LogWrite不仅要防止异常信息的覆盖,还要防止写入的信息长度超过分配的内存长度。LogWrite可以采用以下策略进行信息写入:每次写入异常信息时,都给异常信息加一个前缀,前缀的内容可以是当前系统时间,或者从数字1开始编号,逐次累加;写入的位置从获取的内存基址依次向后偏移,直到超过分配的内存长度时,再从基址重新写入,覆盖之前写入的内容,以保证内存空间中记录的异常信息是最新的。
[0082] 如图8所示,为服务器INIC侧通过系统调用进行异常信息记录的流程示意图。当INIC侧的某个应用发生异常时,确定要写入的异常信息,打开字符设备文件/dev/Exc_Log,通过系统调用调用内核态函数MemInit,初始化要写入异常信息的内存空间,保存系统调用返回的标志位。如果标志位为0,表示内存空间没有成功分配,异常信息无法记录,则关闭字符设备文件/dev/Exc_Log,结束流程;如果标志位为1,则继续通过系统调用执行内核态函数LogWrite,将需要写入的异常信息作为系统调用的参数传递给内核态函数LogWrite,由LogWrite向内存空间写入异常信息,最后关闭字符设备文件/dev/Exc_Log,结束流程。
[0083] 本发明实施例中,host与INIC上的流程既是相互联系又是相互独立的。首先,它们是相互联系的,只有host上的进程Exclog在host侧申请到连续的内存空间,并且将内存空间的信息写入INIC对应的PCIE存储空间中,INIC侧的异常信息记录模块InicExcLog才能获取到host分配的内存空间,并将异常信息写入该内存空间。同时,它们又是相互独立的,如果host侧没有运行Exclog,INIC侧的InicExcLog在运行时虽然无法获取记录异常信息所需要的内存空间,不会执行异常信息的写入,但是不会影响INIC侧其它的正常功能;反过来,host侧运行Exclog后,如果INIC侧没有启动InicExcLog,虽然Exclog不能从申请的内存空间中获取到任何异常信息,但是host侧的其它功能仍然正常运行。
[0084] 本发明实施例的智能网卡侧异常的处理方法是一种将智能网卡(INIC)侧异常信息传递给host的通用方法,不区分INIC使用的处理器类型,因为其中使用到的关键技术如PCIE通信、DMA读写等都是通用功能。
[0085] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
[0086] 应当理解的是,以上仅为本发明的优选实施例,不能因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页 第1页 第2页 第3页
相关技术
异常处理相关技术
方法装置相关技术
颜志伟发明人的其他相关专利技术