G06F9/50 G06F11/07
1.一种网卡设备的内存池管理方法,其特征在于,包括:
网卡设备获取待处理的报文;
根据所述报文的内容确定待处理的业务;
根据待处理业务在对应的内存池中申请内存块;
为当前申请的内存块分配内存池标识和时间戳;
基于当前申请的内存块处理所述报文;
根据所述内存池标识和所述时间戳进行所述网卡设备的内存池的管理。
2.如权利要求1所述的方法,其特征在于,还包括:
为网卡设备中多个业务分别分配对应的内存池;
分别为业务对应的内存池分配内存池标识。
3.如权利要求1所述的方法,其特征在于,根据待处理业务在对应的内存池中申请内存块,包括:
确定待处理业务的顺序;
按照所述顺序依次在对应的内存池中申请内存块。
4.如权利要求1所述的方法,其特征在于,为当前申请的内存块分配内存池标识和时间戳,包括:
根据当前申请的内存块的所属内存池对应的业务为当前申请的内存块分配内存池标识;
根据当前系统时间为当前申请的内存块分配时间戳。
5.如权利要求4所述的方法,其特征在于,为当前申请的内存块分配内存池标识和时间戳,还包括:
在预留的内存空间记录所述内存块对应的内存池标识和时间戳;
根据所述内存块对应的多个内存池标识和时间戳生成所述内存块的轨迹信息。
6.如权利要求1所述的方法,其特征在于,基于当前申请的内存块处理所述报文,还包括:
在当前申请的内存块处理完毕所述报文后,将当前申请的内存块的内存池标识设置为空。
7.如权利要求1所述的方法,其特征在于,根据所述内存池标识和所述时间戳进行所述网卡设备的内存池的管理,包括:
根据业务顺序依次获取内存块处理所述报文;
在内存块处理所述报文之前,判断所述内存块的内存池标识是否符合条件;
在不符合预设条件时,生成警告信息。
9.如权利要求7或8所述的方法,其特征在于,根据所述内存池标识和所述时间戳进行所述网卡设备的内存池的管理,还包括:
根据所述警告信息获取故障内存块;
获取所述故障内存块对应的轨迹信息;
根据所述轨迹信息进行故障定位。
8.如权利要求1所述的方法,其特征在于,根据所述内存池标识和所述时间戳进行所述网卡设备的内存池的管理,包括:
定时获取预设内存池中内存块的时间戳;
通过所述时间戳和当前系统时间生成时间差;
在所述时间差大于阈值时,生成警告信息。
10.一种网卡设备的内存池管理装置,其特征在于,包括:
报文模块,用于网卡设备获取待处理的报文;
业务模块,用于根据所述报文的内容确定待处理的业务;
内存模块,用于根据待处理业务在对应的内存池中申请内存块;
标识模块,用于为当前申请的内存块分配内存池标识和时间戳;
处理模块,用于基于当前申请的内存块处理所述报文;
管理模块,用于根据所述内存池标识和所述时间戳进行所述网卡设备的内存池的管理。
本公开涉及计算机信息处理领域,具体而言,涉及一种网卡设备的内存池管理方法、装置、电子设备及计算机可读介质。
5G时代来临,数字化、智能化、物联化是社会发展的主流趋势,人们在享受科技进步所带来的便利同时,也不得不面对更多随之而来的网络安全问题。随着网络业务的需求急剧增长,业务的复杂度也大大提高,而且还伴随着高新建、高吞吐、高并发的流量,导致内存重复释放和内存泄露的问题也时常发生。网络设备在运行过程中出现存储报文的内存重复释放的话会导致设备无法正常工作,严重的甚至导致设备重启。网络设备在运行过程中过程中出现内存泄露的话会导致设备的内存越来越小,最终出现杀进程等系统问题。这些问题都会最终导致客户业务阻断或者遭受黑客的攻击,从而造成一些不可恢复的损失。
现有技术内存泄露的定位方法为:记录被测程序运行前的初始内存值,以及被测程序运行退出后的剩余内存值;根据初始内存值和剩余内存值,计算被测程序运行过程中所消耗的消耗内存值;根据消耗内存值,判定被测程序是否存在内存泄露,当判定结果为是时,定位被测程序。
现有技术仅能解决内存池的内存泄露及内存越界问题。无法捕捉其他流程产生的内存泄露和重复释放的问题。而这种问题在网络设备中不仅十分复杂难以捕捉和定位,而且十分致命常常会导致系统异常,从而中断客户的业务严重影响设备使用效果。
因此,需要一种新的网卡设备的内存池管理方法、装置、电子设备及计算机可读介质。
在所述背景技术部分公开的上述信息仅用于加强对本申请的背景的理解,因此它可以包括不构成对本领域普通技术人员已知的现有技术的信息。
有鉴于此,本申请提供一种网卡设备的内存池管理方法、装置、电子设备及计算机可读介质,在复杂的业务流程中能够快速而且准确的定位到内存重复释放或者内存泄露的问题,从而辅助管理员即使解决问题,提升系统效率,避免业务阻断。
本申请的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本申请的实践而习得。
根据本申请的一方面,提出一种网卡设备的内存池管理方法,该方法包括:网卡设备获取待处理的报文;根据所述报文的内容确定待处理的业务;根据待处理业务在对应的内存池中申请内存块;为当前申请的内存块分配内存池标识和时间戳;基于当前申请的内存块处理所述报文;根据所述内存池标识和所述时间戳进行所述网卡设备的内存池的管理。
在本申请的一种示例性实施例中,还包括:为网卡设备中多个业务分别分配对应的内存池;分别为业务对应的内存池分配内存池标识。
在本申请的一种示例性实施例中,根据待处理业务在对应的内存池中申请内存块,包括:确定待处理业务的顺序;按照所述顺序依次在对应的内存池中申请内存块。
在本申请的一种示例性实施例中,为当前申请的内存块分配内存池标识和时间戳,包括:
根据当前申请的内存块的所属内存池对应的业务为当前申请的内存块分配内存池标识;根据当前系统时间为当前申请的内存块分配时间戳。
在本申请的一种示例性实施例中,为当前申请的内存块分配内存池标识和时间戳,还包括:在预留的内存空间记录所述内存块对应的内存池标识和时间戳;根据所述内存块对应的多个内存池标识和时间戳生成所述内存块的轨迹信息。
在本申请的一种示例性实施例中,基于当前申请的内存块处理所述报文,还包括:在当前申请的内存块处理完毕所述报文后,将当前申请的内存块的内存池标识设置为空。
在本申请的一种示例性实施例中,根据所述内存池标识和所述时间戳进行所述网卡设备的内存池的管理,包括:根据业务顺序依次获取内存块处理所述报文;在内存块处理所述报文之前,判断所述内存块的内存池标识是否符合条件;在不符合预设条件时,生成警告信息。
在本申请的一种示例性实施例中,根据所述内存池标识和所述时间戳进行所述网卡设备的内存池的管理,包括:定时获取预设内存池中内存块的时间戳;通过所述时间戳和当前系统时间生成时间差;在所述时间差大于阈值时,生成警告信息。
在本申请的一种示例性实施例中,还包括:根据所述警告信息获取故障内存块;获取所述故障内存块对应的轨迹信息;根据所述轨迹信息进行故障定位。
根据本申请的一方面,提出一种网卡设备的内存池管理装置,该装置包括:报文模块,用于网卡设备获取待处理的报文;业务模块,用于根据所述报文的内容确定待处理的业务;内存模块,用于根据待处理业务在对应的内存池中申请内存块;标识模块,用于为当前申请的内存块分配内存池标识和时间戳;处理模块,用于基于当前申请的内存块处理所述报文;管理模块,用于根据所述内存池标识和所述时间戳进行所述网卡设备的内存池的管理。
根据本申请的一方面,提出一种电子设备,该电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序;当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现如上文的方法。
根据本申请的一方面,提出一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如上文中的方法。
根据本申请的网卡设备的内存池管理方法、装置、电子设备及计算机可读介质,通过网卡设备获取待处理的报文;根据所述报文的内容确定待处理的业务;根据待处理业务在对应的内存池中申请内存块;为当前申请的内存块分配内存池标识和时间戳;基于当前申请的内存块处理所述报文;根据所述内存池标识和所述时间戳进行所述网卡设备的内存池的管理的方式,在复杂的业务流程中能够快速而且准确的定位到内存重复释放或者内存泄露的问题,从而辅助管理员即使解决问题,提升系统效率,避免业务阻断。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。
通过参照附图详细描述其示例实施例,本申请的上述和其它目标、特征及优点将变得更加显而易见。下面描述的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据一示例性实施例示出的一种网卡设备的内存池管理方法的流程图。
图2是根据另一示例性实施例示出的一种网卡设备的内存池管理方法的流程图。
图3是根据另一示例性实施例示出的一种网卡设备的内存池管理方法的示意图。
图4是根据另一示例性实施例示出的一种网卡设备的内存池管理方法的示意图。
图5是根据一示例性实施例示出的一种网卡设备的内存池管理装置的框图。
图6是根据一示例性实施例示出的一种电子设备的框图。
图7是根据一示例性实施例示出的一种计算机可读介质的框图。
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本申请将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
应理解,虽然本文中可能使用术语第一、第二、第三等来描述各种组件,但这些组件不应受这些术语限制。这些术语乃用以区分一组件与另一组件。因此,下文论述的第一组件可称为第二组件而不偏离本申请概念的教示。如本文中所使用,术语“及/或”包括相关联的列出项目中的任一个及一或多者的所有组合。
本领域技术人员可以理解,附图只是示例实施例的示意图,附图中的模块或流程并不一定是实施本申请所必须的,因此不能用于限制本申请的保护范围。
本申请涉及的技术缩略语解释如下:
内存泄露:内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
内存重复释放:是在程序向系统申请一块内存之后,多次将该内存回收给系统,如果系统无法正确分辨出回收的内存属于同一块区域的话,系统会将收回的内存再次分配出去,同时使用内存有时不会发生问题,有时直接导致系统崩溃。
报文:(message)是网络中交换与传输的数据单元,即站点一次性要发送的数据块。报文包含了将要发送的完整的数据信息,其长短很不一致,长度不限且可变。
内存池:(Memory Pool)是一种内存分配方式,又被称为固定大小区块规划(fixed-size-blocks allocation)。通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片进而降低性能。
图1是根据一示例性实施例示出的一种网卡设备的内存池管理方法的流程图。网卡设备的内存池管理方法10至少包括步骤S102至S112。
如图1所示,在S102中,网卡设备获取待处理的报文。网卡是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件。由于其拥有MAC地址,因此属于OSI模型的第1层和2层之间。它使得用户可以通过电缆或无线相互连接。每一个网卡都有一个被称为MAC地址的独一无二的48位串行号,它被写在卡上的一块ROM中。在网络上的每一个计算机都必须拥有一个独一无二的MAC地址。
网卡上面装有处理器和存储器(包括RAM和ROM)。网卡和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的。而网卡和计算机之间的通信则是通过计算机主板上的I/O总线以并行传输方式进行。因此,网卡的一个重要功能就是要进行串行/并行转换。由于网络上的数据率和计算机总线上的数据率并不相同,因此在网卡中必须装有对数据进行缓存的存储芯片。
在S104中,根据所述报文的内容确定待处理的业务。
网卡待处理的业务主要包括以下几种:
1、数据的封装与解封
发送时将上一层传递来的数据加上首部和尾部,成为以太网的帧。接收时将以太网的帧剥去首部和尾部,然后送交上一层。
2、链路管理
主要是通过CSMA/CD(Carrier Sense Multiple Access with CollisionDetection,带冲突检测的载波监听多路访问)协议来实现。
3、数据编码与译码
即曼彻斯特编码与译码。其中曼彻斯,又称数字双向码、相位编码(PE),是一种常用的二元码线路编码方式之一,被物理层使用来编码一个同步位流的时钟和数据。在通信技术中,用来表示所要发送比特流中的数据与定时信号所结合起来的代码。常用在以太网通信,列车总线控制,工业总线等领域。
在S106中,根据待处理业务在对应的内存池中申请内存块。可例如,确定待处理业务的顺序;按照所述顺序依次在对应的内存池中申请内存块。
在一个实施例中,还包括:为网卡设备中多个业务分别分配对应的内存池;分别为业务对应的内存池分配内存池标识。
在一个具体的实施例中,可为数据的封装与解封业务、链路管理业务、数据编码与译码业务分别分配不同的内存池进行处理。
在一个具体的实施例中,可将网卡内存相关的流程都抽象成为一个池,业务a的内存池为A,业务b的内存池为B,业务c的内存池为C,其他抽象为D。在每个内存块加一个标记pool_flag表示在哪个池中,一个时间戳标记time_flag用于记录在该池停留的时间。
在S108中,为当前申请的内存块分配内存池标识和时间戳。可根据当前申请的内存块的所属内存池对应的业务为当前申请的内存块分配内存池标识;根据当前系统时间为当前申请的内存块分配时间戳。
在一个实施例中,还包括:在预留的内存空间记录所述内存块对应的内存池标识和时间戳;根据所述内存块对应的多个内存池标识和时间戳生成所述内存块的轨迹信息。
在一个实施例中,还可申请一个内存空间来记录该内存的轨迹以便回朔内存在哪个地方发生了重复释放的问题。
在S110中,基于当前申请的内存块处理所述报文。可例如,在当前申请的内存块处理完毕所述报文后,将当前申请的内存块的内存池标识设置为空。
在S112中,根据所述内存池标识和所述时间戳进行所述网卡设备的内存池的管理。
在一个实施例中,可根据业务顺序依次获取内存块处理所述报文;在内存块处理所述报文之前,判断所述内存块的内存池标识是否符合条件;在不符合预设条件时,生成警告信息。
在每个池的入口出加上判断,每当业务变化的时候判断一下内存块的标记是否只处于一个池中。一旦发现标记同时处于两个池中则生成警告信息,然后查询内存轨迹到不合理的业务修改正确。
在一个实施例中,可定时获取预设内存池中内存块的时间戳;通过所述时间戳和当前系统时间生成时间差;在所述时间差大于阈值时,生成警告信息。
设置专用线程来遍历所有内存块的时间标记,理论上大部分内存在内存池的存放时间最长,如果它长时间停留在其他不合理的池,那么很有可能发生了内存泄露。对于系统时间减去时间戳时间超过设定阈值的内存上报日志给研发人员让其尽快检查是否存在问题。
根据本申请的网卡设备的内存池管理方法,通过网卡设备获取待处理的报文;根据所述报文的内容确定待处理的业务;根据待处理业务在对应的内存池中申请内存块;为当前申请的内存块分配内存池标识和时间戳;基于当前申请的内存块处理所述报文;根据所述内存池标识和所述时间戳进行所述网卡设备的内存池的管理的方式,在复杂的业务流程中能够快速而且准确的定位到内存重复释放或者内存泄露的问题,从而辅助管理员即使解决问题,提升系统效率,避免业务阻断。
应清楚地理解,本申请描述了如何形成和使用特定示例,但本申请的原理不限于这些示例的任何细节。相反,基于本申请公开的内容的教导,这些原理能够应用于许多其它实施例。
图2是根据一示例性实施例示出的一种网卡设备的内存池管理方法的流程图。图2所示的流程20是对图1所示的流程中S112“根据所述内存池标识和所述时间戳进行所述网卡设备的内存池的管理”的详细描述。
如图2所示,在S202中,根据业务顺序依次获取内存块处理所述报文。
在S204中,在内存块处理所述报文之前,判断所述内存块的内存池标识是否符合条件。
在S206中,在不符合预设条件时,生成警告信息。
如图3所示,假设网卡设备收到报文X,需要处理的业务是a、c。报文可经过D内存池,A内存池,C内存池、D内存池。
①报文X收到后被存放在刚从D内存池申请出来的内存块中将该内存块的pool_flag置为D,报文X出D内存池检查一下pool_flag为D,将pool_flag置为NULL。
②报文X进入A内存池,判断一下当前pool_flag标记为NULL则将标记置为A,在A内存池中处理完释放掉了,检查一下pool_flag为A则将pool_flag置为NULL。
③此时,报文X所占内存被错误的回收给了D内存池,进入D池判断一下pool_flag为NULL将pool_flag置为D。
④之后,报文X按照顺序进入C内存池,在进入C内存池的时候会判断出它pool_flag已经属于D内存池,此时生成警告信息。
在S208中,定时获取预设内存池中内存块的时间戳。
在S210中,通过所述时间戳和当前系统时间生成时间差。
在S212中,在所述时间差大于阈值时,生成警告信息。
假设设备收到报文Y,需要处理的业务是a、b。报文可例如会经过A内存池,B内存池、D内存池。
①系统启动时启动一个检测线程,不停的检查除了D内存池以外的所有申请出来的内存块的时间戳。用当前的系统时间jiffies减去内存块中的时间time_flag得到一个时间差值,判断它和设定时间阈值的大小。如果超时则上报内存块的地址和内存轨迹。否则不停的遍历。
②报文X收到后被存放在刚从D内存池申请出来的内存块中将该内存块的time_flag置为当前的系统时间jiffies。
③报文Y在进入A内存池时将time_flag置为当前的系统时间jiffies。
④报文Y在进入B内存池时将time_flag置为当前的系统时间jiffies,报文停留在该池没有下一步的动作。
⑤线程检测到该内存在B内存池停留时间过长,上报日志。
在S214中,进行故障定位。可根据所述警告信息获取故障内存块;获取所述故障内存块对应的轨迹信息;根据所述轨迹信息进行故障定位。
在一个实施例中,如上所述,报文X按照顺序进入C内存池,在进入C内存池的时候会判断出它pool_flag已经属于D内存池,此时生成警告信息。根据警告信息调出它的内存轨迹查看它在A池和C池的流程中不合理的地方,以进行故障定位。
根据本申请的网卡设备的内存池管理方法,能将内存块每个流程都监控到,从而快速而且准确的定位到重复释放或者内存泄露的问题。本申请能够在从报文收到到发出的过程中,快速定位有业务多次回收的问题。
本领域技术人员可以理解实现上述实施例的全部或部分步骤被实现为由CPU执行的计算机程序。在该计算机程序被CPU执行时,执行本申请提供的上述方法所限定的上述功能。所述的程序可以存储于一种计算机可读存储介质中,该存储介质可以是只读存储器,磁盘或光盘等。
此外,需要注意的是,上述附图仅是根据本申请示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
图5是根据一示例性实施例示出的一种网卡设备的内存池管理装置的框图。如图5所示,网卡设备的内存池管理装置50包括:报文模块502,业务模块504,内存模块506,标识模块508,处理模块510,管理模块512。
报文模块502用于网卡设备获取待处理的报文;
业务模块504用于根据所述报文的内容确定待处理的业务;
内存模块506用于根据待处理业务在对应的内存池中申请内存块;内存模块506还用于确定待处理业务的顺序;按照所述顺序依次在对应的内存池中申请内存块。
标识模块508用于为当前申请的内存块分配内存池标识和时间戳;标识模块508还用于根据当前申请的内存块的所属内存池对应的业务为当前申请的内存块分配内存池标识;根据当前系统时间为当前申请的内存块分配时间戳。标识模块508还用于在预留的内存空间记录所述内存块对应的内存池标识和时间戳;根据所述内存块对应的多个内存池标识和时间戳生成所述内存块的轨迹信息。
处理模块510用于基于当前申请的内存块处理所述报文;处理模块510还用于在当前申请的内存块处理完毕所述报文后,将当前申请的内存块的内存池标识设置为空。
管理模块512用于根据所述内存池标识和所述时间戳进行所述网卡设备的内存池的管理。管理模块512还用于根据业务顺序依次获取内存块处理所述报文;在内存块处理所述报文之前,判断所述内存块的内存池标识是否符合条件;在不符合预设条件时,生成警告信息。管理模块512还用于定时获取预设内存池中内存块的时间戳;通过所述时间戳和当前系统时间生成时间差;在所述时间差大于阈值时,生成警告信息。管理模块512还用于根据所述警告信息获取故障内存块;获取所述故障内存块对应的轨迹信息;根据所述轨迹信息进行故障定位。
根据本申请的网卡设备的内存池管理装置,通过网卡设备获取待处理的报文;根据所述报文的内容确定待处理的业务;根据待处理业务在对应的内存池中申请内存块;为当前申请的内存块分配内存池标识和时间戳;基于当前申请的内存块处理所述报文;根据所述内存池标识和所述时间戳进行所述网卡设备的内存池的管理的方式,在复杂的业务流程中能够快速而且准确的定位到内存重复释放或者内存泄露的问题,从而辅助管理员即使解决问题,提升系统效率,避免业务阻断。
图6是根据一示例性实施例示出的一种电子设备的框图。
下面参照图6来描述根据本申请的这种实施方式的电子设备600。图6显示的电子设备600仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图6所示,电子设备600以通用计算设备的形式表现。电子设备600的组件可以包括但不限于:至少一个处理单元610、至少一个存储单元620、连接不同系统组件(包括存储单元620和处理单元610)的总线630、显示单元640等。
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元610执行,使得所述处理单元610执行本说明书中描述的根据本申请各种示例性实施方式的步骤。例如,所述处理单元610可以执行如图1,图2中所示的步骤。
所述存储单元620可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)6201和/或高速缓存存储单元6202,还可以进一步包括只读存储单元(ROM)6203。
所述存储单元620还可以包括具有一组(至少一个)程序模块6205的程序/实用工具6204,这样的程序模块6205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线630可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备600也可以与一个或多个外部设备600’(例如键盘、指向设备、蓝牙设备等)通信,使得用户能与该电子设备600交互的设备通信,和/或该电子设备600能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口650进行。并且,电子设备600还可以通过网络适配器660与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。网络适配器660可以通过总线630与电子设备600的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备600使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
总体而言,本公开旨在从报文收到至发出的过程中,快速定位有业务多次回收的问题。这种问题不仅仅发生在内存池中。因此,本公开希望能将内存的错综复杂业务流程监控起来,将内存块每个流程都监控到,快速而且准确的定位重复释放或者内存泄露的问题,从而解决客户的燃眉之急。如图3所示,检查内存重复释放的流程:将网卡内存相关的流程都抽象成为一个池,业务a的池为A,业务b的池为B,业务c的池为C,内存池为D,其他抽象为E。在每个内存块加一个标记pool_flag表示在哪个池中,一个时间戳标记time_flag用于记录在该池停留的时间,申请一个内存空间来记录该内存的轨迹以便回朔内存在哪个地方发生了重复释放的问题。在每个池的入口出加上判断,每当业务变化的时候判断一下标记是否只处于一个池中。一旦发现标记同时处于两个池中则直接BUG_ON,然后查询内存轨迹到不合理的业务修改正确。如图4所示,检查内存泄露的流程:再启动一个线程来遍历所有内存块的时间标记,理论上大部分内存在内存池的存放时间最长,如果它长时间停留在其他不合理的池,那么很有可能发生了内存泄露。对于系统时间减去时间戳时间超过设定阈值的内存上报日志给研发人员让其尽快检查是否存在问题。对于检查重复释放,如图3和4所示,假设设备收到报文X,需要处理的业务是a、c。那么报文会经过D池,A池,C池、D池。①报文X收到后被存放在刚从D池申请出来的内存块中将该内存块的pool_flag置为D,报文X出D池检查一下pool_flag为D,将pool_flag置为NULL。②报文X进入A池,判断一下当前pool_flag标记为NULL则将标记置为A,在A池中处理完释放掉了,检查一下pool_flag为A则将pool_flag置为NULL。③报文X所占内存回收给了D池,进入D池判断一下pool_flag为NULL将pool_flag置为D。④报文X送了C池,那么在进入C池的时候会判断出它pool_flag已经属于D池,这时调出它的内存轨迹查看它在A池和C池的流程中不合理的地方。对于内存泄露,如图3和4所示,假设设备收到报文Y,需要处理的业务是a、b。那么报文会经过A池,B池、D池。①系统启动时启动一个检测线程,不停的检查除了D内存池以外的所有申请出来的内存块的时间戳。用当前的系统时间jiffies减去内存块中的时间time_flag得到一个时间差值,判断它和设定时间阈值的大小。如果超时则上报内存块的地址和内存轨迹。否则不停的遍历。②报文X收到后被存放在刚从D池申请出来的内存块中将该内存块的time_flag置为当前的系统时间jiffies。③报文Y在进入A池时将time_flag置为当前的系统时间jiffies。④报文Y在进入B池时将time_flag置为当前的系统时间jiffies,报文停留在该池没有下一步的动作。⑤线程检测到该内存在B池停留时间过长,上报日志。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,如图7所示,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、或者网络设备等)执行根据本申请实施方式的上述方法。
所述软件产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
所述计算机可读存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读存储介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本申请操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该计算机可读介质实现如下功能:网卡设备获取待处理的报文;根据所述报文的内容确定待处理的业务;根据待处理业务在对应的内存池中申请内存块;为当前申请的内存块分配内存池标识和时间戳;基于当前申请的内存块处理所述报文;根据所述内存池标识和所述时间戳进行所述网卡设备的内存池的管理。
本领域技术人员可以理解上述各模块可以按照实施例的描述分布于装置中,也可以进行相应变化唯一不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
通过以上的实施例的描述,本领域的技术人员易于理解,这里描述的示例实施例可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、移动终端、或者网络设备等)执行根据本申请实施例的方法。
以上具体地示出和描述了本申请的示例性实施例。应可理解的是,本申请不限于这里描述的详细结构、设置方式或实现方法;相反,本申请意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效设置。
本文发布于:2023-04-13 21:13:29,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/1/86736.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |