CN101908984A - 一种内存的故障检测方法和单板 - Google Patents

一种内存的故障检测方法和单板 Download PDF

Info

Publication number
CN101908984A
CN101908984A CN2010102126858A CN201010212685A CN101908984A CN 101908984 A CN101908984 A CN 101908984A CN 2010102126858 A CN2010102126858 A CN 2010102126858A CN 201010212685 A CN201010212685 A CN 201010212685A CN 101908984 A CN101908984 A CN 101908984A
Authority
CN
China
Prior art keywords
zone
surveyed area
buffer description
message
area
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN2010102126858A
Other languages
English (en)
Inventor
戴霖
杨秋林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou H3C Technologies Co Ltd
Original Assignee
Hangzhou H3C Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hangzhou H3C Technologies Co Ltd filed Critical Hangzhou H3C Technologies Co Ltd
Priority to CN2010102126858A priority Critical patent/CN101908984A/zh
Publication of CN101908984A publication Critical patent/CN101908984A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Mobile Radio Communication Systems (AREA)

Abstract

本发明公开了一种内存的故障检测方法和单板,为报文缓冲区域和缓冲描述符区域设置相应的检测区域,并通过其中的检测标识是否异常进行故障识别,从而,能够使分布式系统在因报文缓冲区域发生故障,或因缓冲描述符区域故障而导致报文缓冲区域不能正常访问而影响报文收发处理时,能够快速检测故障的发生,避免发生二次错误,具体的检测方法实现过程简单、检测速度快,对系统资源的占用少,对系统的业务处理性能影响小。

Description

一种内存的故障检测方法和单板
技术领域
本发明涉及通信技术领域,特别涉及一种内存的故障检测方法和单板。
背景技术
随着网络技术的发展,对于较为大型的网络设备,已经广泛采用分布式架构。分布式架构的网络设备一般由主控板和多个业务板构成。其中,主控板用于整个网络设备的管理和网络协议的处理,业务板用于完成各种业务的数据转发处理。
分布式架构的系统的各模块之间通过数据收发通道实现通信,数据收发通道主要有以下两种形式:
1、内部通信控制通道
在由主控板和业务板组成的分布式架构系统中,业务板有很多数据需要发往主控板,主控板则需要把各业务板的数据同步到其它各块业务板上,这些数据通信都需要通过内部通信控制通道实现。
内部通信控制通道一般由CPU(Central Processing Unit,中央处理单元)、交换芯片、PHY(Physical Layer,物理层)等连接构成。
内部通信控制通道所实现的内部通信是否平稳,直接关系整个设备的可靠性、数据传输效率和业务处理效率。
2、业务报文上送控制器的处理通道
在分布式架构系统的业务转发过程中,有些协议报文需要上送给控制器,而控制器在完成相关处理后,再通过转发芯片对处理结果进行发送处理,从而,实现业务转发,业务报文上送控制器的处理通道的通信质量将直接影响业务能否实现正常处理。
由此可见,无论是对于内部通信还是对于业务转发,数据收发通道都非常重要,其在通信设备的长时间稳定运行的过程中起着核心作用。
下面,主要以内部通信控制通道来进一步对数据收发通道进行描述。
如图1所示,为现有技术中的分布式系统的内部通信控制通道的结构示意图。
在该分布式系统中,主控板与业务板之间可以通过直接连接、通过PHY连接、通过交换芯片连接、通过交换芯片和PHY一起连接等方式实现连接,连接方式多种多样。
为了使各主控板和业务板之间通信正常,各单板中均需要建立用于缓存报文的报文缓冲区域(Buffer),如图1中的主控板上的Rx Buffer 0_A区域、业务板1上的Rx Buffer 1_A区域等,这些报文缓冲区域既可以用来缓存来自对端的报文,也可以缓存准备发送给对端的报文。
各报文缓冲区域一般是在系统内存中开辟出来的一段区域,操作系统软件能够直接读写操作,在系统初始化的时候,会在内存中建立收发包的数据管理区和数据缓存区(即上述的报文缓冲区域)。
如图2所示为现有技术中系统内存的内存结构示意图,以报文接收过程为例进行说明如下:
在系统初始化的时候,建立Rx(Receive,接收)Buffer Descriptors(报文描述符,BD)表作为数据管理区域,以下简称BD区域,用来维护管理接收到的所有报文。
在系统运行过程中,每一个接收到的报文都会对应Rx BD表中的一条BD表项,该表项作为硬件和软件的接口,通过硬件芯片和系统软件共同配合,一起完成对报文的接收。
BD表项中至少包括Status&Control(状态和控制)域,Data Length(数据长度)域,Buffer Pointer(缓冲指针)域。
其中,Status&Control域用来表示接收到的报文的特征,如硬件将接收到的报文放置到Buffer区域后,需要设置这个域里的状态信息,表示Buffer区域中有数据存储,软件通过检查Status&Control域,确认Buffer区域中当前有数据存储后,就可以进一步通过Data Length域和Buffer Pointer域读取该报文的长度信息和缓冲指针,根据长度信息可以确定该报文的大小,而缓冲指针则指向了该报文存储的真实位置,因此,通过缓冲指针,找到该报文存储的具体位置,按照该报文的长度信息获取该报文。
由于上述的BD区域是在系统初始化时建立的,即在硬件传送报文前就已经建立完成,因此,硬件接收到报文后,直接可以在Buffer Pointer指向的Buffer区域存放报文,并在相应的BD表项中填写长度和状态信息,即更新Status&Control域和Data Length域中的信息。
软件根据BD表项中Status&Control域的信息获知有新接收到的报文,并根据Data Length域和Buffer Pointer域中的信息在相应的Buffer区域中获取该报文,获取完成后,该BD表项所对应的报文已经不再存储于Buffer区域中,因此,更新该BD表项,并将该BD表项重新交给硬件区记录下一个接收到的报文,而该Buffer区域中释放的空间也可以重新开始接收其它的报文。
在分布式系统架构的网络设备中,由于内部的数据收发通道的核心作用,其可靠性是保证网络设备稳定的重中之重。如图1所示,在内部通信控制通道中,硬件本身一般不容易引发问题,大部分问题都是由于内部通信控制通道两端的单板的BD区域中的数据或Buffer区域中的数据被破坏而导致,即图2中所显示的区域中的数据可靠性对内部通信控制通道的可靠性影响巨大。
一方面,如果BD区域中的数据(即BD表项)被破坏,硬件根据BD区域中错误的或已破坏的BD表项,获取到错误的BD状态,从而无法继续往Buffer区域中正常的放置报文,而另一方面,如果Buffer区域中的数据(接收到的报文)被破坏,将会接收到错误的报文,进一步引发不可预知的错误。
在系统运行过程中,对于内存中数据的处理不当和损坏是很难控制和保证的一种错误,如果发生这些区域被破坏,将导致内部通信控制通道不能正常收发报文。
如果错误发生在业务板上,将导致该业务板瘫痪,如果错误发生在主控板上,将导致整个系统瘫痪,会造成整个业务传输中断等重大事故。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
现有的数据收发通道处理方式,在报文缓冲区域发生故障,或因缓冲描述符区域故障而导致报文缓冲区域不能正常访问而影响报文收发处理时,不能快速检测、不能自愈保护,也不能保留错误现场,后期问题处理难度增大。
发明内容
本发明提供一种内存的故障检测方法和单板,在因报文缓冲区域发生故障,或因缓冲描述符区域故障而导致报文缓冲区域不能正常访问而影响报文收发处理时,能够快速检测,避免发生二次错误。
为达到上述目的,本发明一方面提供了一种内存的故障检测方法,其特征在于,具体包括以下步骤:
获取缓冲描述符区域中记录的缓冲指针;
按照预设的偏移策略,在所述缓冲指针所指示的位置上进行偏移调整后,查找报文缓冲区域所对应的检测区域;
判断所述报文缓冲区域所对应的检测区域中当前的检测标识是否与所述检测区域中所预设的检测标识相一致;
如果所述报文缓冲区域所对应的检测区域中的检测标识的判断结果为不一致,确定所述报文缓冲区域所对应的内存当前出现故障。
优选的,在获取缓冲描述符区域中记录的缓冲指针的步骤之前,所述方法还包括:
为内存中的各报文缓冲区域分别设置对应的检测区域,并在各所述检测区域中预设检测标识,具体为:
在各所述报文缓冲区域之前和/或之后,按照预设的字段长度分别设置各所述报文缓冲区所对应的检测区域,并在各所述检测区域中预设检测标识。
优选的,所述方法还包括:在所述为内存中的各报文缓冲区域设置对应的检测区域的同时,为内存中的缓冲描述符区域设置对应的检测区域,并在各所述检测区域中预设检测标识,具体为:
在所述缓冲描述符区域之前和/或之后,按照预设的字段长度设置各所述报文缓冲区所对应的检测区域,并在各所述检测区域中预设检测标识。
优选的,所述在所述缓冲描述符区域之前和/或之后,按照预设的字段长度设置各所述报文缓冲区所对应的检测区域,并在各所述检测区域中预设检测标识,具体为:
按照预设的字段长度在整个所述缓冲描述符区域的之前和/或之后设置整个所述缓冲描述符区域所对应的检测区域,并在所述检测区域中预设检测标识;或,
将所述缓冲描述符区域划分为一个或多个队列区域,在所述缓冲描述符区域中所包含的各队列区域的之前和/或之后,按照预设的字段长度分别设置所述缓冲描述符区域中各所述队列区域所对应的检测区域,并在各所述队列区域所对应的检测区域中预设检测标识;或,
在所述缓冲描述符区域中所包含的各报文描述符的之前和/或之后,按照预设的字段长度分别设置所述缓冲描述符区域中各所述报文描述符所对应的检测区域,并在各所述报文描述符所对应的检测区域中预设检测标识。
优选的,当为内存中的缓冲描述符区域设置对应的检测区域,并在各所述检测区域中预设检测标识时,如果所述报文缓冲区域所对应的检测区域中的检测标识的判断结果为不一致,所述方法还包括:
判断所述缓冲描述符区域所对应的检测区域中当前的检测标识是否与所述检测区域中所预设的检测标识相一致;
如果所述缓冲描述符区域所对应的检测区域中的检测标识的判断结果为一致,确定所述报文缓冲区域所对应的内存当前出现故障;
如果所述缓冲描述符区域所对应的检测区域中的检测标识的判断结果为不一致,确定所述缓冲描述符区域所对应的内存当前出现故障。
优选的,所述判断所述缓冲描述符区域所对应的检测区域中当前的检测标识是否与所述检测区域中所预设的检测标识相一致之前,还包括:
当内存中所设置的所述缓冲描述符区域所对应的检测区域具体为整个所述缓冲描述符区域所对应的检测区域时,按照预设的偏移策略,在整个所述缓冲描述符区域的位置上进行偏移调整后,确定整个所述缓冲描述符区域所对应的检测区域;
当内存中所设置的所述缓冲描述符区域所对应的检测区域具体为所述缓冲描述符区域中所包含的各队列区域所对应的检测区域时,按照预设的偏移策略,在所述报文缓冲区域所对应的队列区域的位置上进行偏移调整后,确定所述队列区域所对应的检测区域;
当内存中所设置的所述缓冲描述符区域所对应的检测区域具体为所述缓冲描述符区域中所包含的各报文描述符的检测区域时,按照预设的偏移策略,在所述报文缓冲区域所对应的报文描述符的位置上进行偏移调整后,确定所述报文描述符所对应的检测区域。
优选的,所述确定所述报文缓冲区域所对应的内存当前出现故障之后,还包括:
对内存中全部的所述报文缓冲区域和整个缓冲描述符区域进行自愈保护,或对发生故障的报文缓冲区域所对应的缓冲描述符区域和所述发生故障的缓冲描述符区域所对应的全部报文缓冲区域进行自愈保护;
所述确定所述缓冲描述符区域所对应的内存当前出现故障之后,还包括:
对内存中全部的所述报文缓冲区域和整个缓冲描述符区域进行自愈保护,或对发生故障的缓冲描述符区域和所述发生故障的缓冲描述符区域所对应的全部报文缓冲区域进行自愈保护。
优选的,所述对报文缓冲区域和/或缓冲描述符区域进行自愈保护的同时,还包括:
对报文缓冲区域和/或缓冲描述符区域所对应的检测区域进行自愈保护。
另一方面,本发明还提供了一种单板,其特征在于,包括:
设置模块,用于为内存中的各报文缓冲区域分别设置对应的检测区域,并在各所述检测区域中预设检测标识,并设置偏移策略;
获取模块,用于获取缓冲描述符区域中记录的缓冲指针;
查找模块,与所述设置模块和所述获取模块相连接,用于按照所述设置模块所设置的的偏移策略,在所述获取模块所获取的缓冲指针所指示的位置上进行偏移调整后,查找报文缓冲区域所对应的检测区域;
判断模块,与所述设置模块和所述查找模块相连接,用于判断所述查找模块所查找到的所述报文缓冲区域所对应的检测区域中当前的检测标识是否与所述设置模块在所述检测区域中所预设的检测标识相一致;
确定模块,与所述判断模块相连接,用于在所述判断模块所生成的所述报文缓冲区域所对应的检测区域中的检测标识的判断结果为不一致时,确定所述报文缓冲区域所对应的内存当前出现故障。
优选的,所述设置模块,具体用于在各所述报文缓冲区域之前和/或之后,按照预设的字段长度分别设置各所述报文缓冲区所对应的检测区域,并在各所述检测区域中预设检测标识。
优选的,所述设置模块,还用于在所述缓冲描述符区域之前和/或之后,按照预设的字段长度设置各所述报文缓冲区所对应的检测区域,并在各所述检测区域中预设检测标识,具体包括:
按照预设的字段长度在整个所述缓冲描述符区域的之前和/或之后设置整个所述缓冲描述符区域所对应的检测区域,并在所述检测区域中预设检测标识;或,
在所述缓冲描述符区域中所包含的各队列区域的之前和/或之后,按照预设的字段长度分别设置所述缓冲描述符区域中各所述队列区域所对应的检测区域,并在各所述队列区域所对应的检测区域中预设检测标识;或,
在所述缓冲描述符区域中所包含的各报文描述符的之前和/或之后,按照预设的字段长度分别设置所述缓冲描述符区域中各所述报文描述符所对应的检测区域,并在各所述报文描述符所对应的检测区域中预设检测标识。
优选的,当所述设置模块为内存中的缓冲描述符区域设置对应的检测区域,并在各所述检测区域中预设检测标识时,如果所述判断模块所生成的所述报文缓冲区域所对应的检测区域中的检测标识的判断结果为不一致,
所述判断模块,还用于判断所述缓冲描述符区域所对应的检测区域中当前的检测标识是否与所述检测区域中所预设的检测标识相一致;
所述确定模块,还用于当所述判断模块所生成的所述缓冲描述符区域所对应的检测区域中的检测标识的判断结果为一致时,确定所述报文缓冲区域所对应的内存当前出现故障,或当所述判断模块所生成的所述缓冲描述符区域所对应的检测区域中的检测标识的判断结果为不一致时,确定所述缓冲描述符区域所对应的内存当前出现故障。
优选的,所述查找模块,还用于:
当所述设置模块所设置的所述缓冲描述符区域所对应的检测区域具体为整个所述缓冲描述符区域所对应的检测区域时,所述查找模块按照所述设置模块所设置的偏移策略,在整个所述缓冲描述符区域的位置上进行偏移调整后,确定整个所述缓冲描述符区域所对应的检测区域;
当所述设置模块所设置的所述缓冲描述符区域所对应的检测区域具体为所述缓冲描述符区域中所包含的各队列区域所对应的检测区域时,所述查找模块按照所述设置模块所设置的偏移策略,在所述报文缓冲区域所对应的队列区域的位置上进行偏移调整后,确定所述队列区域所对应的检测区域;
当所述设置模块所设置的所述缓冲描述符区域所对应的检测区域具体为所述缓冲描述符区域中所包含的各报文描述符的检测区域时,所述查找模块按照所述设置模块所设置的偏移策略,在所述报文缓冲区域所对应的报文描述符的位置上进行偏移调整后,确定所述报文描述符所对应的检测区域。
优选的,所述单板,还包括自愈模块,具体用于:
在所述确定模块确定所述报文缓冲区域所对应的内存当前出现故障之后,对内存中全部的所述报文缓冲区域和整个缓冲描述符区域进行自愈保护,或对发生故障的报文缓冲区域所对应的缓冲描述符区域和所述缓冲描述符区域所对应的全部报文缓冲区域进行自愈保护;
在所述确定模块确定所述缓冲描述符区域所对应的内存当前出现故障之后,对内存中全部的所述报文缓冲区域和整个缓冲描述符区域进行自愈保护,或对发生故障的缓冲描述符区域和所述缓冲描述符区域所对应的全部报文缓冲区域进行自愈保护;
其中,所述自愈模块对报文缓冲区域和/或缓冲描述符区域进行自愈保护的同时,还用于对报文缓冲区域和/或缓冲描述符区域所对应的检测区域进行自愈保护。
与现有技术相比,本发明具有以下优点:
通过应用本发明的技术方案,为报文缓冲区域和缓冲描述符区域设置相应的检测区域,并通过其中的检测标识是否异常进行故障识别,从而,能够使分布式系统在因报文缓冲区域发生故障,或因缓冲描述符区域故障而导致报文缓冲区域不能正常访问而影响报文收发处理时,能够快速检测故障的发生,避免发生二次错误,具体的检测方法实现过程简单、检测速度快,对系统资源的占用少,对系统的业务处理性能影响小。
附图说明
图1为现有技术中分布式系统通用的内部通信控制信道的示意图;
图2为现有技术中控制报文的内存结构示意图;
图3为本发明所提出的一种内存的故障检测方法的流程示意图;
图4为本发明所提出的一种应用内存的故障检测方法进行改进后的系统控制报文的内存结构示意图;
图5为本发明所提出的一种具体应用场景下内存的故障检测方法的流程示意图;
图6为本发明所提出的一种单板的结构示意图。
具体实施方式
针对现有技术中的不足,需要提出一种内存的故障检测方法,对报文缓冲区域和缓冲描述符区域建立检测机制,在报文缓冲区域发生故障,或因缓冲描述符区域故障而导致报文缓冲区域不能正常访问时,能够快速检测故障,避免影响正常的报文收发业务的处理,防止发生二次错误。
基于上述目的,如图3所示,为本发明所提出的一种内存的故障检测方法的流程示意图,具体包括以下步骤:
步骤S301、获取缓冲描述符区域中记录的缓冲指针。
在具体的应用场景中,本步骤之前,该方法还包括:
为内存中的各报文缓冲区域分别设置对应的检测区域,并在各检测区域中预设检测标识,具体为:
在各报文缓冲区域之前和/或之后,按照预设的字段长度分别设置各报文缓冲区所对应的检测区域,并在各检测区域中预设检测标识。
步骤S302、按照预设的偏移策略,在缓冲指针所指示的位置上进行偏移调整后,查找报文缓冲区域所对应的检测区域。
上述的偏移策略为预先设定的,具体的偏移量可以根据实际需要进行设定。
步骤S303、判断报文缓冲区域所对应的检测区域中当前的检测标识是否与检测区域中所预设的检测标识相一致。
如果报文缓冲区域所对应的检测区域中的检测标识的判断结果为不一致,执行步骤S304;
如果报文缓冲区域所对应的检测区域中的检测标识的判断结果为一致,确认报文缓冲区域所对应的内存当前不存在故障。
步骤S304、确定报文缓冲区域所对应的内存当前出现故障。
需要进一步指出的是,为了使故障检测的结果更加精确,可以在检测报文缓冲区域的同时对缓冲描述符区域进行检测,因此,需要在为各报文缓冲区域设置对应的检测区域和检测标识的同时,进一步为缓冲描述符区域设置对应的检测区域,并在该检测区域中预设检测标识,上述的设置过程具体包括以下两方面的设置:
(1)在各报文缓冲区域之前和/或之后,按照预设的字段长度设置各报文缓冲区所对应的检测区域,并在各检测区域中预设检测标识。
(2)在缓冲描述符区域之前和/或之后,按照预设的字段长度设置缓冲描述符区域所对应的检测区域,并在检测区域中预设检测标识。
需要进一步指出的是,根据不同的检测精度的要求,缓冲描述符区域的检测区域的设置可以分为以下三种情况:
情况一、按照预设的字段长度在整个缓冲描述符区域的之前和/或之后设置整个缓冲描述符区域所对应的检测区域,并在该检测区域中预设检测标识。
情况二、将缓冲描述符区域划分为一个或多个队列区域,在缓冲描述符区域中所包含的各队列区域的之前和/或之后,按照预设的字段长度分别设置缓冲描述符区域中各队列区域所对应的检测区域,并在各队列区域所对应的检测区域中预设检测标识。
情况三、在缓冲描述符区域中所包含的各报文描述符的之前和/或之后,按照预设的字段长度分别设置缓冲描述符区域中各报文描述符所对应的检测区域,并在各报文描述符所对应的检测区域中预设检测标识。
上述的三种情况对于缓冲描述符区域的检测精度逐渐提高的,对于问题的定位也越来越准确,但是,相应的信息设置量和需要占用的系统资源也会越来越多,可以根据实际需要进行选择。
在实际的应用场景中,具体应用上述的情况进行缓冲描述符区域的检测区域的设定,可以根据实际的需要和检测精度的要求进行调整,具体应用哪种情况并不会影响本发明的保护范围。
另一方面,在具体的应用场景中,上述的检测标识的设定策略也可以根据实际需要进行调整,对于报文缓冲区域和缓冲描述符区域所对应的检测区域中,所设置的检测标识全部相同,也可以将所有报文缓冲区域的检测区域的检测标识设置为同一个值,而将缓冲描述符区域所对应的检测区域中的检测标识设置为另一个值,从而增强检测的精度,这样的变化同样属于本发明的保护范围。
在完成上述设置后,需要判断是否发生了报文收发操作,如果发生报文收发操作,则执行相应的检测过程,如果没有发生报文收发操作,则返回继续判断。
检测过程首先进行报文缓冲区域所对应检测区域的检测,判断报文缓冲区域所对应的检测区域中当前的检测标识是否与检测区域中所预设的检测标识相一致,如果报文缓冲区域所对应的检测区域中的检测标识的判断结果为不一致,则进一步判断缓冲描述符区域所对应的检测区域中当前的检测标识是否与检测区域中所预设的检测标识相一致。
如果缓冲描述符区域所对应的检测区域中的检测标识的判断结果为一致,确定报文缓冲区域所对应的内存当前出现故障;
如果缓冲描述符区域所对应的检测区域中的检测标识的判断结果为不一致,确定缓冲描述符区域所对应的内存当前出现故障。
需要进一步指出的是,在对缓冲描述符区域所对应的检测区域进行检测的过程中,对应前述的缓冲描述符区域设置检测区域的三种情况,需要进行以下三种情况的处理,已确定需要进行一致性判断的检测区域。
对应前述的情况一,当内存中所设置的缓冲描述符区域所对应的检测区域具体为整个缓冲描述符区域所对应的检测区域时,按照预设的偏移策略,在整个缓冲描述符区域的位置上进行偏移调整后,确定整个缓冲描述符区域所对应的检测区域。
对应前述的情况二,当内存中所设置的缓冲描述符区域所对应的检测区域具体为缓冲描述符区域中所包含的各队列区域所对应的检测区域时,按照预设的偏移策略,在报文缓冲区域所对应的队列区域的位置上进行偏移调整后,确定队列区域所对应的检测区域。
对应前述的情况三,当内存中所设置的缓冲描述符区域所对应的检测区域具体为缓冲描述符区域中所包含的各报文描述符的检测区域时,按照预设的偏移策略,在报文缓冲区域所对应的报文描述符的位置上进行偏移调整后,确定报文描述符所对应的检测区域。
在具体的应用场景中,上述的对报文缓冲区域和缓冲描述符区域的检测区域进行检测标识是否一致的判断的方式,具体包括:
方式一、直接将检测区域中当前的检测标识与检测区域中所预设的检测标识进行比较,判断比较结果是否一致。
方式二、通过循环冗余校验码检验方法,判断检测区域中当前的检测标识是否与检测区域中所预设的检测标识相一致。
方式三、通过加密/解密算法,判断检测区域中当前的检测标识是否与检测区域中所预设的检测标识相一致。
在实际的应用场景中,具体应用上述的哪种方式进行判断,可以根据实际的需要进行调整,具体应用哪种方式并不影响本发明的保护范围。
不仅如此,缓冲描述符区域的检测区域的设定过程中的偏移策略与前述的报文缓冲区域的检测区域的设定过程中的偏移策略相类似,同样需要预先设定,但是两者的偏移量可以相同,也可以不相同,即根据缓冲描述符区域的特点进行设定,这样的变化并不影响本发明的保护范围。
为了达到更好的技术效果,在步骤S304中确定报文缓冲区域所对应的内存当前出现故障之后,还包括自愈保护处理,具体分为以下两种策略:
策略一、对内存中全部的报文缓冲区域和整个缓冲描述符区域进行自愈保护。
策略二、对发生故障的报文缓冲区域所对应的缓冲描述符区域和缓冲描述符区域所对应的全部报文缓冲区域进行自愈保护。
两种策略进行自愈保护的范围不同,策略一的自愈保护范围更大,处理简单,但是,由于没有准确的识别发生故障的位置,因此,可能对未发生故障的资源也进行了自愈保护处理,从而,导致损失的正常数据信息也会增多,而策略二的自愈保护范围更加准确,可能损失的正常数据信息也减少很多,但是,由于需要准确定位发生故障的位置,因此,需要进行的识别处理也会更多,相比策略一,处理效率有所降低,而且信息处理量也会增大,对系统资源的占用也会提高。
另一方面,在确定缓冲描述符区域所对应的内存当前出现故障之后,同样包括自愈保护处理,具体分为以下两种策略:
策略一、对内存中全部的报文缓冲区域和整个缓冲描述符区域进行自愈保护。
策略二、对发生故障的缓冲描述符区域和缓冲描述符区域所对应的全部报文缓冲区域进行自愈保护。
与前述的处理相类似的,两种策略进行自愈保护的范围不同,相应的优劣之处也与前述说明相类似,在此不再重复说明。
需要进一步指出的是,在上述的对报文缓冲区域和/或缓冲描述符区域进行自愈保护的同时,还可以对报文缓冲区域和/或缓冲描述符区域所对应的检测区域进行自愈保护,这样的变化并不影响本发明的保护范围。
与现有技术相比,本发明具有以下优点:
通过应用本发明的技术方案,为报文缓冲区域和缓冲描述符区域设置相应的检测区域,并通过其中的检测标识是否异常进行故障识别,从而,能够使分布式系统在因报文缓冲区域发生故障,或因缓冲描述符区域故障而导致报文缓冲区域不能正常访问而影响报文收发处理时,能够快速检测故障的发生,避免发生二次错误,具体的检测方法实现过程简单、检测速度快,对系统资源的占用少,对系统的业务处理性能影响小。
为了进一步阐述本发明的技术思想,现结合具体的应用场景,对本发明的技术方案进行说明。
本发明公开了一种内存的故障检测方法,该方法的技术思路包括:
一、检测依据的设置
对于数据收发通道的初始化过程,在初始建立BD区域和Buffer区域时,分别为BD区域和Buffer区域增加相应的检测区域(为了方便说明,在以下的描述中,缓冲描述符区域简称为BD区域,报文缓冲区域简称为Buffer区域)。
如图4所示,为本发明一种具体应用场景中的检测区域的添加策略的示意图,其中,检测区域具体为“Check Flag”区域,具体的设置包括以下几个方面:
一方面,在图4所示的应用场景中,在BD区域之前和之后均增加了检测区域,用于BD区域的检测。
另外一方面,在BD区域中的BD表项所包含的每一个Buffer Pointer所指向的Buffer区域前也都增加了检测区域,用于对各Buffer区域的检测。
在完成检测区域的设置后,进一步在各检测区域中设置非常规的值,作为检测标识。
其中,检测标识的设定需要考虑以下问题:
问题一、BD区域的检测区域和Buffer区域的检测区域中的检测标识是否设置为相同的值。
如果对所有BD区域的检测区域和Buffer区域的检测区域中的检测标识都设置为相同的值,可以降低检测标识的设置复杂度,提高设置效率,而且后续判断检测标识是否发生变化的标准也将得到统一,但是这样的设置在没有额外的设置的情况下,对于BD区域和Buffer区域的识别度较低,为了区分BD区域和Buffer区域的检测,同样也可以将BD区域和Buffer区域的检测区域中的检测标识设置的不同,但其中,各Buffer区域的检测区域中的检测标识可以相同,而BD区域的检测区域的检测标识也可以相同。具体检测标识是否相同并不会影响本发明的保护范围。
问题二、检测标识的值的非常规性
为了避免其他信息对检测信息识别准确度的干扰,需要将检测标识的具体数值设置为非常规的数值,从而降低将内存中的其他数据信息误读为检测标识的可能性,并且,为了提高识别度,对于检测标识复杂度的要求也可以进一步提高,一方面可以增加检测标识的长度,另一方面,也可以降低检测标识中的各数值之间的关联性和规律性。
在完成上述的设置后,即完成了对于BD区域和Buffer区域的检测区域的设置,从而,为检测BD区域或Buffer区域的故障建立了检测依据。
二、报文收发过程中的故障检测
当分布式系统通过数据收发通道收发报文时,需要对前述设置的Check Flag区域进行检测,检查Check Flag区域中的当前值是否符合预先设置的值,如果符合,则表示该Check Flag区域所对应的BD区域或Buffer区域当前状态正常,可以正常进行报文收发处理;而如果Check Flag区域中的当前值不符合预先设置的值,则确定该Check Flag区域所对应的BD区域或Buffer区域故障,其所对应的内存区域可能被破坏,无法正常进行报文收发处理,或所进行的报文收发处理出错。
由此,达到了快速检测故障的目的。
考虑到Buffer区域直接用来存储待收发的报文,对报文收发处理的影响最为直接,因此,可以优先进行Buffer区域所对应的Check Flag区域的检测,如前,BD区域包含的BD表项,而BD表项中的Buffer Pointer域中包含Buffer Pointer(缓冲指针),指向相应的Buffer区域的位置,可以据此找到BD表项所表征的报文所存储的Buffer区域,以进行相应的报文收发处理。
同样已接收报文的处理过程为例,由本发明所提出的以上技术方案可见,每当接收到报文时,可以在该报文所对应的BD表项中获取Buffer Pointer,并根据该Buffer Pointer找到该报文所存储的Buffer区域,按照预设的偏移策略(例如,从Buffer区域向前偏移指定的字节数),从Buffer Pointer所指示的位置向前偏移固定的长度找到Check Flag区域,并进而根据Check Flag区域的预设值比较检测来判断该Buffer区域是否发生破坏错误。
在具体的应用场景中,Check Flag区域的预设值比较检测失败可能是以下两种原因而导致的:
原因一、BD区域被破坏导致不能找到Buffer区域所对应的正确的Check Flag区域。
由于Buffer Pointer是从BD区域的BD表项中获取的,所以,如果BD区域本身被破坏,则获取的Buffer Pointer可能指向错误的内存位置,而错误的内存位置肯定没有Check Flag区域,因此,后续进行的Check Flag区域的预设值比较检测必然不能通过,故发现错误,但这样的错误并不一定是Buffer区域被破换而导致的,因此,需要进一步对BD区域的Check Flag区域进行预设值比较检测,如果通过,则必然是Buffer区域被破坏,相反,如果没有通过,则可以确定是BD区域被破坏。
原因二、Buffer区域被破坏。
如果是Buffer区域发生内存破坏错误,则该Buffer区域对应的Check Flag区域被破坏的可能性也非常大,通过本发明所提出的方法同样可以完成检测。
需要指出的是,为了达到快速检测的目的,Check Flag区域的长度设计需要进行考虑,不应过长,但也不应该过短,太短了容易误检测或者检测不到错误,太长了则会因预设值对比过于复杂而耗时较长,影响性能。
在具体的应用场景中,以2个字节(16个比特)左右的长度设置Check Flag区域比较合适。同时,基于前述的问题二(检测标识的值的非常规性)中所描述的情况,Check Flag区域中的值的设计应该选择比较特别的值,不能太符合编程语言里的值,不能设置为全零或者全F,以免发生误检测。
由以上的描述可以看出,本发明所提出的技术方案中的检测流程简单有效,可以分析一下,首先,根据Buffer Pointer的指示,回偏固定长度,获取2个字节的数据,然后,将获取的数据与预设值进行“与”判断,这样的两个步骤的系统资源开销对于整个收包过程的系统资源开销来说,所增加的系统开销量非常小,小到可以忽略不计,因此,本发明所提出的技术方案中的检测流程并不会为系统增加过多的额外开销,对系统性能的影响也非常小。
在实际应用中,以上的错误检测方式还可以联合其它的一些技术进行联合排查错误,如结合报文里的CRC字段检测,BD区域的不同状态字检测等,从而,能够排查各种软件和硬件导致的错误。
对比一下现有技术,由于现有技术没有Check Flag区域,只能直接检测BD区域里的内容和Buffer的内容,由于需要检测的数据量大,检测过程很耗时,从而对收发包性能影响也会比较明显,更主要的是没有可靠的错误判断依据,无法真实有效的发现错误。由此不难看出,本发明所提出的的检测方法很简单,快速有效,对性能影响很小,相比现有技术进步明显。
另外,需要进一步指出的是,如果需要进一步简化检测流程,可以在每次收包时都只检测Buffer区前的检测字段,只要检测失败就确定故障发生,而不再区分是BD区域被破坏还是仅仅是Buffer区域被破坏,这样,可以在不检测BD区域的情况下,就能发现问题,从而,进一步检测流程,尽量减少收包时的附加工作,尽量减少性能损失。
相对应的,在检测出故障的情况下,本发明还提供了一种针对故障的自愈保护方法,该方法主要是考虑故障的快速回复以及故障信息的保留。:
在收发包过程中,通过上述错误检测方法检测到数据区域被破坏后,将不再操作当前这些被破坏的数据区域,从而,保护好被破坏的现场,为以后的故障诊断保留证据和参考信息。
与此同时,还需要临时关闭硬件传送功能,重新构建另一个数据管理区域(BD区域)和对应的报文缓冲区域(Buffer区域)后,重新设置硬件索引寄存器,打开硬件报文传送功能,恢复收发包功能,从而实现自愈保护。
在检测到图4中Buffer区域的Check Flag错误后,进行自愈保护的过程中,可以根据不同的系统采用不同的策略。
策略一:在检测到故障后,无论故障时发生在Buffer区域还是BD区域,都马上进行自愈保护操作。
此时自愈保护动作应该是将现有的整个BD区域和Buffer区域均重新构建,建立新的BD区域和Buffer区域,进行自愈恢复。
该策略的优点是能够以最快速度进行数据收发通道通信恢复,系统在最短的时间内达到自愈保护,对业务转发造成的影响尽可能小,但是缺点是由于所有的BD区域和Buffer区域均进行了恢复,导致其它没有遭到破坏的Buffer区域中已经接收到,但没有及时处理的报文也被遗弃,恢复过程中被遗弃不再处理的报文数较多,数据损失量较大。
策略二:准确检测故障发生的位置,针对故障发生的位置,针对相应的区域进行自愈保护,在具体的应用场景中,根据检测精度和Check Flag区域设置策略的区别,可以分为以下三种方式:
方式一、如图4所示,在检测到Buffer区域的故障后,进一步检测BD区域前后的Check Flag区域是否正确,其中,该Check Flag区域对应的是整个BD区域,从而,实现对于整个BD区域的错误检测。
方式二、整个BD区域被预先划分为不同的队列区域,且在各队列区域前后都设置了Check Flag区域。在检测到Buffer区域的故障后,进一步检测该Buffer区域所对应的队列区域前后的Check Flag区域是否正确,从而,实现对于指定队列区域的错误检测。
方式三、在BD区域中的每个BD表项前后都设置了Check Flag区域。在检测到Buffer区域的故障后,进一步检测该Buffer区域所对应的BD表项前后的Check Flag区域是否正确,从而,实现对于指定BD表项的错误检测。
以上三种方式的区别在于不同的检测精度,由方式一到方式三,检测精度逐渐升高,在实际的操作中,检测精度越高,越容易发现问题的具体位置,但耗时较多;检测精度越低,耗时越少,检测到的可能错误范围越大。
自愈恢复时可以根据检测到的错误范围实现对应区域的恢复,不同的系统可以选择不同的检测方式。
例如:很多系统的数据收发通道在进行收包处理时都会使用8个队列收包,此时,可以按照上述的方式二的策略进行队列区域的划分,并对其对应队列区域的Check Flag区域进行检测,每个队列区域都设置有相应的CheckFlag区域,在接收报文时,如果发现Buffer区域的Check Flag区域检测错误,则可以将进一步检测该Buffer在BD区域中所对应的队列区域,即检测该队列区域的Check Flag区域是否正确,从而,将检测的范围局限在本队列之内,如果该队列区域前的Check Flag区域错误,则确定该队列区域被破坏,于是重新在BD区域中申请该队列区域,以及该队列区域所对应的Buffer区域,实现该队列的自愈恢复。
由于自愈恢复是有代价的,即恢复前所有已经接收到Buffer区域里的报文均不会再被处理,会出现部分报文的丢失,因此,如果采用方式二,将检测和自愈恢复的范围局限于队列范围内,则自愈恢复只会丢失该发生错误的队列的报文,而对其它队列没有影响。
进一步的,如果使用上述的方式三,在BD区域中针对每一个BD表项进行检测并恢复,则只会丢弃当前发现错误的这个报文,将因自愈恢复而造成的数据损失进一步降低。
但是,考虑到软件系统内存被破坏时一般都是成片的破坏,故在使用方式三进行自愈恢复的场景中,由于每次只恢复当前报文所对应的BD表项和Buffer区域,则很有可能会发生多次自愈恢复动作。由于检测和恢复时间的延长,会影响自愈恢复的及时性。
综上,本发明的自愈恢复方案可以根据不同系统,不同的处理效率和处理精度要求,进行不同的选择,选择符合目标系统需求的最优的方案,具体应用上述哪种方式进行自愈恢复并不会影响本发明的保护范围。
在现有的技术方案中,对于报文控制区域(BD区域和Buffer区域)被意外破坏的情况,数据收发通道的通信立刻被中止,单板进行重启,而重启后内存区域中数据被全部清除了,不仅数据被损失,而且此时导致破坏的原因也很难查找。而在本发明的技术方案中,由于增加了自愈功能,数据收发通道在短暂中止后便能够自愈恢复,保证了系统继续正常运行,另外,原来被破坏的区域能够得到保存,为后面查找破坏原因提供很好的现场环境,有利于设备维护。
需要进一步指出的是,上述的Check Flag区域的设置位置均是本实施例中所给出的一种优选方案,根据实际的场景需要,可以进一步的进行调整,这样的变化并不会影响本发明的保护范围。
为使本发明的目的、技术方案及优点更加清楚明白,下面以一种通用CPU处理收包过程为例,对本发明进一步详细说明。
如图5所示,为本发明所提出的一种具体应用场景下的内存的故障检测方法的流程示意图,具体包括以下步骤:
步骤S501、系统初始化的时候,设置队列区域和Rx Buffer区域的Check Flag区域,并设置其中的检测值。
在本实施场景中,系统使用8个队列来处理数据收发通道收到的报文,8个队列分别在BD区域中建立对应的队列区域,用于存放该队列中报文所对应的BD表项,在每个队列区域前增加Queue Check Flag区域。
具体的,通过上述设置,BD区域中会有8个Queue Check Flag区域,每个Queue Check Flag区域的大小为2Bytes,其中包含预设值为“9BC5F1A6”。
另一方面,初始化每个Rx Buffer区域时,每个Rx Buffer区域之前都增加了一个Buffer Check Flag区域,大小为2Bytes,其中包含的预设值为“4AB78CD6”,假如一个队列有256个Rx Buffer区域,那么,对于一个队列,这里就需要增设256个Buffer Check Flag区域。
步骤S502、在接收报文的时候,根据BD区域中获取的Buffer Pointer找到对应的Rx Buffer区域的位置,并从该Rx Buffer区域向前偏移固定长度,找到该Rx Buffer区域所对应的Buffer Check Flag区域,读取其中的2Bytes数据,与预设的检测值“4AB78CD6”进行比较。
如果发现比较结果一致,则表示该Rx Buffer区域正常,可以继续进行收包处理。
如果发现比较结果不一致,则表示该Rx Buffer区域有错误,此时进一步检测,执行步骤S503。
步骤S503、根据当前报文的队列信息,找到该报文对应的队列区域的Queue Check Flag区域,,读取其中的2Bytes数据,与预设的检测值“9BC5F1A6”进行比较。
如果比较结果一致,则执行步骤S504;
如果比较结果不一致,则执行步骤S505。
步骤S504、判断为Rx Buffer区域的内存被破坏,并进行Rx Buffer区域故障恢复。
具体恢复过程包括:
1、不需要重新申请BD区域,而是直接利用原BD区域中的空间重新初始化该队列区域,并建立该队列区域中的所有BD表项。
2、重新申请256个Rx Buffer区域的内存挂接到重新初始化的队列区域中的256个BD表项上,重新设置对应寄存器进行自愈恢复。
此时,原有的包含故障的256个Rx Buffer区域中的数据不再继续进行处理,由于保留了被破坏的Rx Buffer区域的现场,在后续的处理过程中,可以进一步根据保存的现场查找Rx Buffer区域内存被破坏的原因。
步骤S505、判断为BD区域的队列区域被破坏,并对该队列区域进行恢复操作。
重新在BD区域中申请该队列区域,并初始化该队列区域中的BD表项,重新申请Rx Buffer区域,并挂接到重新初始化的队列区域中的BD表项上,从而,完成自愈恢复动作。
此时,不但保留了原256个Rx Buffer区域,还保留了原队列区域中的256个BD表项,在后续的处理过程中,可以进一步根据保存的现场查找BD区域的队列区域的问题。
以上的具体实施例中,在对发生错误的队列区域进行自愈恢复的同时,本队列已经缓存下来但还没有来得及处理的报文被遗弃在内存里供定位问题使用,但这样的处理不会影响其它队列的业务进行;由于恢复过程是比较快速的,不会对整个系统的数据收发通道造成冲击,能够很好的实现自愈恢复。
还需要说明的是,本发明的上述实施用例是针对数据收发通道的收包过程实施的,但本领域的技术人员可以在实现各种数据收发通道的其他业务处理过程时,同样可以应用本发明所提出的技术方案,这样的变化同样属于本发明的保护范围。
例如,在业务转发芯片将报文送给控制器处理时,控制器处理的是协议报文,而并不一定是内部通信控制通道的报文,此时,对于相应的BD区域和Buffer区域同样可以应用本发明的技术方案。
又例如,在使用其它芯片,如串口、I2C总线接口使用BD区域和Buffer区域形式处理报文时,同样可以应用本发明的技术方案。
以上的举例并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
与现有技术相比,本发明具有以下优点:
通过应用本发明的技术方案,为报文缓冲区域和缓冲描述符区域设置相应的检测区域,并通过其中的检测标识是否异常进行故障识别,从而,能够使分布式系统在因报文缓冲区域发生故障,或因缓冲描述符区域故障而导致报文缓冲区域不能正常访问而影响报文收发处理时,能够快速检测故障的发生,避免发生二次错误,具体的检测方法实现过程简单、检测速度快,对系统资源的占用少,对系统的业务处理性能影响小。
为了实现本发明的技术方案,本发明还提出了一种单板,其结构示意图如图6所示,包括:
设置模块61,用于为内存中的各报文缓冲区域分别设置对应的检测区域,并在各检测区域中预设检测标识,并设置偏移策略。
在具体的应用场景中,设置模块61具体用于在各报文缓冲区域之前和/或之后,按照预设的字段长度分别设置各报文缓冲区所对应的检测区域,并在各检测区域中预设检测标识。
获取模块62,用于获取缓冲描述符区域中记录的缓冲指针;
查找模块63,与设置模块61和获取模块62相连接,用于按照设置模块61所设置的的偏移策略,在获取模块62所获取的缓冲指针所指示的位置上进行偏移调整后,查找报文缓冲区域所对应的检测区域;
判断模块64,与设置模块61和查找模块63相连接,用于判断查找模块63所查找到的报文缓冲区域所对应的检测区域中当前的检测标识是否与设置模块61在检测区域中所预设的检测标识相一致;
确定模块65,与判断模块64相连接,用于在判断模块64所生成的报文缓冲区域所对应的检测区域中的检测标识的判断结果为不一致时,确定报文缓冲区域所对应的内存当前出现故障。
进一步的,设置模块61还用于在缓冲描述符区域之前和/或之后,按照预设的字段长度设置各报文缓冲区所对应的检测区域,并在各检测区域中预设检测标识,具体包括:
按照预设的字段长度在整个缓冲描述符区域的之前和/或之后设置整个缓冲描述符区域所对应的检测区域,并在该检测区域中预设检测标识;或,
在缓冲描述符区域中所包含的各队列区域的之前和/或之后,按照预设的字段长度分别设置缓冲描述符区域中各队列区域所对应的检测区域,并在各队列区域所对应的检测区域中预设检测标识;或,
在缓冲描述符区域中所包含的各报文描述符的之前和/或之后,按照预设的字段长度分别设置缓冲描述符区域中各报文描述符所对应的检测区域,并在各报文描述符所对应的检测区域中预设检测标识。
在此基础上,当设置模块61为内存中的缓冲描述符区域设置对应的检测区域,并在各检测区域中预设检测标识时,如果判断模块64所生成的报文缓冲区域所对应的检测区域中的检测标识的判断结果为不一致;
判断模块64,还用于判断缓冲描述符区域所对应的检测区域中当前的检测标识是否与检测区域中所预设的检测标识相一致;
确定模块65,还用于当判断模块64所生成的缓冲描述符区域所对应的检测区域中的检测标识的判断结果为一致时,确定报文缓冲区域所对应的内存当前出现故障,或当判断模块64所生成的缓冲描述符区域所对应的检测区域中的检测标识的判断结果为不一致时,确定缓冲描述符区域所对应的内存当前出现故障。
相应的,查找模块63,还用于:
当设置模块61所设置的缓冲描述符区域所对应的检测区域具体为整个缓冲描述符区域所对应的检测区域时,查找模块63按照设置模块61所设置的偏移策略,在整个缓冲描述符区域的位置上进行偏移调整后,确定整个缓冲描述符区域所对应的检测区域;
当设置模块61所设置的缓冲描述符区域所对应的检测区域具体为缓冲描述符区域中所包含的各队列区域所对应的检测区域时,查找模块63按照设置模块61所设置的偏移策略,在报文缓冲区域所对应的队列区域的位置上进行偏移调整后,确定队列区域所对应的检测区域;
当设置模块61所设置的缓冲描述符区域所对应的检测区域具体为缓冲描述符区域中所包含的各报文描述符的检测区域时,查找模块63按照设置模块61所设置的偏移策略,在报文缓冲区域所对应的报文描述符的位置上进行偏移调整后,确定报文描述符所对应的检测区域。
进一步的,该单板还包括自愈模块66,具体用于:
在确定模块65确定报文缓冲区域所对应的内存当前出现故障之后,对内存中全部的报文缓冲区域和整个缓冲描述符区域进行自愈保护,或对发生故障的报文缓冲区域所对应的缓冲描述符区域和缓冲描述符区域所对应的全部报文缓冲区域进行自愈保护;
在确定模块65确定缓冲描述符区域所对应的内存当前出现故障之后,对内存中全部的报文缓冲区域和整个缓冲描述符区域进行自愈保护,或对发生故障的缓冲描述符区域和缓冲描述符区域所对应的全部报文缓冲区域进行自愈保护;
其中,自愈模块66对报文缓冲区域和/或缓冲描述符区域进行自愈保护的同时,还用于对报文缓冲区域和/或缓冲描述符区域所对应的检测区域进行自愈保护。
与现有技术相比,本发明具有以下优点:
通过应用本发明的技术方案,为报文缓冲区域和缓冲描述符区域设置相应的检测区域,并通过其中的检测标识是否异常进行故障识别,从而,能够使分布式系统在因报文缓冲区域发生故障,或因缓冲描述符区域故障而导致报文缓冲区域不能正常访问而影响报文收发处理时,能够快速检测故障的发生,避免发生二次错误,具体的检测方法实现过程简单、检测速度快,对系统资源的占用少,对系统的业务处理性能影响小。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施场景所述的方法。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明序号仅仅为了描述,不代表实施场景的优劣。
以上公开的仅为本发明的几个具体实施场景,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。

Claims (14)

1.一种内存的故障检测方法,其特征在于,具体包括以下步骤:
获取缓冲描述符区域中记录的缓冲指针;
按照预设的偏移策略,在所述缓冲指针所指示的位置上进行偏移调整后,查找报文缓冲区域所对应的检测区域;
判断所述报文缓冲区域所对应的检测区域中当前的检测标识是否与所述检测区域中所预设的检测标识相一致;
如果所述报文缓冲区域所对应的检测区域中的检测标识的判断结果为不一致,确定所述报文缓冲区域所对应的内存当前出现故障。
2.如权利要求1所述的方法,其特征在于,在获取缓冲描述符区域中记录的缓冲指针的步骤之前,所述方法还包括:
为内存中的各报文缓冲区域分别设置对应的检测区域,并在各所述检测区域中预设检测标识,具体为:
在各所述报文缓冲区域之前和/或之后,按照预设的字段长度分别设置各所述报文缓冲区所对应的检测区域,并在各所述检测区域中预设检测标识。
3.如权利要求2所述的方法,其特征在于,所述方法还包括:在所述为内存中的各报文缓冲区域设置对应的检测区域的同时,为内存中的缓冲描述符区域设置对应的检测区域,并在各所述检测区域中预设检测标识,具体为:
在所述缓冲描述符区域之前和/或之后,按照预设的字段长度设置各所述报文缓冲区所对应的检测区域,并在各所述检测区域中预设检测标识。
4.如权利要求3所述的方法,其特征在于,所述在所述缓冲描述符区域之前和/或之后,按照预设的字段长度设置各所述报文缓冲区所对应的检测区域,并在各所述检测区域中预设检测标识,具体为:
按照预设的字段长度在整个所述缓冲描述符区域的之前和/或之后设置整个所述缓冲描述符区域所对应的检测区域,并在所述检测区域中预设检测标识;或,
将所述缓冲描述符区域划分为一个或多个队列区域,在所述缓冲描述符区域中所包含的各队列区域的之前和/或之后,按照预设的字段长度分别设置所述缓冲描述符区域中各所述队列区域所对应的检测区域,并在各所述队列区域所对应的检测区域中预设检测标识;或,
在所述缓冲描述符区域中所包含的各报文描述符的之前和/或之后,按照预设的字段长度分别设置所述缓冲描述符区域中各所述报文描述符所对应的检测区域,并在各所述报文描述符所对应的检测区域中预设检测标识。
5.如权利要求3所述的方法,其特征在于,当为内存中的缓冲描述符区域设置对应的检测区域,并在各所述检测区域中预设检测标识时,如果所述报文缓冲区域所对应的检测区域中的检测标识的判断结果为不一致,所述方法还包括:
判断所述缓冲描述符区域所对应的检测区域中当前的检测标识是否与所述检测区域中所预设的检测标识相一致;
如果所述缓冲描述符区域所对应的检测区域中的检测标识的判断结果为一致,确定所述报文缓冲区域所对应的内存当前出现故障;
如果所述缓冲描述符区域所对应的检测区域中的检测标识的判断结果为不一致,确定所述缓冲描述符区域所对应的内存当前出现故障。
6.如权利要求4或5所述的方法,其特征在于,所述判断所述缓冲描述符区域所对应的检测区域中当前的检测标识是否与所述检测区域中所预设的检测标识相一致之前,还包括:
当内存中所设置的所述缓冲描述符区域所对应的检测区域具体为整个所述缓冲描述符区域所对应的检测区域时,按照预设的偏移策略,在整个所述缓冲描述符区域的位置上进行偏移调整后,确定整个所述缓冲描述符区域所对应的检测区域;
当内存中所设置的所述缓冲描述符区域所对应的检测区域具体为所述缓冲描述符区域中所包含的各队列区域所对应的检测区域时,按照预设的偏移策略,在所述报文缓冲区域所对应的队列区域的位置上进行偏移调整后,确定所述队列区域所对应的检测区域;
当内存中所设置的所述缓冲描述符区域所对应的检测区域具体为所述缓冲描述符区域中所包含的各报文描述符的检测区域时,按照预设的偏移策略,在所述报文缓冲区域所对应的报文描述符的位置上进行偏移调整后,确定所述报文描述符所对应的检测区域。
7.如权利要求1或5所述的方法,其特征在于,
所述确定所述报文缓冲区域所对应的内存当前出现故障之后,还包括:
对内存中全部的所述报文缓冲区域和整个缓冲描述符区域进行自愈保护,或对发生故障的报文缓冲区域所对应的缓冲描述符区域和所述发生故障的缓冲描述符区域所对应的全部报文缓冲区域进行自愈保护;
所述确定所述缓冲描述符区域所对应的内存当前出现故障之后,还包括:
对内存中全部的所述报文缓冲区域和整个缓冲描述符区域进行自愈保护,或对发生故障的缓冲描述符区域和所述发生故障的缓冲描述符区域所对应的全部报文缓冲区域进行自愈保护。
8.如权利要求7所述的方法,其特征在于,所述对报文缓冲区域和/或缓冲描述符区域进行自愈保护的同时,还包括:
对报文缓冲区域和/或缓冲描述符区域所对应的检测区域进行自愈保护。
9.一种单板,其特征在于,包括:
设置模块,用于为内存中的各报文缓冲区域分别设置对应的检测区域,并在各所述检测区域中预设检测标识,并设置偏移策略;
获取模块,用于获取缓冲描述符区域中记录的缓冲指针;
查找模块,与所述设置模块和所述获取模块相连接,用于按照所述设置模块所设置的的偏移策略,在所述获取模块所获取的缓冲指针所指示的位置上进行偏移调整后,查找报文缓冲区域所对应的检测区域;
判断模块,与所述设置模块和所述查找模块相连接,用于判断所述查找模块所查找到的所述报文缓冲区域所对应的检测区域中当前的检测标识是否与所述设置模块在所述检测区域中所预设的检测标识相一致;
确定模块,与所述判断模块相连接,用于在所述判断模块所生成的所述报文缓冲区域所对应的检测区域中的检测标识的判断结果为不一致时,确定所述报文缓冲区域所对应的内存当前出现故障。
10.如权利要求9所述的单板,其特征在于,所述设置模块,具体用于在各所述报文缓冲区域之前和/或之后,按照预设的字段长度分别设置各所述报文缓冲区所对应的检测区域,并在各所述检测区域中预设检测标识。
11.如权利要求10所述的单板,其特征在于,所述设置模块,还用于在所述缓冲描述符区域之前和/或之后,按照预设的字段长度设置各所述报文缓冲区所对应的检测区域,并在各所述检测区域中预设检测标识,具体包括:
按照预设的字段长度在整个所述缓冲描述符区域的之前和/或之后设置整个所述缓冲描述符区域所对应的检测区域,并在所述检测区域中预设检测标识;或,
在所述缓冲描述符区域中所包含的各队列区域的之前和/或之后,按照预设的字段长度分别设置所述缓冲描述符区域中各所述队列区域所对应的检测区域,并在各所述队列区域所对应的检测区域中预设检测标识;或,
在所述缓冲描述符区域中所包含的各报文描述符的之前和/或之后,按照预设的字段长度分别设置所述缓冲描述符区域中各所述报文描述符所对应的检测区域,并在各所述报文描述符所对应的检测区域中预设检测标识。
12.如权利要求11所述的单板,其特征在于,当所述设置模块为内存中的缓冲描述符区域设置对应的检测区域,并在各所述检测区域中预设检测标识时,如果所述判断模块所生成的所述报文缓冲区域所对应的检测区域中的检测标识的判断结果为不一致,
所述判断模块,还用于判断所述缓冲描述符区域所对应的检测区域中当前的检测标识是否与所述检测区域中所预设的检测标识相一致;
所述确定模块,还用于当所述判断模块所生成的所述缓冲描述符区域所对应的检测区域中的检测标识的判断结果为一致时,确定所述报文缓冲区域所对应的内存当前出现故障,或当所述判断模块所生成的所述缓冲描述符区域所对应的检测区域中的检测标识的判断结果为不一致时,确定所述缓冲描述符区域所对应的内存当前出现故障。
13.如权利要求11或12所述的单板,其特征在于,所述查找模块,还用于:
当所述设置模块所设置的所述缓冲描述符区域所对应的检测区域具体为整个所述缓冲描述符区域所对应的检测区域时,所述查找模块按照所述设置模块所设置的偏移策略,在整个所述缓冲描述符区域的位置上进行偏移调整后,确定整个所述缓冲描述符区域所对应的检测区域;
当所述设置模块所设置的所述缓冲描述符区域所对应的检测区域具体为所述缓冲描述符区域中所包含的各队列区域所对应的检测区域时,所述查找模块按照所述设置模块所设置的偏移策略,在所述报文缓冲区域所对应的队列区域的位置上进行偏移调整后,确定所述队列区域所对应的检测区域;
当所述设置模块所设置的所述缓冲描述符区域所对应的检测区域具体为所述缓冲描述符区域中所包含的各报文描述符的检测区域时,所述查找模块按照所述设置模块所设置的偏移策略,在所述报文缓冲区域所对应的报文描述符的位置上进行偏移调整后,确定所述报文描述符所对应的检测区域。
14.如权利要求9所述的单板,其特征在于,还包括自愈模块,具体用于:
在所述确定模块确定所述报文缓冲区域所对应的内存当前出现故障之后,对内存中全部的所述报文缓冲区域和整个缓冲描述符区域进行自愈保护,或对发生故障的报文缓冲区域所对应的缓冲描述符区域和所述缓冲描述符区域所对应的全部报文缓冲区域进行自愈保护;
在所述确定模块确定所述缓冲描述符区域所对应的内存当前出现故障之后,对内存中全部的所述报文缓冲区域和整个缓冲描述符区域进行自愈保护,或对发生故障的缓冲描述符区域和所述缓冲描述符区域所对应的全部报文缓冲区域进行自愈保护;
其中,所述自愈模块对报文缓冲区域和/或缓冲描述符区域进行自愈保护的同时,还用于对报文缓冲区域和/或缓冲描述符区域所对应的检测区域进行自愈保护。
CN2010102126858A 2010-06-30 2010-06-30 一种内存的故障检测方法和单板 Pending CN101908984A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010102126858A CN101908984A (zh) 2010-06-30 2010-06-30 一种内存的故障检测方法和单板

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010102126858A CN101908984A (zh) 2010-06-30 2010-06-30 一种内存的故障检测方法和单板

Publications (1)

Publication Number Publication Date
CN101908984A true CN101908984A (zh) 2010-12-08

Family

ID=43264309

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010102126858A Pending CN101908984A (zh) 2010-06-30 2010-06-30 一种内存的故障检测方法和单板

Country Status (1)

Country Link
CN (1) CN101908984A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102609350A (zh) * 2012-02-15 2012-07-25 浪潮电子信息产业股份有限公司 一种服务器内存故障报警方法
CN107733687A (zh) * 2017-09-06 2018-02-23 深圳市金立通信设备有限公司 提示业务异常的方法、终端、服务器及计算机可读介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1798094A (zh) * 2004-12-23 2006-07-05 华为技术有限公司 一种使用缓存区的方法
CN1908925A (zh) * 2006-08-15 2007-02-07 武汉虹旭信息技术有限责任公司 提高pci通信可靠性及效率的方法
US20090328007A1 (en) * 2008-06-27 2009-12-31 International Business Machines Corporation Memory leak diagnosis

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1798094A (zh) * 2004-12-23 2006-07-05 华为技术有限公司 一种使用缓存区的方法
CN1908925A (zh) * 2006-08-15 2007-02-07 武汉虹旭信息技术有限责任公司 提高pci通信可靠性及效率的方法
US20090328007A1 (en) * 2008-06-27 2009-12-31 International Business Machines Corporation Memory leak diagnosis

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102609350A (zh) * 2012-02-15 2012-07-25 浪潮电子信息产业股份有限公司 一种服务器内存故障报警方法
CN107733687A (zh) * 2017-09-06 2018-02-23 深圳市金立通信设备有限公司 提示业务异常的方法、终端、服务器及计算机可读介质

Similar Documents

Publication Publication Date Title
KR101196547B1 (ko) 결정론적 sas 검색 및 구성을 위한 방법
US8559322B2 (en) Link state detection method and system
US6697366B1 (en) Ethernet memory management system and methods for operation thereof
US11146090B2 (en) Battery management system, and method and apparatus for transmitting information
CN106878164A (zh) 一种报文传输方法和装置
CN104750428A (zh) 块储存存取和网关模块、储存系统和方法与内容递送装置
CN105376129A (zh) 一种1394总线事务层-链路层数据包发送电路及方法
US20140107863A1 (en) Vehicle Control Device, Vehicle Control System
US20010051994A1 (en) Computer system and a data transfer method thereof
CN101833513B (zh) 一种数据帧的读取方法、装置
CN114363320A (zh) 一种跨网数据回传方法、存储介质和系统
EP3541088A1 (en) Method, device and system for bearing frame number of multichannel passive optical network, and storage medium
US7386622B2 (en) Network converter and information processing system
EP1654651B1 (en) Method and apparatus for providing tandem connection, performance monitoring, and protection architectures over ethernet protocols
CN101908984A (zh) 一种内存的故障检测方法和单板
CN104270287A (zh) 一种报文乱序检测方法及装置
RU2383067C2 (ru) Способ сохранения пакетов данных с использованием технологии указателя
CN104252416A (zh) 一种加速器以及数据处理方法
US20120136958A1 (en) Method for analyzing protocol data unit of internet small computer systems interface
US20220038919A1 (en) Downlink control channel transmission and reception methods, terminal, and network side device
US11853804B2 (en) Routing log-based information
CN106708445A (zh) 链路选择方法及装置
CN102447632A (zh) 一种具有数据容错能力的网络传输方法
CN109032976A (zh) 一种物理通道的处理方法和装置
EP4236254A1 (en) Message processing method and device

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20101208