掌桥专利:专业的专利平台
掌桥专利
首页

内存测试方法、装置、设备及存储介质

文献发布时间:2023-06-19 19:30:30


内存测试方法、装置、设备及存储介质

技术领域

本公开涉及半导体技术领域,尤其涉及一种内存测试方法、内存测试装置、测试设备及计算机可读存储介质。

背景技术

DRAM(Dynamic Random Access Memory),即动态随机存取存储器,又称内存,最为常见的系统内存。DRAM存储器是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存条的性能对计算机的影响非常大。如何对内存条进行测试,保证内存的正常运行,非常重要。

然而,目前大部分的内存测试都是在操作系统中进行的,多核计算机运行多进程测试程序进行测试,需要进程调度器在不同进程之间调度。操作系统会占用大部分内容,相应地,会减少可测试内存,降低测试效率。

需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。

发明内容

本公开提供一种内存测试方法、装置、设备及存储介质,至少在一定程度上克服相关技术中提供的现有内存测试效率低的问题。

本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。

根据本公开的一个方面,提供一种内存测试方法,包括:获取多个无交集的内存测试单元;利用多个内核对各个内存测试单元进行测试,得到各个内核对所述各个内存测试单元的测试时间;根据所述各个内核对各个内存测试单元的测试时间,为所述各个内核匹配内存测试单元组,以基于所述内核与所述内存测试单元组的匹配关系对所述内存进行测试,其中,任意两个内核对应的内存测试单元组的测试时间的差值在预设时间范围内,且任意两个所述内存测试单元组无交集。

在本公开的一个实施例中,所述基于所述内核与所述内存测试单元组的匹配关系对所述内存进行测试,包括:根据预设内核线程绑定关系,确定与所述一个内核对应的目标线程;将所述目标线程与所述一个内核绑定,将所述目标线程与所述一个内核对应的内存测试单元组绑定,直至内核与内存测试单元组绑定完毕,开启测试。

在本公开的一个实施例中,所述将所述目标线程与所述一个内核对应的内存测试单元组绑定,包括:获取所述一个内核对应的内存测试单元组的测试参数;将所述测试参数输入至所述目标线程,使所述内存测试单元组与所述目标线程绑定。

在本公开的一个实施例中,在所述根据预设内核线程绑定关系,确定与所述一个内核对应的目标线程之前,所述方法还包括:按照预设绑定规则,构建内核与线程之间的内核线程绑定关系。

在本公开的一个实施例中,所述将所述目标线程与所述一个内核绑定,包括:基于统一可扩展固件接口将所述目标线程与所述一个内核绑定。

在本公开的一个实施例中,所述获取多个无交集的内存测试单元,包括:根据内存的颗粒数和CPU的内核数,确定所述内存测试单元数量;根据所述内存测试单元数量,将所述内存划分为多个无交集的内存测试单元,各个所述内存测试单元的容量相同。

在本公开的一个实施例中,所述利用多个内核对各个内存测试单元进行测试,得到各个内核对所述各个内存测试单元的测试时间,包括:将所述各个内核对所述各个内存测试单元的测试时间存储于测试时间矩阵表。

在本公开的一个实施例中,所述根据所述各个内核对各个内存测试单元的测试时间,为所述各个内核匹配内存测试单元组,包括:基于内核数将多个内存测试单元划分为多个内存测试单元组;根据所述各个内核对各个内存测试单元的测试时间,计算所述多个内存测试单元组的测试时间;若任意两个内存测试单元的测试时间之间的差值在预设时间范围内,则将所述多个内存测试单元组与所述多个内核匹配,其中,一个内存测试单元组内的内存测试单元属于相同内存颗粒,一个内存测试单元组对应一个内核。

在本公开的一个实施例中,所述方法还包括:若存在两个内存测试单元组的测试时间之间的差值未在预设时间范围内,则调整所述两个内存测试单元组内的部分内存测试单元,直至所述两个内存测试单元组的测试时间之间的差值在预设时间范围内。

在本公开的一个实施例中,所述根据所述各个内核对各个内存测试单元的测试时间,为所述各个内核匹配内存测试单元组,包括:基于内核数将多个内存测试单元划分为多个内存测试单元组;根据所述各个内核对各个内存测试单元的测试时间,计算所述内存测试单元组的测试时间平均值和所述多个内存测试单元组的测试时间;若各个内存测试单元组的测试时间和内存测试单元组的测试时间平均值之间的差值在所述预设时间范围内,则将所述多个内存测试单元组与所述多个内核匹配,其中,一个内存测试单元组内的内存测试单元属于相同内存颗粒,一个内存测试单元组对应一个内核。

在本公开的一个实施例中,所述方法还包括:若存在一个内存测试单元组的测试时间和内存测试单元组的测试时间平均值之间的差值未在所述预设时间范围内,则按照预设顺序对多个内存测试单元组排序,确定测试时间最大值对应的第一内存测试单元组和测试时间最小值对应的第二内存测试单元组;交换所述第一内存测试单元组和所述第二内存测试单元组内的至少一个内存测试单元,直至交换后的内存测试单元组的测试时间与内存测试单元的测试时间平均值之间的差值在所述预设时间范围内。

在本公开的一个实施例中,所述内存测试单元组的测试时间为所述内存测试单元组内的内存测试单元的测试时间之和,或者,所述内存测试单元组的测试时间为所述内存测试单元组内的内存测试单元的测试时间的平均值。

根据本公开的另一个方面,还提供了一种内存测试装置,包括:获取模块,用于获取多个无交集的内存测试单元;耗时模块,用于利用多个内核对各个内存测试单元进行测试,得到各个内核对所述各个内存测试单元的测试时间;匹配模块,用于根据所述各个内核对各个内存测试单元的测试时间,为所述各个内核匹配内存测试单元组,基于所述内核与所述内存测试单元组的匹配关系对所述内存进行测试,其中,任意两个内核对应的内存测试单元组的测试时间的差值在预设时间范围内,且任意两个内存测试单元组无交集。

根据本公开的另一个方面,还提供了一种测试设备,包括处理器及存储器,所述存储器用于存储所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行上述内存测试方法。

根据本公开的另一个方面,还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的内存测试方法。

根据本公开的另一个方面,还提供了一种计算机程序产品,所述计算机程序产品包括计算机程序或计算机指令,所述计算机程序或所述计算机指令由处理器加载并执行,以使计算机实现上述的内存测试方法。

本公开提供了一种内存测试方法、装置、设备及存储介质,通过获取多个无交集的内存测试单元;利用多个内核对各个内存测试单元进行测试,得到各个内核对所述各个内存测试单元的测试时间;根据各个内核对各个内存测试单元的测试时间,为各个内核匹配内存测试单元组,任意两个内核对应的内存测试单元组的测试时间的差值在预设时间范围内,能够通过为每个内核绑定内存测试单元组,使多个内核的运行时间接近;各个内存测试单元组内的内存测试单元无交集,从而防止一个内核对多个内存测试单元进行多次测试,缩短测试时间,保证内存测试单元组的物理地址相互独立,互不影响,实现内存到内核的绑定,该测试设备无需操作系统,无需线程切换,大大提升内存测试效率。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1示出本公开实施例中提供的一种多CPU多内核进行内存测试的结构示意图;

图2示出本公开实施例中的操作系统中程序、进程与线程之间的关系图;

图3示出本公开实施例中的同一进程中单线程与多线程运行示意图;

图4示出本公开实施例中的内核与线程之间多对多模型示意图;

图5示出本公开实施例提供的内核与线程之间一对一模型示意图;

图6示出本公开实施例提供的内存、线程与内核的模型示意图;

图7示出本公开实施例提供的一种内存测试方法流程图;

图8示出本公开实施例提供的一种内存测试单元组与内核匹配方法流程图;

图9示出本公开实施例提供的另一种内存测试单元组与内核匹配方法流程图;

图10示出本公开实施例提供的另一种内存测试方法流程图;

图11示出本公开实施例提供的一种内存测试装置的结构示意图;

图12示出本公开实施例提供的一种测试设备的框架图;

图13示出本公开实施例提供的一种计算机程序产品的示意图。

具体实施方式

下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

文中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个所述特征。在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确需要说明的是限定。

在本申请的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接或可以相互通讯;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本申请中的具体含义。

下文的公开提供了许多不同的实施方式或例子用来实现本申请的不同结构。为了简化本申请的公开,下文中对特定例子的部件和设置进行描述。当然,它们仅仅为示例,并且目的不在于限制本申请。此外,本申请可以在不同例子中重复参考数字和/或参考字母,这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施方式和/或设置之间的关系。

在进行DRAM测试时,测试设备通常采用多CPU、多内核结构,例如多CPU多内核计算机。图1示出本公开实施例中提供的一种多CPU多内核进行内存测试的结构示意图。如图1所示,测试设备包括四个CPU,每个CPU包括两个核,每个核分别连接对应的待测DRAM,测试数据存储于高速缓冲存储器Cache内。

在测试设备的操作系统中,程序是指一组指示测试设备(例如计算机或者其他具有信息处理能力装置)执行动作或做出判断的指令,通常采用某种程序设计语言编写,运行于某种目标计算机体系结构上,例如,可以采用C语言、Java语言等方式编写得到程序。

进程是计算机中的软件程序关于某数据集合上的一次运行活动,是操作系统进行资源分配核调度的基本单位、内存、变量等资源,是操作系统结构的基础。

线程是进程中的一个实体,是被系统独立调度核分配的基本单位,线程本身不拥有操作系统资源,但是该线程可与同属进程的其他线程共享该进程所拥有的全部资源,例如内存、代码段等。

需要说明的是,进程是程序的实体,而线程又是进程的实体,进程是线程的容器。

图2示出本公开实施例中的操作系统中程序、进程于线程之间的关系图。如图2所示,在操作系统中开发两套程序,分别为程序A和程序B,其中,程序A绑定两个进程,分别为进程1和进程2,进程1绑定一个线程1,进程2分别绑定两个线程1;程序B绑定一个进程,即图2中的程序3,程序3绑定一个线程1。

图3示出本公开实施例中的同一进程中单线程与多线程运行示意图。如图3所示,在每个单线程或多线程中,划分为多个时间片。对于单线程,在各个时间片可执行设定的程序,以实现DRAM测试。对于多线程而言,多个线程共享该进程所拥有的全部资源,在某一个时间片,仅供多线程中的其中一个线程运行,多线程中的剩余线程均处于就绪状态,只有处于运行状态的线程运行完毕后,调度器方可调度处于就绪状态的剩余线程。

如图4所示,在CPU内核与线程之间的多对多模型中,多个线程之间存在资源共享,彼此协调共享资源的使用,从而交出或获得CPU执行时间片的使用权。

在一个调度周期内,当CPU调度时间片到达时,将处于运行状态的线程保存上下文、挂起,并按照预设的算法重新分配CPU资源到对应的线程,并执行当前时间片,当前时间片执行完毕后,进入下一个调度周期,直至完成所有的时间片。例如在一个调度周期内,当CPU调度时间片到达时,线程1~线程3保存上下文并挂起,调度器按照预设的算法分配CPU资源(内核K1)至线程1执行当前时间片,线程1执行完毕当前时间片后,进入下一个调度周期;线程1~线程3保存上下文并挂起,调度器重新分配CPU资源(内核K1)至线程2执行时间片,直至所有的线程执行完毕。

综上所述,可以发现,采用多进程测试程序测试DRAM,在存在操作系统的情况下,需要调度器在进程之间调度,操作系统会占用很大一部分内存,相应的,将减少可测试的内存;另一方面,由于进程间的切换,以及内核对内存的访问时间差异,极端情况下一个内核对内存测试速度非常慢,而有些内存对某些内核的访问效率却很高,调度器随机性无法访问这些内存,从而造成测试效率低下的技术问题。

因此,如何提升内存测试效率成为了亟待解决的问题之一。

为了便于整体了解本公开实施例提供的技术方案,接下来对本公开实施例提供的内核与线程之间的绑定模型进行说明。

图5示出本公开实施例提供的内核与线程之间一对一模型示意图。如图5所示,对于一对一模型来说,一个线程唯一地使用一个内核,线程和内核之间一一对应,不同的线程之间相互独立的并发执行,能够省去CPU调取,不存在线程之间的切换,无需操作系统即可实现内存测试,每个线程独享CPU资源,从而避免互斥或者死锁的发生,直至程序运行结束。

示例性的,在图5中,测试设备包括四个内核K0~K3,共设置四个线程,分别为线程1~线程4,具体的,内核K0与线程4绑定,内核K1~K3分别与线程1~线程3绑定,以构建CPU内核与线程之间的一对一模型。

图6示出本公开实施例提供的待测内存、线程与内核之间模型示意图。如图6所示,从线程角度谈论并行,是指在多个线程之间不存在数据共享或通信,能够利用CPU的并行能力运行多个线程,一对一模型无需切换操作系统,能够提升内存测试效率。

基于此,本公开实施例提供的技术方案,通过获取多个无交集的内存测试单元;利用多个内核对各个内存测试单元进行测试,得到各个内核对所述各个内存测试单元的测试时间;根据各个内核对各个内存测试单元的测试时间,为各个内核匹配内存测试单元组,任意两个内核对应的内存测试单元组的测试时间的差值在预设时间范围内,能够通过为每个内核绑定内存测试单元组,使多个内核的运行时间接近;各个内存测试单元组内的内存测试单元无交集,从而防止一个内核对多个内存测试单元进行多次测试,缩短测试时间,保证内存测试单元组的物理地址相互独立,互不影响,实现内存到内核的绑定,该测试设备无需操作系统,无需线程切换,大大提升内存测试效率。

下面结合附图及实施例对本示例实施方式进行详细说明。

首先,本公开实施例中提供了一种内存测试方法,该方法可以由任意具备计算处理能力的电子设备执行。

图7示出本公开实施例提供的一种内存测试方法的流程图。如图7所示,在一个实施例中,一种内存测试方法,包括:

S702、获取多个无交集的内存测试单元。

在一个实施例中,内存测试单元可以采用内存ID、开始地址和结束地址等参数进行表征,一方面,不同内存测试单元以开始地址和结束地址构成的地址区间无交集,从而保证内存测试单元相互独立,另一方面,相邻内存测试单元的开始地址和结束地址连续,以使内存可完整地被包含在对应的内存测试单元内。

将内存划分为多个内存测试单元的方式有多种,例如,可以根据内存的颗粒数和CPU的内核数划分、也可以根据内存颗粒数的倍数以及CPU的内核数划分,只要划分后的内存测试单元无交集即可,本公开不做具体限定。

值得注意的是,对于内存测试单元的数量,一方面需要将内存划分尽量多的无交集的内存测试单元,当不同线程的测试时间相差较大时,以便于通过调整部分内存测试单元,以使各个线程之间的测试时间接近,提升调整灵活性,另一方面,内存测试单元的数量并非越多越好,内存测试单元数量过多,易造成计算量增大,内存测试用时缩短不明显。

S704、利用多个内核对各个内存测试单元进行测试,得到各个内核对各个内存测试单元的测试时间。

内核对内存测试单元进行测试的目的在于记录一次写入数据和读出数据的时长,以预估内存测试单元执行测试任务时的时长。

上述的利用多个内核对各个内存测试单元进行测试,可以通过一个内核将一个确定的数据写入一个内存测试单元,从上述内存测试单元读出数据,比较写入数据和写入数据是否一致,记录写入数据时间和读出数据时间,将读出数据时间和写入数据时间的差值,作为上述内存测试单元的测试时间;依次通过上述内核对所有内存测试单元测试,得到该内核对各个内存测试单元的测试时间;继续将剩余内核依次对各个内存测试单元测试,得到剩余内核对各个内存测试单元的测试时间。

在一个实施例中,上述的S704还包括:将各个内核对各个内存测试单元的测试时间存储于测试时间矩阵表,测试时间矩阵表用于表征各个内核与各个内存测试单元的测试时间之间的对应关系,以便于后续追踪,及时确认异常。

需要说明的是,除了采用测试时间矩阵表记录内核对内存测试单元的测试时间之外,还可以采用散点图等形式表征,本公开不做具体限定。

S706、根据各个内核对各个内存测试单元的测试时间,为各个内核匹配内存测试单元组,以基于内核与内存测试单元组的匹配关系对内存进行测试,其中,任意两个内核对应的内存测试单元组的测试时间的差值在预设时间范围内,任意两个内存测试单元组无交集。

内存测试单元组可以包括至少一个内存测试单元,当内存测试单元组内的内存测试单元为多个时,多个内存测试单元无交集,以保证任意两个内存测试单元组无交集,相互独立,互不影响,可以实现线程的独立运行。

内存测试单元组的测试时间由内存测试单元组内的内存测试单元的测试时间确定,可以为内存测试单元组内的内存测试单元的测试时间之和,也可以为内存测试单元组内的内存测试单元的测试时间的平均值。

通过将任意两个内核对应的内存测试单元组的测试时间的差值限制在预设时间范围内,以保证每个内存测试单元组的测试时间基本相同,即保证同时开始、同时结束,从而缩短内存总的测试时间。

预设时间范围可以预先设定于测试设备的匹配模块内,预设时间范围可以根据实际情况而定,例如,预设时间范围可以为[0,5ms]等,不做具体限定。

需要说明的是,上述的预设时间范围仅是为说明本公开实施例而提供的示例,不应将其视为本公开保护范围的限制。可以根据具体情况确定预设时间范围的取值。

本公开实施例提供的内存测试方法,通过获取多个无交集的内存测试单元;利用多个内核对各个内存测试单元进行测试,得到各个内核对所述各个内存测试单元的测试时间;根据各个内核对各个内存测试单元的测试时间,为各个内核匹配内存测试单元组,任意两个内核对应的内存测试单元组的测试时间的差值在预设时间范围内,能够通过为每个内核绑定内存测试单元组,使多个内核的运行时间接近;各个内存测试单元组内的内存测试单元无交集,从而防止一个内核对多个内存测试单元进行多次测试,缩短测试时间,保证内存测试单元组的物理地址相互独立,互不影响,实现内存到内核的绑定,该测试设备无需操作系统,无需线程切换,大大提升内存测试效率。

在一个实施例中,上述S702中的多个无交集的内存测试单元通过以下方式得到:根据内存的颗粒数和CPU的内核数,确定内存测试单元数量;根据内存测试单元数量,将内存划分为多个无交集的内存测试单元,各个内存测试单元的容量相同,从而保证不同内存测试单元的测试时间接近或基本相同,同时,若存在某个内存测试单元的容量很大,则有可能一个内核仅对应一个内存测试单元,导致后续内核无法完全分配给各个内存测试单元组。

假设内存的颗粒数为M个,CPU的内核数为K个,内存测试单元数量N=M×K个,通过内存颗粒数和内核数切分的内存测试单元相互独立,各个内存测试单元无交集。内存测试单元可以采用用于区分待测试的多个内存的内存ID、开始地址和结束地址进行标识。

获取测试系统可测试内存总容量V,则每个内存测试单元的容量E=V/N。

将内存测试单元依次编号为内存测试单元0、内存测试单元1、…、内存测试单元N-1;将内核依次标记为内核0、内核1、…、内核K-1。

分别使用内核1~K-1对测试单元0~K-1进行测试,得到内核1~K-1对内存测试单元0~K-1的测试时间。

示例性的,若内存的颗粒数为64个、CPU的内核数为4个,则可以将内存划分为256个内存测试单元,将内存测试单元标记为内存测试单元0、内存测试单元1、…、内存测试单元255;将内核标记为内核0、内核1、…、内核3。

本公开通过内存的颗粒数和CPU的内核数划分无交集的内存测试单元,一方面保证各个内存测试单元之间无交集、相互独立,且划分的内存测试单元具有足够的数量;另一方面,划分的内存测试单元能够覆盖内存的所有地址,保证内存测试的完整性。

图8示出本公开实施例提供的一种内存测试单元组与内核匹配方法流程图。如图8所示,在一个实施例中,上述S706根据所述各个内核对各个内存测试单元的测试时间,为所述各个内核匹配内存测试单元组,包括:

S802、基于内核数将多个内存测试单元划分为多个内存测试单元组。

对于内存测试单元划分,根据内存颗粒数和内核数实现,为了便于操作,按照内核数将多个内存测试单元划分为多个内存测试单元组。

需要说明的是,由于不同内存测试单元的测试时间存在一定的差异,每个内存测试单元组内可以包含相同数量的内存测试单元,也可以包含不同数量的内存测试单元,可以根据实际情况调整。

S804、根据各个内核对各个内存测试单元的测试时间,计算多个内存测试单元组的测试时间。

内存测试单元组的测试时间可以为内存测试单元组内的内存测试单元的测试时间之和,或者,内存测试单元组的测试时间也可以为内存测试单元组内的内存测试单元的测试时间的平均值。需要说明的是,当内存测试单元组内的内存测试单元数量不同时,仅可采用内存测试单元组内的内存测试单元的测试时间之和作为内存测试单元组的测试时间。

在一个实施例中,可以将各个内存测试单元组的测试时间、各个内存测试单元组内的内存测试单元ID等信息记录于测试时间统计表内,以便根据测试时间统计表调整内存测试单元。

S806、若任意两个内存测试单元的测试时间之间的差值在预设时间范围内,则将多个内存测试单元组与多个内核匹配,其中,一个内存测试单元组内的内存测试单元属于相同内存颗粒,一个内存测试单元组对应一个内核。

计算任意两个内存测试单元组的测试时间之间的差值,比较上述差值与预设时间范围之间的关系,当任意两个内存测试单元组的测试时间之间的差值在预设时间范围内时,表明任意两个内存测试单元组的测试时间接近,可以将内存测试单元组与内核匹配,一个内存测试单元组对应一个内核,从而保证内存到内核的绑定,提升内存测试效率,缩短内存测试时间。

例如,当内核数为4个、内存测试单元为256个时,基于内核数,可以将内存测试单元组划分为4个内存测试单元组(内存测试单元组0~3),每个内存测试单元组内初始包含64个内存测试单元。

分别计算内存测试单元组0~3内的64个内存测试单元的测试时间之后,得到内存测试单元组0~3的测试时间,分别计算内存测试单元组0与内存测试单元组1~3的测试时间的差值、内存测试单元组1与内存测试单元组2~3的测试时间的差值、内存测试单元组2和内存测试单元组3的测试时间的差值,判断上述差值是否在预设时间范围内,若在预设时间范围内,则表明内存测试单元组0~3的测试时间接近,将内存测试单元组0~3与内核0~3匹配即可。

上述的一个内存测试单元组内的内存测试单元属于相同内存颗粒,能够改善由于颗粒的物理位置差别导致的测试时间差异。

可选的,本公开实施例提供的内存测试方法还包括:若存在两个内存测试单元组的测试时间之间的差值未在预设时间范围内,则调整两个内存测试单元组内的部分内存测试单元,直至两个内存测试单元组的测试时间之间的差值在预设时间范围内。

在一个实施例中,当存在两个内存测试单元组的测试时间之间的差值未在预设时间范围内时,表明上述两个内存测试单元组的测试时间差别较大,无法保证各个线程同时开启、同时结束,造成内存测试时间长,故需要调整内存测试单元组内的内存测试单元,以使调整后的内存测试单元组的测试时间之间的差值在预设时间范围内。

对于上述两个内存测试单元组,可以将测试时间较大的内存测试单元组内的内存测试单元与测试时间较小的内存测试单元组内的内存测试单元交换。例如,两个内存测试单元组内均包括64个内存测试单元,一个内存测试单元组的测试时间为3s,另一个内存测试单元组的测试时间为4s,两者之间的差值为1s,预设时间范围为[0,0.8s],故上述差值未在预设时间范围内,需要调整上述两个内存测试单元组内的内存测试单元,在调整时,可以将另一个内存测试单元组内的测试时间为200ms的内存测试单元调整至上述一个内存测试单元组内,还可以将另一个内存测试单元组内的测试时间为300ms的内存测试单元调整至上述一个内存测试单元组内,并将上述一个内存测试单元组内的测试时间为100ms的内存测试单元调整至上述另一个内存测试单元组内。

需要说明的是,调整内存测试单元组内的内存测试单元,使两个内存测试单元组的测试时间之间的差值在预设时间范围内的方式有多种,上述仅是为说明本公开实施例而提供的示例,不应将其视为对本公开保护范围的限制。在实际实施过程中,可以根据具体情况选择内存测试单元组内需要调整的内存测试单元及其数量,本公开不做具体限定。

本公开实施例提供的内存测试方法,基于内核数将多个内存测试单元划分为多个内存测试单元组,当任意两个内存测试单元组的测试时间的差值在预设时间范围内时,表明各个内存测试单元组的测试时间接近,将内存测试单元组与内核匹配即可,当存在两个内存测试单元组的测试时间的差值未在预设时间范围内时,表明上述两个内存测试单元组的测试时间相差较多,无法保证线程同时开启、同时结束,通过调整部分内存测试单元使内存测试单元组的测试时间接近,该方式调整方便,缩短内存测试时间。

图9示出本公开实施例提供的另一种内存测试单元组与内核匹配方法流程图。如图9所示,在一个实施例中,上述的S706根据各个内核对各个内存测试单元的测试时间,为各个内核匹配内存测试单元组,包括:

S902、基于内核数将多个内存测试单元划分为多个内存测试单元组。

对于内存测试单元划分,根据内存颗粒数和内核数实现,为了便于操作,按照内核数将多个内存测试单元划分为多个内存测试单元组。初始划分内存测试单元组时,每个内存测试单元组内的内存测试单元的数量相同。

S904、根据各个内核对各个内存测试单元的测试时间,计算内存测试单元组的测试时间平均值和多个内存测试单元组的测试时间。

内存测试单元组的测试时间可以为内存测试单元组内的内存测试单元的测试时间之和,或者,内存测试单元组的测试时间为内存测试单元组内的内存测试单元的测试时间的平均值。需要说明的是,当内存测试单元组内的内存测试单元的数量不同时,采用内存测试单元的测试时间之后作为内存测试单元组的测试时间。

内存测试单元组的测试时间平均值根据该内存测试单元组内内存测试单元的测试时间与内存测试单元的数量得到,通过内存测试单元组的测试时间平均值作为调整的基准。

S906、若各个内存测试单元组的测试时间和内存测试单元组的测试时间平均值之间的差值在预设时间范围内,则将多个内存测试单元组与多个内核匹配,其中,一个内存测试单元组内的内存测试单元属于相同内存颗粒,一个内存测试单元组对应一个内核。

在一个实施例中,计算各个内存测试单元组的测试时间与内存测试单元组的测试时间平均值之间的差值,进而根据差值与预设时间范围的关系,确认是否对内存测试单元组内的内存测试单元进行调整。

预设时间范围预先配置于测试设备的匹配模块内,例如,预设时间范围为[-0.5s,0.5s],可以根据实际情况而定,本公开不做具体限定。

上述的一个内存测试单元组内的内存测试单元属于相同内存颗粒,能够改善由于颗粒的物理位置差别导致的测试时间差异。

可选的,本公开实施例提供的内存测试方法还包括:若存在一个内存测试单元组的测试时间和内存测试单元组的测试时间平均值之间的差值未在预设时间范围内,则按照预设顺序对多个内存测试单元组排序,确定测试时间最大值对应的第一内存测试单元组和测试时间最小值对应的第二内存测试单元组;交换第一内存测试单元组和第二内存测试单元组内的至少一个内存测试单元,直至交换后的内存测试单元组的测试时间与内存测试单元的测试时间平均值之间的差值在预设时间范围内。

预设顺序可以按照从大至小的顺序对内存测试单元组排序,也可以按照从小至大的顺序对内存测试单元组排序,从排序结果中筛选测试时间最大值对应的第一内存测试单元组和测试时间最小值对应的第二内存测试单元组,交换上述两个内存测试单元组内的部分内存测试单元,直至交换后的上述两个内存测试单元组的测试时间与测试时间平均值之间的差值在预设范围内。

需要说明的是,在交换部分内存测试单元时,可以参考上述实施例的实现,此处不再赘述。

本公开实施例提供的内存测试方法,基于内核数将多个内存测试单元划分为多个内存测试单元组,将内存测试单元组的测试时间平均值作为调整基准,当内存测试单元组的测试时间与测试时间平均值的差值在预设时间范围内时,各个内存测试单元组的测试时间接近,将内存测试单元组与内核匹配即可,当存在内存测试单元组的测试时间与测试时间平均值的差值未在预设时间范围内时,表明上述两个内存测试单元组的测试时间相差较多,无法保证线程同时开启、同时结束,通过调整部分内存测试单元使内存测试单元组的测试时间接近,该方式调整方便,缩短内存测试时间。

图10示出本公开实施例提供的另一种内存测试方法流程图。在图7实施例的基础上,增加步骤S708~S710,以将内核、线程、内存测试单元组绑定,以基于内核与内存测试单元组之间的匹配关系对内存进行测试。在一个实施例中,如图10所示,该方法包括S702~S710,具体地包括:

S708、根据预设内核线程绑定关系,确定与一个内核对应的目标线程;

S710、将目标线程与一个内核绑定,将目标线程与一个内核对应的内存测试单元组绑定,直至内核与内存测试单元组绑定完毕,开启测试。

在一个实施例中,在上述S708根据预设内核线程绑定关系,确定与一个内核对应的目标线程之前,该方法还包括:按照预设绑定规则,构建内核与线程之间的内核线程绑定关系。

预设绑定规则用于确定内核与线程之间的对应关系,预设绑定规则默认为内核ID与线程ID从小到大一一对应,也可以根据测试人员的指令进行调整,不做具体限定。

内核线程绑定关系用于指示内核与线程之间的对应关系,内核线程绑定关系可以以内核线程绑定关系表的形式存储于测试设备的绑定模块。内核线程绑定关系表中包含内核ID与线程ID,从而确定两者的对应关系,便于快速确定目标线程。

通过统一可扩展固件接口实现内核与线程绑定。

在一个实施例中,上述的S710将目标线程与一个内核对应的内存测试单元组绑定,包括:获取一个内核对应的内存测试单元组的测试参数;将测试参数输入至目标线程,使内存测试单元组与目标线程绑定。

内核和与该内核对应的内存测试单元组通过目标线程实现对内存测试单元组的测试,目标线程可以根据实际情况而定,例如,通过预设内核线程绑定关系,确定内核对应的目标线程。

内存测试单元组的测试参数包括内存ID、内存测试单元组内的内存测试单元的开始地址和结束地址等,将内存测试单元组的测试参数输入至目标线程即可实现内存测试单元组与目标线程的绑定。

本公开通过预设内核线程绑定关系确定目标线程,将内核、目标线程、内存绑定,开启测试,无需进程调度器,大大降低了工程实现难度,实现内存测试进程并行测试,提高测试效率,避免出现互斥资源的卡死,短暂的进程卡住等影响测试的问题。

为了便于对本公开提供的内存测试方法的理解,下面结合具体的示例进行说明。

一种内存测试方法的总体流程如下:

1、切分内存测试单元,测算每一个内核对每一块内存测试单元的测试时间。

2、根据测试时间获取最佳测试时间的内存绑定核列表。

3、为每一个内核绑定一个线程,每个线程执行相同的测试算法。

4、按照内存内核绑定核列表,为内核绑定的线程分配测试内存。

5、启动内核测试内存。

对于切分内存测试单元,测算每一个内核对每一块内存测量单元的的测试时间,可以通过以下过程实现:

a)根据DRAM内存颗粒数M,以及内核数K,内存切分的内存测试单元数N=M×K;

b)获取系统可测试内存总容量V,把内存切分为N个内存测试单元,每一个内存测试单元容量E=V/N;

c)把内存测试单元依次标号为测试单元0,1,2,…,N-1;

d)把内核依次标记为内核0,1,2,…,K-1;

e)分别使用内核0,1,2,…,K-1,对内存测试单元0,1,2,…,N-1进行测试,获取每一个内存测试单元,使用每一个内核的测试时间矩阵表,如表1所示。

表1测试时间矩阵表(单位:ms)

根据表1的测试时间能够获取最佳测试时间内存绑定核列表。

在保证每一个内核运行测试时间基本相同的情况下(即任意两个内存测试单元组的测试时间之间的差值在预设时间范围内),根据测试时间矩阵表获取内存测试单元组与内核绑定列表,如表2所示。

表2内存测试单元组与内核绑定列表

根据预设内核线程对应关系,为每一个内核绑定一个线程,如表3所示。

表3内核线程绑定关系表

绑定内存测试单元与线程,实现内存绑定到内核,如表4所示。

表4内存内核绑定列表

内存、线程、内核绑定完毕,启动内核,开始测试即可。

基于同一发明构思,本公开实施例中还提供了一种内存测试装置,如下面的实施例所述。由于该装置实施例解决问题的原理与上述方法实施例相似,因此该装置实施例的实施可以参见上述方法实施例的实施,重复之处不再赘述。

图11示出本公开实施例提供的一种内存测试装置的结构示意图。如图11所示,在一个实施例中,本公开实施例提供的内存测试装置包括获取模块1101、耗时模块1102、以及匹配模块1103。

其中,获取模块1101,用于获取多个无交集的内存测试单元;

耗时模块1102,用于利用多个内核对各个内存测试单元进行测试,得到各个内核对各个内存测试单元的测试时间;

匹配模块1103,用于根据各个内核对各个内存测试单元的测试时间,为各个内核匹配内存测试单元组,以基于内核与内存测试单元组的匹配关系对内存进行测试,其中,任意两个内核对应的内存测试单元组的测试时间的差值在预设时间范围内,且任意两个所述内存测试单元组无交集。

在一个实施例中,该装置还包括未显示在附图中的绑定模块,绑定模块用于根据预设内核线程绑定关系,确定与一个内核对应的目标线程;将目标线程与一个内核绑定,将目标线程与一个内核对应的内存测试单元组绑定,直至内核与内存测试单元组绑定完毕,开启测试。

在一个实施例中,绑定模块具体用于获取一个内核对应的内存测试单元组的测试参数;将测试参数输入至目标线程,使内存测试单元组与所述目标线程绑定。

在一个实施例中,该装置还包括未显示在附图中的构建模块,构建模块用于按照预设绑定规则,构建内核与线程之间的内核线程绑定关系。

在一个实施例中,绑定模块基于统一可扩展固件接口将目标线程与所述一个内核绑定。

在一个实施例中,获取模块1101,具体用于根据内存的颗粒数和CPU的内核数,确定内存测试单元数量;根据内存测试单元数量,将内存划分为多个无交集的内存测试单元,各个所述内存测试单元的容量相同。

在一个实施例中,耗时模块1102具体用于将各个内核对各个内存测试单元的测试时间存储于测试时间矩阵表。

在一个实施例中,匹配模块1103用于基于内核数将多个内存测试单元划分为多个内存测试单元组;根据各个内核对各个内存测试单元的测试时间,计算多个内存测试单元组的测试时间;若任意两个内存测试单元的测试时间之间的差值在预设时间范围内,则将多个内存测试单元组与多个内核匹配,其中,一个内存测试单元组内的内存测试单元属于相同内存颗粒,一个内存测试单元组对应一个内核。

在一个实施例中,匹配模块1103还用于若存在两个内存测试单元组的测试时间之间的差值未在预设时间范围内,则调整两个内存测试单元组内的部分内存测试单元,直至两个内存测试单元组的测试时间之间的差值在预设时间范围内。

在另一个实施例中,匹配模块1103用于基于内核数将多个内存测试单元划分为多个内存测试单元组;根据各个内核对各个内存测试单元的测试时间,计算内存测试单元组的测试时间平均值和多个内存测试单元组的测试时间;若各个内存测试单元组的测试时间和内存测试单元组的测试时间平均值之间的差值在预设时间范围内,则将多个内存测试单元组与多个内核匹配,其中,一个内存测试单元组内的内存测试单元属于相同内存颗粒,一个内存测试单元组对应一个内核。

在一个实施例中,匹配模块1103还用于若存在一个内存测试单元组的测试时间和内存测试单元组的测试时间平均值之间的差值未在预设时间范围内,则按照预设顺序对多个内存测试单元组排序,确定测试时间最大值对应的第一内存测试单元组和测试时间最小值对应的第二内存测试单元组;交换第一内存测试单元组和所述第二内存测试单元组内的至少一个内存测试单元,直至交换后的内存测试单元组的测试时间与内存测试单元的测试时间平均值之间的差值在预设时间范围内。

需要说明的是,内存测试单元组的测试时间为内存测试单元组内的内存测试单元的测试时间之和,或者,内存测试单元组的测试时间为内存测试单元组内的内存测试单元的测试时间的平均值。

所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。

本公开实施例提供的内存测试装置,通过获取多个无交集的内存测试单元;利用多个内核对各个内存测试单元进行测试,得到各个内核对所述各个内存测试单元的测试时间;根据各个内核对各个内存测试单元的测试时间,为各个内核匹配内存测试单元组,任意两个内核对应的内存测试单元组的测试时间的差值在预设时间范围内,能够通过为每个内核绑定内存测试单元组,使多个内核的运行时间接近;各个内存测试单元组内的内存测试单元无交集,从而防止一个内核对多个内存测试单元进行多次测试,缩短测试时间,保证内存测试单元组的物理地址相互独立,互不影响,实现内存到内核的绑定,该测试设备无需操作系统,无需线程切换,大大提升内存测试效率。

下面参照图12来描述根据本发明的这种实施方式的测试设备1200。图12显示的测试设备1200仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图12所示,测试设备1200以通用计算设备的形式表现。测试设备1200的组件可以包括但不限于:上述至少一个处理单元1210、上述至少一个存储单元1220、连接不同系统组件(包括存储单元1220和处理单元1210)的总线1230。

其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元1210执行,使得所述处理单元1210执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。例如,所述处理单元1210可以执行如图7中所示的获取多个无交集的内存测试单元;利用多个内核对各个内存测试单元进行测试,得到各个内核对各个内存测试单元的测试时间;根据各个内核对各个内存测试单元的测试时间,为各个内核匹配内存测试单元组,以基于内核与内存测试单元组的匹配关系对内存进行测试,其中,任意两个内核对应的内存测试单元组的测试时间的差值在预设时间范围内,且任意两个内存测试单元组无交集。

存储单元1220可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)12201和/或高速缓存存储单元12202,还可以进一步包括只读存储单元(ROM)12203。

存储单元1220还可以包括具有一组(至少一个)程序模块12205的程序/实用工具12204,这样的程序模块12205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。

总线1230可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。

测试设备1200也可以与一个或多个外部设备1240(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该系统1200交互的设备通信,和/或与使得该测试设备1200能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口1250进行。并且,系统还可以通过网络适配器1260与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图12所示,网络适配器1260通过总线1230与测试设备1200的其它模块通信。应当明白,尽管图中未示出,可以结合测试设备1200使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。

通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施方式的方法。

在本公开的示例性实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质可以是可读信号介质或者可读存储介质。图13示出本公开实施例中提供的一种计算机可读存储介质示意图,如图13所示,该计算机可读存储介质1300上存储有能够实现本公开上述方法的程序产品。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在用户设备上运行时,所述程序代码用于使所述用户设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。

根据本发明的实施方式的用于实现上述方法的程序产品,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在用户设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。

计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。

应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。

此外,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。

通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、移动终端、或者网络设备等)执行根据本公开实施方式的方法。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由所附的权利要求指出。

技术分类

06120115929463