CN103902419A - 一种缓存测试方法及装置 - Google Patents
一种缓存测试方法及装置 Download PDFInfo
- Publication number
- CN103902419A CN103902419A CN201410123949.0A CN201410123949A CN103902419A CN 103902419 A CN103902419 A CN 103902419A CN 201410123949 A CN201410123949 A CN 201410123949A CN 103902419 A CN103902419 A CN 103902419A
- Authority
- CN
- China
- Prior art keywords
- cache blocks
- address
- sequence number
- cache
- cpu
- 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.)
- Granted
Links
Images
Abstract
本发明的实施例提供一种缓存测试方法及装置,涉及计算机技术领域,能够完全触发实际物理地址比特位之间的干扰故障,并且通过多CPU并行测试提高测试缓存的效率。该方法可以包括:获取第一地址,该第一地址为与待测缓存的大小相同的内存块的逻辑首地址,所述待测缓存包括n个缓存块,其中,n≥1;根据第一地址和待测缓存中的第m个缓存块的物理地址信息,确定该第m个缓存块的逻辑测试地址,其中,1≤m≤n;根据第m个缓存块的逻辑测试地址,测试该第m个缓存块。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种缓存测试方法及装置。
背景技术
随着CPU(Central Processing Unit,中央处理器)多核及并行技术的发展,CPU的缓存容量随之增加,但同时缓存的可靠性却呈下降趋势。
现有技术中,服务器可通过CPU对缓存进行测试以提高缓存的可靠性。具体的,服务器首先指示CPU申请两块空间大小相同的内存,分别为第一内存和第二内存,且CPU按照逻辑地址递增或递减的顺序将相同的测试数据分别写入第一内存和第二内存,其中,当CPU在第一内存中写入测试数据时,CPU首先将该测试数据写入待测缓存中,并从待测缓存中读出测试数据,以及将该测试数据写入到第一内存中,然后,作废待测缓存中的测试数据,并将第一内存中的测试数据再写入待测缓存中;当CPU在第二内存中写入测试数据时,CPU可直接将测试数据写入第二内存,并将待测缓存中的测试数据和第二内存中的测试数据进行比较,以确定该待测缓存是否存在故障。
然而,上述测试缓存的方法,服务器是按照逻辑地址递增或递减的方式读写数据的,而逻辑地址相邻的数据,实际物理地址未必相邻,因此,不能完全触发实际物理地址比特位之间的干扰故障,并且由于CPU将测试数据从待测缓存读出并写入第一内存之后,又需将第一块内存中的测试数据读出并重新写入待测缓存,因此,导致测试缓存的效率较低。
发明内容
本发明的实施例提供一种缓存测试方法及装置,能够完全触发实际物理地址比特位之间的干扰故障,并且通过多CPU并行测试提高测试缓存的效率。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,本发明实施例提供一种缓存测试方法,包括:
获取第一地址,所述第一地址为与待测缓存的大小相同的内存块的逻辑首地址,所述待测缓存包括n个缓存块,其中,n≥1;
根据所述第一地址和所述待测缓存中的第m个缓存块的物理地址信息,确定所述第m个缓存块的逻辑测试地址,其中,1≤m≤n;
根据所述第m个缓存块的逻辑测试地址,测试所述第m个缓存块。
在第一方面的第一种可能的实现方式中,所述根据所述第m个缓存块的逻辑测试地址,测试所述第m个缓存块,具体包括:
根据所述第m个缓存块的逻辑测试地址,读取所述第m个缓存块的数据位和所述第m个缓存块的状态位,所述状态位用于指示自旋锁的状态;
写入测试数据至所述第m个缓存块的数据位。
结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,当读取所述第m个缓存块的数据位和所述第m个缓存块的状态位中的任意一个失败,或写入测试数据至所述第m个缓存块的数据位失败时,所述方法还包括:
修改状态寄存器的值,所述状态寄存器用于指示所述待测缓存是否测试成功。
结合前述的第一方面或第一方面的第一种可能的实现方式,在第三种可能的实现方式中,所述写入测试数据至所述第m个缓存块的数据位之后,所述方法还包括:
根据所述第m个缓存块的状态位,判断所述自旋锁是否为空闲状态。
结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,若所述自旋锁不为空闲状态,则所述方法还包括:
确定第m+1个缓存块的逻辑测试地址;
根据所述第m+1个缓存块的逻辑测试地址,测试所述第m+1个缓存块。
结合第一方面的第三种可能的实现方式,在第五种可能的实现方式中,若所述自旋锁为空闲状态,则所述方法还包括:
获取所述自旋锁;
修改所述第m个缓存块的状态位;
写入测试数据至所述第m个缓存块的数据位,并释放所述自旋锁;
确定第m+1个缓存块的逻辑测试地址;
根据所述第m+1个缓存块的逻辑测试地址,测试所述第m+1个缓存块。
结合前述的第一方面或第一方面的第一种可能的实现方式至第五种可能的实现方式中的任一种实现方式,在第六种可能的实现方式中,所述第m个缓存块的物理地址信息包括所述第m个缓存块的组数序号和所述第m个缓存块的路数序号;
其中,根据所述第一地址和所述待测缓存中的第m个缓存块的物理地址信息,确定所述第m个缓存块的逻辑测试地址,具体包括:
根据所述第一地址、所述第m个缓存块的组数序号和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址。
结合第一方面的第六种可能的实现方式,在第七种可能的实现方式中,所述根据所述第一地址、所述第m个缓存块的组数序号和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址,具体包括:
根据所述第一地址和所述第m个缓存块的组数序号,确定所述第m个缓存块的组数地址;
根据所述第m个缓存块的组数地址和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址。
结合第一方面的第六种可能的实现方式或第七种可能的实现方式,在第八种可能的实现方式中,所述根据所述第一地址、所述第m个缓存块的组数序号和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址,具体包括:
将所述第m个缓存块的组数序号左移第一预设值,得到第一结果,所述第一预设值为所述第m个缓存块的组数在所述待测缓存的地址结构中的起始比特位;
将所述第m个缓存块的路数序号左移第二预设值,得到第二结果,所述第二预设值为所述第m个缓存块的路数在所述待测缓存的地址结构中的起始比特位;
对所述第一结果和所述第一地址进行或运算,得到所述第m个缓存块的组数地址;
对所述第二结果和所述第m个缓存块的组数地址进行或运算,得到所述第m个缓存块的逻辑测试地址。
结合第一方面的第六种可能的实现方式,在第九种可能的实现方式中,所述根据所述第一地址、所述第m个缓存块的组数序号和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址,具体包括:
根据所述第一地址和所述第m个缓存块的路数序号,确定所述第m个缓存块的路数地址;
根据所述第m个缓存块的路数地址和所述第m个缓存块的组数序号,确定所述第m个缓存块的逻辑测试地址。
结合第一方面的第六种可能的实现方式或第九种可能的实现方式,在第十种可能的实现方式中,所述根据所述第一地址、所述第m个缓存块的组数序号和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址,具体包括:
将所述第m个缓存块的组数序号左移第一预设值,得到第一结果,所述第一预设值为所述第m个缓存块的组数在所述待测缓存的地址结构中的起始比特位;
将所述第m个缓存块的路数序号左移第二预设值,得到第二结果,所述第二预设值为所述第m个缓存块的路数在所述待测缓存的地址结构中的起始比特位;
对所述第二结果和所述第一地址进行或运算,得到所述第m个缓存块的路数地址;
对所述第一结果和所述第m个缓存块的路数地址进行或运算,得到所述第m个缓存块的逻辑测试地址。
结合第一方面的第四种可能的实现方式或第五种可能的实现方式,在第十一种可能的实现方式中,所述第m+1个缓存块的物理地址信息通过如下方法来确定:
将所述第m个缓存块的组数序号作为所述第m+1个缓存块的组数序号,并将所述第m个缓存块的路数序号的下一个序号作为所述第m+1个缓存块的路数序号;或者,
将所述第m个缓存块的路数序号作为所述第m+1个缓存块的路数序号,并将所述第m个缓存块的组数序号的下一个序号作为所述第m+1个缓存块的组数序号。
结合第一方面的第四种可能的实现方式或第五种可能的实现方式,在第十二种可能的实现方式中,所述第m+1个缓存块的物理地址信息通过如下方法来确定:
将所述第m个缓存块的组数序号的下一个序号作为所述第m+1个缓存块的组数序号,并将所述第m个缓存块的起始路数序号作为所述第m+1个缓存块的路数序号,其中,所述第m个缓存块为其所在组数中路数序号最大的缓存块;或者,
将所述第m个缓存块的路数序号的下一个序号作为所述第m+1个缓存块的路数序号,并将所述第m个缓存块的起始组数序号作为所述第m+1个缓存块的组数序号,其中,所述第m个缓存块为其所在路数中组数序号最大的缓存块。
第二方面,本发明实施例提供一种缓存测试方法,包括:
实时检测所有执行中央处理器CPU的状态寄存器的值;
根据所述所有执行CPU的状态寄存器的值,确定待测缓存是否测试成功。
在第二方面的第一种可能的实现方式中,所述实时检测所有执行CPU的状态寄存器的值之前,所述方法还包括:
指示所述所有执行CPU开始测试所述待测缓存。
结合前述的第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述指示所述所有执行CPU开始测试所述待测缓存,具体包括:
获取共享状态标志变量的值;
根据所述共享状态标志变量的值,指示所述所有执行CPU开始测试所述待测缓存。
结合前述的第二方面或第二方面的第一种可能的实现方式至第二种可能的实现方式中的任一种实现方式,在第三种可能的实现方式中,所述根据所述所有执行CPU的状态寄存器的值,确定待测缓存是否测试成功,具体包括:
若所述所有执行CPU的状态寄存器的值均与预设值相同,则确定所述待测缓存测试成功;或者,
若所述所有执行CPU的状态寄存器的值中至少一个执行CPU的状态寄存器的值与预设值不同,则确定所述待测缓存测试失败。
结合前述的第二方面或第二方面的第一种可能的实现方式至第三种可能的实现方式中的任一种实现方式,在第四种可能的实现方式中,当根据所述所有执行CPU的状态寄存器的值,确定所述待测缓存测试失败时,所述方法还包括:
指示所述所有执行CPU停止测试所述待测缓存。
结合第二方面的第四种可能的实现方式,在第五种可能的实现方式中,所述指示所述所有执行CPU停止测试所述待测缓存,具体包括:
修改所述共享状态标志变量的值;
根据修改后的所述共享状态标志变量的值,指示所述所有执行CPU停止测试所述待测缓存。
第三方面,本发明实施例提供一种CPU,包括:
获取单元,用于获取第一地址,所述第一地址为与待测缓存的大小相同的内存块的逻辑首地址,所述待测缓存包括n个缓存块,其中,n≥1;
确定单元,用于根据所述获取单元获取的所述第一地址和所述待测缓存中的第m个缓存块的物理地址信息,确定所述第m个缓存块的逻辑测试地址,其中,1≤m≤n;
测试单元,用于根据所述确定单元确定的所述第m个缓存块的逻辑测试地址,测试所述第m个缓存块。
在第三方面的第一种可能的实现方式中,所述CPU还包括读取单元和写入单元,
所述读取单元,用于根据所述确定单元确定的所述第m个缓存块的逻辑测试地址,读取所述第m个缓存块的数据位和所述第m个缓存块的状态位,所述状态位用于指示自旋锁的状态;
所述写入单元,用于写入测试数据至所述第m个缓存块的数据位。
结合第三方面的第一种可能的实现方式,在第二种可能的实现方式中,所述CPU还包括修改单元,
所述修改单元,用于当所述读取单元读取所述第m个缓存块的数据位和所述第m个缓存块的状态位中的任意一个失败,或所述写入单元写入所述测试数据至所述第m个缓存块的数据位失败时,修改状态寄存器的值,所述状态寄存器用于指示所述待测缓存是否测试成功。
结合前述的第三方面或第三方面的第一种可能的实现方式,在第三种可能的实现方式中,所述CPU还包括判断单元,
所述判断单元,用于在所述写入单元写入所述测试数据至所述第m个缓存块的数据位之后,根据所述第m个缓存块的状态位,判断所述自旋锁是否为空闲状态。
结合第三方面的第三种可能的实现方式,在第四种可能的实现方式中,
所述确定单元,还用于若所述判断单元判断出所述自旋锁不为空闲状态,则确定第m+1个缓存块的逻辑测试地址;
所述测试单元,还用于根据所述确定单元确定的所述第m+1个缓存块的逻辑测试地址,测试所述第m+1个缓存块。
结合第三方面的第三种可能的实现方式,在第五种可能的实现方式中,
所述获取单元,还用于若所述判断单元判断出所述自旋锁为空闲状态,则获取所述自旋锁;
所述修改单元,还用于修改所述读取单元读取的所述第m个缓存块的状态位;
所述写入单元,还用于写入测试数据至所述第m个缓存块的数据位,并释放所述获取单元获取的所述自旋锁;
所述确定单元,还用于确定第m+1个缓存块的逻辑测试地址;
所述测试单元,还用于根据所述确定单元确定的所述第m+1个缓存块的逻辑测试地址,测试所述第m+1个缓存块。
结合前述的第三方面或第三方面的第一种可能的实现方式至第五种可能的实现方式中的任一种实现方式,在第六种可能的实现方式中,所述第m个缓存块的物理地址信息包括所述第m个缓存块的组数序号和所述第m个缓存块的路数序号;
其中,所述确定单元,具体用于根据所述获取单元获取的所述第一地址、所述第m个缓存块的组数序号和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址。
结合第三方面的第六种可能的实现方式,在第七种可能的实现方式中,
所述确定单元,具体用于根据所述获取单元获取的所述第一地址和所述第m个缓存块的组数序号,确定所述第m个缓存块的组数地址,并根据所述第m个缓存块的组数地址和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址。
结合第三方面的第六种可能的实现方式或第七种可能的实现方式,在第八种可能的实现方式中,
所述确定单元,具体用于将所述第m个缓存块的组数序号左移第一预设值,得到第一结果,所述第一预设值为所述第m个缓存块的组数在所述待测缓存的地址结构中的起始比特位,并将所述第m个缓存块的路数序号左移第二预设值,得到第二结果,所述第二预设值为所述第m个缓存块的路数在所述待测缓存的地址结构中的起始比特位,且对所述第一结果和所述获取单元获取的所述第一地址进行或运算,得到所述第m个缓存块的组数地址,以及对所述第二结果和所述第m个缓存块的组数地址进行或运算,得到所述第m个缓存块的逻辑测试地址。
结合第三方面的第六种可能的实现方式,在第九种可能的实现方式中,
所述确定单元,具体用于根据所述获取单元获取的所述第一地址和所述第m个缓存块的路数序号,确定所述第m个缓存块的路数地址,并根据所述第m个缓存块的路数地址和所述第m个缓存块的组数序号,确定所述第m个缓存块的逻辑测试地址。
结合第三方面的第六种可能的实现方式或第九种可能的实现方式,在第十种可能的实现方式中,
所述确定单元,具体用于将所述第m个缓存块的组数序号左移第一预设值,得到第一结果,所述第一预设值为所述第m个缓存块的组数在所述待测缓存的地址结构中的起始比特位,并将所述第m个缓存块的路数序号左移第二预设值,得到第二结果,所述第二预设值为所述第m个缓存块的路数在所述待测缓存的地址结构中的起始比特位,且对所述第二结果和所述获取单元获取的所述第一地址进行或运算,得到所述第m个缓存块的路数地址,以及对所述第一结果和所述第m个缓存块的路数地址进行或运算,得到所述第m个缓存块的逻辑测试地址。
结合第三方面的第四种可能的实现方式或第五种可能的实现方式,在第十一种可能的实现方式中,
所述确定单元,具体用于将所述第m个缓存块的组数序号作为所述第m+1个缓存块的组数序号,并将所述第m个缓存块的路数序号的下一个序号作为所述第m+1个缓存块的路数序号;或者,
所述确定单元,具体用于将所述第m个缓存块的路数序号作为所述第m+1个缓存块的路数序号,并将所述第m个缓存块的组数序号的下一个序号作为所述第m+1个缓存块的组数序号。
结合第三方面的第四种可能的实现方式或第五种可能的实现方式,在第十二种可能的实现方式中,
所述确定单元,具体用于将所述第m个缓存块的组数序号的下一个序号作为所述第m+1个缓存块的组数序号,并将所述第m个缓存块的起始路数序号作为所述第m+1个缓存块的路数序号,其中,所述第m个缓存块为其所在组数中路数序号最大的缓存块;或者,
所述确定单元,具体用于将所述第m个缓存块的路数序号的下一个序号作为所述第m+1个缓存块的路数序号,并将所述第m个缓存块的起始组数序号作为所述第m+1个缓存块的组数序号,其中,所述第m个缓存块为其所在路数中组数序号最大的缓存块。
第四方面,本发明实施例提供一种CPU,包括:
检测单元,用于实时检测所有执行CPU的状态寄存器的值;
确定单元,用于根据所述检测单元检测到的所述所有执行CPU的状态寄存器的值,确定所述待测缓存是否测试成功。
在第四方面的第一种可能的实现方式中,所述CPU还包括指示单元,
所述指示单元,用于在所述检测单元实时检测所有执行CPU的状态寄存器的值之前,指示所述所有执行CPU开始测试所述待测缓存。
结合前述的第四方面或第四方面的第一种可能的实现方式,在第二种可能的实现方式中,所述CPU还包括获取单元,
所述获取单元,用于获取共享状态标志变量的值;
所述指示单元,具体用于根据所述获取单元获取的所述共享状态标志变量的值,指示所述所有执行CPU开始测试所述待测缓存。
结合前述的第四方面或第四方面的第一种可能的实现方式至第二种可能的实现方式中的任一种实现方式,在第三种可能的实现方式中,
所述确定单元,具体用于若所述检测单元检测出所述所有执行CPU的状态寄存器的值均与预设值相同,则确定所述待测缓存测试成功;或者,
所述确定单元,具体用于若所述检测单元检测出所述所有执行CPU的状态寄存器的值中至少一个执行CPU的状态寄存器的值与预设值不同,则确定所述待测缓存测试失败。
结合前述的第四方面或第四方面的第一种可能的实现方式至第三种可能的实现方式中的任一种实现方式,在第四种可能的实现方式中,
所述指示单元,还用于当所述确定单元根据所述所有执行CPU的状态寄存器的值,确定所述待测缓存测试失败时,指示所述所有执行CPU停止测试所述待测缓存。
结合第四方面的第四种可能的实现方式,在第五种可能的实现方式中,所述CPU还包括修改单元,
所述修改单元,用于修改所述获取单元获取的所述共享状态标志变量的值;
所述指示单元,具体用于根据所述修改单元修改后的所述共享状态标志变量的值,指示所述所有执行CPU停止测试所述待测缓存。
第五方面,本发明实施例提供一种服务器,包括:
至少一个第三方面所述的CPU和一个第四方面所述的CPU。
本发明实施例提供一种缓存测试方法及装置,通过获取第一地址,该第一地址为与待测缓存的大小相同的内存块的逻辑首地址,该待测缓存包括n个缓存块,其中,n≥1,并根据该第一地址和该待测缓存中的第m个缓存块的物理地址信息,确定第m个缓存块的逻辑测试地址,其中,1≤m≤n,以及根据第m个缓存块的逻辑测试地址,测试第m个缓存块。通过该方案,可以通过预先申请的与待测缓存的大小相同的内存块的首地址和缓存块的物理地址信息,按照相邻的物理地址次序将待测缓存中缓存块的物理地址转换为逻辑测试地址,并以缓存块为单位对待测缓存进行测试,解决了现有技术中不能完全触发实际物理地址比特位之间的干扰故障,并且测试缓存效率低的问题,因此,能够完全触发实际物理地址比特位之间的干扰故障,并且通过多CPU并行测试提高测试缓存的效率。
附图说明
图1为本发明实施例提供的一种缓存测试方法的流程图一;
图2为本发明实施例提供的一种缓存测试方法的流程图二;
图3为本发明实施例提供的一种缓存测试方法的流程图三;
图4为本发明实施例提供的待测缓存的地址结构的示意图;
图5为本发明实施例提供的待测缓存的结构示意图;
图6为本发明实施例提供的CPU的结构示意图一;
图7为本发明实施例提供的CPU的结构示意图二;
图8为本发明实施例提供的CPU的结构示意图三;
图9为本发明实施例提供的CPU的结构示意图四;
图10为本发明实施例提供的CPU的结构示意图五;
图11为本发明实施例提供的CPU的结构示意图六;
图12为本发明实施例提供的CPU的结构示意图七;
图13为本发明实施例提供的CPU的结构示意图八;
图14为本发明实施例提供的CPU的结构示意图九;
图15为本发明实施例提供的服务器的结构示意图。
具体实施方式
下面结合附图对本发明实施例提供的一种缓存测试方法及装置进行详细地描述。
实施例一
本发明实施例提供一种缓存测试方法,涉及执行CPU侧,如图1所示,该方法可以包括:
S101、执行CPU获取第一地址,该第一地址为与待测缓存的大小相同的内存块的逻辑首地址,该待测缓存包括n个缓存块,其中,n≥1。
示例性的,为了测试待测缓存,本发明实施例充分利用多核CPU的优势,将该多核CPU设置为两类CPU,即监控CPU和执行CPU,其中,执行CPU用于测试待测缓存,本发明实施例可以设置有至少一个执行CPU,监控CPU用于指示执行CPU开始测试待测缓存或停止测试待测缓存,并检测执行CPU的测试结果,从而判断待测缓存是否测试成功,即待测缓存是否存在故障,本发明实施例可以设置有一个监控CPU。
具体的,若需测试待测缓存,监控CPU需指示执行CPU开始测试待测缓存,执行CPU可首先获取第一地址,该第一地址为与待测缓存的大小相同的内存块的逻辑首地址,该待测缓存包括n个缓存块,其中,n≥1。
S102、执行CPU根据第一地址和待测缓存中的第m个缓存块的物理地址信息,确定该第m个缓存块的逻辑测试地址,其中,1≤m≤n。
执行CPU获取到第一地址之后,执行CPU可根据该第一地址和待测缓存中的第m个缓存块的物理地址信息,确定该第m个缓存块的逻辑测试地址,其中,1≤m≤n。
需要说明的是,待测缓存是由n个缓存块构成,该n个缓存块可以按照不同的组数和路数进行排列。
进一步地,第m个缓存块的物理地址信息可以包括第m个缓存块的组数序号、第m个缓存块的路数序号和第m个缓存块的空间大小。
S103、执行CPU根据第m个缓存块的逻辑测试地址,测试第m个缓存块。
执行CPU确定第m个缓存块的逻辑测试地址之后,执行CPU可根据该第m个缓存块的逻辑测试地址,测试该第m个缓存块。
本发明实施例提供一种缓存测试方法,涉及监控CPU侧,如图2所示,该方法可以包括:
S201、监控CPU实时检测所有执行CPU的状态寄存器的值。
若需测试待测缓存,监控CPU需指示执行CPU开始测试待测缓存,同时监控CPU实时检测所有执行CPU的状态寄存器的值。
需要说明的是,在执行CPU测试待测缓存的过程中,状态寄存器的值初始值设置为预设值,该预设值为该执行CPU测试待测缓存成功时状态寄存器需显示的值,当执行CPU读取第m个缓存块的数据位和第m个缓存块的状态位中的任意一个失败,或执行CPU写入测试数据至第m个缓存块的数据位失败时,即可表示缓存测试失败,此时,执行CPU可修改状态寄存器的值,即执行CPU可将状态寄存器的值修改为该执行CPU测试待测缓存失败时状态寄存器需显示的值。
S202、监控CPU根据所有执行CPU的状态寄存器的值,确定待测缓存是否测试成功。
监控CPU实时检测所有执行CPU的状态寄存器的值之后,监控CPU可根据该所有执行CPU的状态寄存器的值,确定待测缓存是否测试成功。
具体的,若所有执行CPU的状态寄存器的值均与预设值相同,则监控CPU确定待测缓存测试成功;若所有执行CPU的状态寄存器的值中至少一个执行CPU的状态寄存器的值与预设值不同,则确定待测缓存测试失败。
本发明实施例提供一种缓存测试方法,通过执行CPU获取第一地址,该第一地址为与待测缓存的大小相同的内存块的逻辑首地址,该待测缓存包括n个缓存块,其中,n≥1,并根据该第一地址和该待测缓存中的第m个缓存块的物理地址信息,确定第m个缓存块的逻辑测试地址,其中,1≤m≤n,以及根据第m个缓存块的逻辑测试地址,测试第m个缓存块。通过该方案,执行CPU可以通过预先申请的与待测缓存的大小相同的内存块的首地址和缓存块的物理地址信息,按照相邻的物理地址次序将待测缓存中缓存块的物理地址转换为逻辑测试地址,并以缓存块为单位对待测缓存进行测试,解决了现有技术中不能完全触发实际物理地址比特位之间的干扰故障,并且测试缓存效率低的问题,因此,能够完全触发实际物理地址比特位之间的干扰故障,并且通过多CPU并行测试提高测试缓存的效率。
实施例二
本发明实施例提供一种缓存测试方法,如图3所示,该方法可以包括:
S301、监控CPU指示所有执行CPU开始测试待测缓存。
示例性的,为了测试待测缓存,本发明实施例充分利用多核CPU的优势,将该多核CPU设置为两类CPU,即监控CPU和执行CPU,其中,执行CPU用于测试待测缓存,本发明实施例可以设置有至少一个执行CPU,监控CPU用于指示执行CPU开始测试待测缓存或停止测试待测缓存,并检测执行CPU的测试结果,从而判断待测缓存是否测试成功,即待测缓存是否存在故障,本发明实施例可以设置有一个监控CPU。
具体的,若需测试待测缓存,监控CPU可首先指示所有执行CPU开始测试缓存。
进一步地,监控CPU可先获取共享状态标志变量的值,并根据该共享状态标志变量的值,指示所有执行CPU开始测试待测缓存。
例如,若一个4核CPU,该4核CPU的任一个核为vCPU,该4核CPU的4个核分别为vCPU0、vCPU1、vCPU2和vCPU3,该vCPU0、vCPU1、vCPU2和vCPU3可共享一个状态标志变量flag,flag的值可以为0,也可以为1,flag的值为0表示开始测试待测缓存,flag的值为1表示停止测试待测缓存。本发明实施例可以将vCPU0设置为监控CPU,将vCPU1、vCPU2和vCPU3设置为执行CPU。当该4核CPU在测试待测缓存时,vCPU0可首先获取flag的值,若flag的值为0,则vCPU0可以根据flag的值,控制vCPU1、vCPU2和vCPU3开始测试待测缓存;若flag的值为1,则vCPU0可控制vCPU1、vCPU2和vCPU3停止测试待测缓存。
S302、执行CPU获取第一地址,该第一地址为与待测缓存的大小相同的内存块的逻辑首地址,该待测缓存包括n个缓存块,其中,n≥1。
监控CPU指示执行CPU开始测试待测缓存之后,执行CPU可按照监控CPU的指示,测试待测缓存,此时,执行CPU可首先获取第一地址,该第一地址为与待测缓存的大小相同的内存块的逻辑首地址,该待测缓存包括n个缓存块,其中,n≥1。
进一步地,若需测试待测缓存,执行CPU可预先申请一个内存块,该内存块的空间大小与待测缓存的空间大小相同,在申请到该内存块时,执行CPU可获知该内存块的逻辑首地址。
S303、执行CPU根据第一地址和待测缓存中的第m个缓存块的物理地址信息,确定该第m个缓存块的逻辑测试地址,其中,1≤m≤n。
执行CPU获取到第一地址之后,执行CPU可根据第一地址和待测缓存中的第m个缓存块的物理地址信息,确定第m个缓存块的逻辑测试地址,其中,1≤m≤n。
需要说明的是,待测缓存是由n个缓存块组成,该n个缓存块可以按照不同的组数和路数进行排列,并且一个缓存块可以包括该一个缓存块的数据位和该一个缓存的状态位。
进一步地,第m个缓存块的物理地址信息包括第m个缓存块的组数序号和第m个缓存块的路数序号,执行CPU可以根据第一地址、第m个缓存块的组数序号和第一缓存的路数序号,确定第m个缓存块的逻辑测试地址。
进一步地,执行CPU根据第一地址和待测缓存中的第m个缓存块的组数序号和第m个缓存块的路数序号,确定第m个缓存块的逻辑测试地址的过程可以分为以下两种情况:
(1)执行CPU可根据第一地址和第m个缓存块的组数序号,确定第m个缓存块的组数地址,并根据第m个缓存块的组数地址和第m个缓存块的路数序号,确定第m个缓存块的逻辑测试地址。
具体的,执行CPU可以将第m个缓存块的组数序号左移第一预设值,得到第一结果,该第一预设值为第m个缓存块的组数在待测缓存的地址结构中的起始比特位,并将第m个缓存块的路数序号左移第二预设值,得到第二结果,该第二预设值为第m个缓存块的路数在待测缓存的地址结构中的起始比特位,且对第一结果和第一地址进行或运算,得到第m个缓存块的组数地址,以及对第二结果和第m个缓存块的组数地址进行或运算,得到第m个缓存块的逻辑测试地址。
(2)执行CPU可根据第一地址和第m个缓存块的路数序号,确定第m个缓存块的路数地址,并根据第m个缓存块的路数地址和第m个缓存块的组数序号,确定第m个缓存块的逻辑测试地址。
具体的,执行CPU可将第m个缓存块的组数序号左移第一预设值,得到第一结果,该第一预设值为第m个缓存块的组数在待测缓存的地址结构中的起始比特位,并将第m个缓存块的路数序号左移第二预设值,得到第二结果,该第二预设值为第m个缓存块的路数在待测缓存的地址结构中的起始比特位,且对第二结果和第一地址进行或运算,得到第m个缓存块的路数地址,以及对第一结果和第m个缓存块的路数地址进行或运算,得到第m个缓存块的逻辑测试地址。
举例来说,如图4所示,为32K L1D,空间大小为64字节的待测缓存的地址结构示意图,该待测缓存的物理地址空间为40bit(40比特)。该待测缓存的地址结构由多个数据段组成,该多个数据段包括:地址索引、待测缓存的组数、待测缓存的路数和待测缓存中缓存块的空间大小,其中,待测缓存的路数和缓存块的空间大小为预先设置的,待测缓存的路数可以由待测缓存的组数、待测缓存中缓存块的空间大小和待测缓存的容量计算得出。
需要说明的是,第m个缓存块的物理地址信息还包括第m个缓存块的地址索引、第m个缓存块的数据属性和第m个缓存块的替换状态等信息,其中,第m个缓存块的地址索引用于指示第m个缓存块的数据位的位置。第m个缓存块的数据属性用于表示第m个缓存块的数据位是否可用,第m个缓存块的替换状态用于表示第m个缓存块的数据位中的数据是独享数据或共享数据。
具体的,以一个8组,8路的待测缓存为例,如图5中a)图所示,该待测缓存中的每个缓存块均包括每个缓存块的地址索引,每个缓存块的数据属性、每个缓存块的替换状态,执行CPU可根据该待测缓存中每个缓存块的地址索引,查找到图5中b)图中的每个缓存块的数据位(对应图中DW0至DW7),其中,每个缓存块的数据位中可以包括每个缓存块的状态位,该待测缓存中缓存块的组数序号可以为0-7中的任意一个,该待测缓存中缓存块的路数序号可以为0-7中的任意一个,则可以根据待测缓存中缓存块的组数序号和待测缓存中缓存块的路数序号确定一个缓存块,具体的,根据第一地址和该缓存块的物理地址信息,确定该缓存块的逻辑测试地址可以为根据该缓存块的组数序号和路数序号确定该缓存块的逻辑测试地址,若执行CPU需确定待测缓存中缓存块的组数序号为1,路数序号为0的缓存块的逻辑测试地址,执行CPU可按照第一地址和该缓存块的组数序号1,确定该缓存块的组数地址,并根据该缓存块的组数地址和该缓存块的路数序号0,确定该缓存块的逻辑测试地址,或者,执行CPU可按照第一地址和该缓存块的路数序号0,确定该缓存块的路数地址,然后根据该缓存块的路数地址和该缓存块的组数序号1,确定该缓存块的逻辑测试地址。
S304、执行CPU根据第m个缓存块的逻辑测试地址,读取第m个缓存块的数据位和第m个缓存块的状态位,该状态位用于指示自旋锁的状态。
执行CPU确定第m个缓存块的逻辑测试地址之后,执行CPU可从该第m个缓存块的逻辑测试地址的位置读取该第m个缓存块的数据位和该第m个缓存块的状态位,该状态位用于指示自旋锁的状态。
需要说明的是,自旋锁是为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,不需要自旋锁)。在任何时刻,自旋锁最多只能被一个CPU持有,若当前CPU试图申请获取已经被其他某一个CPU持有的自旋锁,则服务器可指示该CPU按照预设的时间间隔,循环尝试获取该自旋锁,等待该自旋锁重新可用。若该自旋锁未被其他任何一个CPU持有,则申请获取该自旋锁的该当前CPU可直接获得该自旋锁,以便于访问该自旋锁保护的共享资源。
进一步地,本发明实施例提供的自旋锁是基于CPU锁定数据总线的指令,当某一个执行CPU锁住数据总线(锁定数据总线的指令只能保证该某一个执行CPU独占数据总线)后,其他执行CPU读取第m个缓存块的状态位,以判断该自旋锁是否已经被其他执行CPU持有,若该自旋锁未被其他执行CPU持有,则该某一个执行CPU修改第m个缓存块的状态位的值,表示锁定成功;若该自旋锁已经被其他执行CPU持有,则该某一个执行CPU测试第m个缓存块的下一个缓存块,即第m+1个缓存块。
S305、执行CPU写入测试数据至第m个缓存块的数据位。
执行CPU读取第m个缓存块的数据位和第m个缓存块的状态位之后,执行CPU可写入测试数据至第m个缓存块的数据位。
进一步地,执行CPU在读取第m个缓存块的数据位和第m个缓存块的状态位之后,执行CPU可通过测试数据自增的方式将测试数据写入第m个缓存块的数据位,即执行CPU可将第m个缓存块的数据位的数据均进行加一操作,执行CPU也可以以其他方式写入测试数据至第m个缓存块的数据位,本发明不做限制。
S306、执行CPU根据第m个缓存块的状态位,判断自旋锁是否为空闲状态。
执行CPU读取第m个缓存块的数据位和第m个缓存块的状态位,并写入测试数据至第m个缓存块的数据位之后,当读取第m个缓存块的数据位和第m个缓存块的状态位成功,并且写入测试数据至第m个缓存块的数据位成功,执行CPU可根据该第m个缓存块的状态位,判断自旋锁是否为空闲状态。
进一步地,执行CPU可根据该第m个缓存块的状态位,判断自旋锁是否为空闲状态,若该自旋锁为空闲状态,则表示该自旋锁未被其他执行CPU持有;若该自旋锁不为空闲状态,则表示该自旋锁已经被其他执行CPU持有。
S307、若自旋锁不为空闲状态,则执行CPU确定第m+1个缓存块的逻辑测试地址。
执行CPU判断自旋锁是否为空闲状态之后,若自旋锁不为空闲状态,则执行CPU可确定第m+1个缓存块的逻辑测试地址。
进一步地,若自旋锁不为空闲状态,则表示该自旋锁未被其他执行CPU持有,此时,该执行CPU无法获得该自旋锁,该执行CPU可确定第m+1个缓存块的逻辑测试地址,以便于执行CPU测试该第m+1个缓存块。
具体的,执行CPU可通过测试待测缓存的预设规则和第m个缓存块的物理地址信息,即第m个缓存块的组数序号和第m个缓存块的路数序号,确定第m+1个缓存块的物理地址信息,即第m+1个缓存块的组数序号和第m+1个缓存块的路数序号,执行CPU可根据第m+1个缓存块的物理地址信息,确定第m+1个缓存块的逻辑测试地址,并根据该第m+1个缓存块的逻辑测试地址,测试第m+1个缓存块,其中,测试待测缓存的预设规则可以为按照组数连续的方式测试待测缓存,也可以按照路数连续的方式测试待测缓存。
进一步地,执行CPU确定第m+1个缓存块的物理地址信息的过程可以分为以下情况:
(1)若执行CPU是按照组数连续的方式测试待测缓存,并且第m个缓存块不为其所在组数中路数序号最大的缓存块,即第m个缓存块不为其所在组数的最后一个缓存块,执行CPU可将第m个缓存块的组数序号作为第m+1个缓存块的组数序号,并将第m个缓存块的路数序号的下一个序号作为第m+1个缓存块的路数序号。
(2)若执行CPU是按照路数连续的方式测试待测缓存,并且第m个缓存块不为其所在路数中组数序号最大的缓存块,即第m个缓存块不为其所在路数的最后一个缓存块,执行CPU可将第m个缓存块的路数序号作为第m+1个缓存块的路数序号,并将第m个缓存块的组数序号的下一个序号作为第m+1个缓存块的组数序号。
(3)若执行CPU是按照组数连续的方式测试待测缓存,并且第m个缓存块为其所在组数中路数序号最大的缓存块,即第m个缓存块为其所在组数的最后一个缓存块,执行CPU可将第m个缓存块的组数序号的下一个序号作为第m+1个缓存块的组数序号,并将第m个缓存块的起始路数序号作为第m+1个缓存块的路数序号。
(4)若执行CPU是按照路数连续的方式测试待测缓存,并且第m个缓存块为其所在路数中组数序号最大的缓存块,即第m个缓存块为其所在路数的最后一个缓存块,执行CPU可将第m个缓存块的路数序号的下一个序号作为第m+1个缓存块的路数序号,并将第m个缓存块的起始组数序号作为第m+1个缓存块的组数序号。
S308、执行CPU根据第m+1个缓存块的逻辑测试地址,测试第m+1个缓存块。
执行CPU确定第m+1个缓存块的逻辑测试地址之后,执行CPU可根据第m+1个缓存块的逻辑测试地址,测试第m+1个缓存块。
具体的,执行CPU可根据第m+1个缓存块的逻辑测试地址,读取第m+1个缓存块的数据位和第m+1个缓存块的状态位,并写入测试数据至第m+1个缓存块的数据位,即执行CPU可按照测试第m个缓存块的方法测试第m+1个缓存块,直至待测缓存中的所有缓存块,即n个缓存块均测试完成,则该待测缓存测试完成。
S309、若自旋锁为空闲状态,则执行CPU获取自旋锁,并修改第m个缓存块的状态位。
执行CPU判断自旋锁是否为空闲状态之后,若自旋锁为空闲状态,则执行CPU可获取自旋锁,并修改第m个缓存块的状态位。
进一步地,若自旋锁为空闲状态,则表示该自旋锁已经被其他执行CPU持有,此时,该执行CPU可以直接获得该自旋锁,在执行CPU获得到该自旋锁之后,执行CPU可修改第m个缓存块的状态位的值,即将第m个缓存块的状态位的值修改为自旋锁不为空闲状态的值,其他执行CPU即可通过该第m个缓存块的状态位获知该自旋锁不为空闲状态,其他执行CPU需测试该第m个缓存块的下一个缓存块,即第m+1个缓存块。
S310、执行CPU写入测试数据至第m个缓存块的数据位,并释放自旋锁。
执行CPU获取自旋锁,并修改第m个缓存块的状态位之后,执行CPU可写入测试数据至第m个缓存块的数据位,并释放该自旋锁。
需要说明的是,为了平衡至少一个执行CPU测试待测缓存的执行步调,该执行CPU获取自旋锁,并修改第m个缓存块的状态位之后,该执行CPU可继续写入测试数据至第m个缓存块的数据位,即该执行CPU可以再一次写入测试数据至第m个缓存块的数据位,并在再一次写入测试数据至第m个缓存块的数据位之后,释放该自旋锁。
S311、执行CPU确定第m+1个缓存块的逻辑测试地址,并根据第m+1个缓存块的逻辑测试地址,测试第m+1个缓存块。
执行CPU再一次写入测试数据至第m个缓存块的数据位,并释放该自旋锁之后,执行CPU可测试第m个缓存块的下一个缓存块,即第m+1个缓存块,具体的,执行CPU可确定第m+1个缓存块的逻辑测试地址,并根据第m+1个缓存块的逻辑测试地址,测试第m+1个缓存块。
S312、当执行CPU读取第m个缓存块的数据位和第m个缓存块的状态位中的任意一个失败,或执行CPU写入测试数据至第m个缓存块的数据位失败时,执行CPU修改状态寄存器的值,该状态寄存器用于指示待测缓存是否测试成功。
执行CPU确定第m个缓存块的逻辑测试地址之后,当执行CPU读取第m个缓存块的数据位和第m个缓存块的状态位中的任意一个失败,或执行CPU写入测试数据至第m个缓存块的数据位失败时,执行CPU可修改状态寄存器的值,该状态寄存器用于指示待测缓存是否测试成功。
需要说明的是,在执行CPU测试待测缓存的过程中,状态寄存器的值初始值设置为预设值,该预设值为该执行CPU测试待测缓存成功时状态寄存器需显示的值,当执行CPU读取第m个缓存块的数据位和第m个缓存块的状态位中的任意一个失败,或执行CPU写入测试数据至第m个缓存块的数据位失败时,即可表示缓存测试失败,此时,执行CPU可修改状态寄存器的值,即执行CPU可将状态寄存器的值修改为该执行CPU测试待测缓存失败时状态寄存器需显示的值。
S313、监控CPU实时检测所有执行CPU的状态寄存器的值。
当执行CPU测试待测缓存时,监控CPU可实时检测所有执行CPU的状态寄存器的值。
S314、监控CPU根据所有执行CPU的状态寄存器的值,确定待测缓存是否测试成功。
监控CPU实时检测所有执行CPU的状态寄存器的值时,监控CPU可根据所有执行CPU的状态寄存器的值,确定待测缓存是否测试成功。
具体的,若所有执行CPU的状态寄存器的值均与预设值相同,则监控CPU确定待测缓存测试成功;若所有执行CPU的状态寄存器的值中至少一个执行CPU的状态寄存器的值与预设值不同,则确定待测缓存测试失败。
需要说明的是,本发明实施例提供的缓存测试方法可以应用于多核CPU的场景,其中,该多核CPU中的一个核可以为一个vCPU(VirtualCPU,虚拟处理器),本发明实施例可以将该多核CPU中的任意一个vCPU设置为监控CPU,该多核CPU中的其他vCPU可以设置为执行CPU;本发明实施例提供的缓存测试方法也可以应用于CPU内部一个单独模块,即CPU自身可以具有缓存测试的功能,具体的,在上电过程中,该CPU可以通过使能控制寄存器实现缓存测试功能。
本发明实施例提供一种缓存测试方法,通过执行CPU获取第一地址,该第一地址为与待测缓存的大小相同的内存块的逻辑首地址,该待测缓存包括n个缓存块,其中,n≥1,并根据该第一地址和该待测缓存中的第m个缓存块的物理地址信息,确定第m个缓存块的逻辑测试地址,其中,1≤m≤n,以及根据第m个缓存块的逻辑测试地址,测试第m个缓存块。通过该方案,执行CPU可以通过预先申请的与待测缓存的大小相同的内存块的首地址和缓存块的物理地址信息,按照相邻的物理地址次序将待测缓存中缓存块的物理地址转换为逻辑测试地址,并以缓存块为单位对待测缓存进行测试,解决了现有技术中不能完全触发实际物理地址比特位之间的干扰故障,并且测试缓存效率低的问题,因此,能够完全触发实际物理地址比特位之间的干扰故障,并且通过多CPU并行测试提高测试缓存的效率。
实施例三
如图6所示,本发明实施例提供一种CPU1,该CPU1可以包括:
获取单元10,用于获取第一地址,所述第一地址为与待测缓存的大小相同的内存块的逻辑首地址,所述待测缓存包括n个缓存块,其中,n≥1。
确定单元11,用于根据所述获取单元10获取的所述第一地址和所述待测缓存中的第m个缓存块的物理地址信息,确定所述第m个缓存块的逻辑测试地址,其中,1≤m≤n。
测试单元12,用于根据所述确定单元11确定的所述第m个缓存块的逻辑测试地址,测试所述第m个缓存块。
可选的,如图7所示,所述CPU1还包括读取单元13和写入单元14,所述读取单元13,用于根据所述确定单元11确定的所述第m个缓存块的逻辑测试地址,读取所述第m个缓存块的数据位和所述第m个缓存块的状态位,所述状态位用于指示自旋锁的状态;所述写入单元14,用于写入测试数据至所述第m个缓存块的数据位。
可选的,如图8所示,所述CPU1还包括修改单元15,所述修改单元15,用于当所述读取单元13读取所述第m个缓存块的数据位和所述第m个缓存块的状态位中的任意一个失败,或所述写入单元14写入所述测试数据至所述第m个缓存块的数据位失败时,修改状态寄存器的值,所述状态寄存器用于指示所述待测缓存是否测试成功。
可选的,如图9所示,所述CPU1还包括判断单元16,所述判断单元16,用于在所述写入单元14写入所述测试数据至所述第m个缓存块的数据位之后,根据所述第m个缓存块的状态位,判断所述自旋锁是否为空闲状态。
可选的,所述确定单元11,还用于若所述判断单元16判断出所述自旋锁不为空闲状态,则确定第m+1个缓存块的逻辑测试地址;所述测试单元12,还用于根据所述确定单元11确定的所述第m+1个缓存块的逻辑测试地址,测试所述第m+1个缓存块。
可选的,所述获取单元10,还用于若所述判断单元16判断出所述自旋锁为空闲状态,则获取所述自旋锁;所述修改单元15,还用于修改所述读取单元13读取的所述第m个缓存块的状态位;所述写入单元14,还用于写入测试数据至所述第m个缓存块的数据位,并释放所述获取单元获取的所述自旋锁;所述确定单元11,还用于确定第m+1个缓存块的逻辑测试地址;所述测试单元12,还用于根据所述确定单元11确定的所述第m+1个缓存块的逻辑测试地址,测试所述第m+1个缓存块。
可选的,所述第m个缓存块的物理地址信息包括所述第m个缓存块的组数序号和所述第m个缓存块的路数序号;其中,所述确定单元11,具体用于根据所述获取单元10获取的所述第一地址、所述第m个缓存块的组数序号和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址。
可选的,所述确定单元11,具体用于根据所述获取单元10获取的所述第一地址和所述第m个缓存块的组数序号,确定所述第m个缓存块的组数地址,并根据所述第m个缓存块的组数地址和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址。
可选的,所述确定单元11,具体用于将所述第m个缓存块的组数序号左移第一预设值,得到第一结果,所述第一预设值为所述第m个缓存块的组数在所述待测缓存的地址结构中的起始比特位,并将所述第m个缓存块的路数序号左移第二预设值,得到第二结果,所述第二预设值为所述第m个缓存块的路数在所述待测缓存的地址结构中的起始比特位,且对所述第一结果和所述获取单元10获取的所述第一地址进行或运算,得到所述第m个缓存块的组数地址,以及对所述第二结果和所述第m个缓存块的组数地址进行或运算,得到所述第m个缓存块的逻辑测试地址。
可选的,所述确定单元11,具体用于根据所述获取单元10获取的所述第一地址和所述第m个缓存块的路数序号,确定所述第m个缓存块的路数地址,并根据所述第m个缓存块的路数地址和所述第m个缓存块的组数序号,确定所述第m个缓存块的逻辑测试地址。
可选的,所述确定单元11,具体用于将所述第m个缓存块的组数序号左移第一预设值,得到第一结果,所述第一预设值为所述第m个缓存块的组数在所述待测缓存的地址结构中的起始比特位,并将所述第m个缓存块的路数序号左移第二预设值,得到第二结果,所述第二预设值为所述第m个缓存块的路数在所述待测缓存的地址结构中的起始比特位,且对所述第二结果和所述获取单元10获取的所述第一地址进行或运算,得到所述第m个缓存块的路数地址,以及对所述第一结果和所述第m个缓存块的路数地址进行或运算,得到所述第m个缓存块的逻辑测试地址。
可选的,所述确定单元11,具体用于将所述第m个缓存块的组数序号作为所述第m+1个缓存块的组数序号,并将所述第m个缓存块的路数序号的下一个序号作为所述第m+1个缓存块的路数序号;或者,所述确定单元11,具体用于将所述第m个缓存块的路数序号作为所述第m+1个缓存块的路数序号,并将所述第m个缓存块的组数序号的下一个序号作为所述第m+1个缓存块的组数序号。
可选的,所述确定单元11,具体用于将所述第m个缓存块的组数序号的下一个序号作为所述第m+1个缓存块的组数序号,并将所述第m个缓存块的起始路数序号作为所述第m+1个缓存块的路数序号,其中,所述第m个缓存块为其所在组数中路数序号最大的缓存块;或者,所述确定单元11,具体用于将所述第m个缓存块的路数序号的下一个序号作为所述第m+1个缓存块的路数序号,并将所述第m个缓存块的起始组数序号作为所述第m+1个缓存块的组数序号,其中,所述第m个缓存块为其所在路数中组数序号最大的缓存块。
本发明实施例提供一种CPU,该CPU获取第一地址,该第一地址为与待测缓存的大小相同的内存块的逻辑首地址,该待测缓存包括n个缓存块,其中,n≥1,并根据该第一地址和该待测缓存中的第m个缓存块的物理地址信息,确定第m个缓存块的逻辑测试地址,其中,1≤m≤n,以及根据第m个缓存块的逻辑测试地址,测试第m个缓存块。通过该方案,该CPU可以通过预先申请的与待测缓存的大小相同的内存块的首地址和缓存块的物理地址信息,按照相邻的物理地址次序将待测缓存中缓存块的物理地址转换为逻辑测试地址,并以缓存块为单位对待测缓存进行测试,解决了现有技术中不能完全触发实际物理地址比特位之间的干扰故障,并且测试缓存效率低的问题,因此,能够完全触发实际物理地址比特位之间的干扰故障,并且通过多CPU并行测试提高测试缓存的效率。
如图10所示,本发明实施例提供一种CPU2,该CPU2可以包括:
检测单元20,用于实时检测所有执行CPU的状态寄存器的值。
确定单元21,用于根据所述检测单元20检测到的所述所有执行CPU的状态寄存器的值,确定所述待测缓存是否测试成功。
可选的,如图11所示,所述CPU2还包括指示单元22,所述指示单元22,用于在所述检测单元20实时检测所有执行CPU的状态寄存器的值之前,指示所述所有执行CPU开始测试所述待测缓存。
可选的,如图12所示,所述CPU2还包括获取单元23,所述获取单元23,用于获取共享状态标志变量的值;所述指示单元22,具体用于根据所述获取单元23获取的所述共享状态标志变量的值,指示所述所有执行CPU开始测试所述待测缓存。
可选的,所述确定单元21,具体用于若所述检测单元20检测出所述所有执行CPU的状态寄存器的值均与预设值相同,则确定所述待测缓存测试成功;或者,所述确定单元21,具体用于若所述检测单元20检测出所述所有执行CPU的状态寄存器的值中至少一个执行CPU的状态寄存器的值与预设值不同,则确定所述待测缓存测试失败。
可选的,所述指示单元22,还用于当所述确定单元21根据所述所有执行CPU的状态寄存器的值,确定所述待测缓存测试失败时,指示所述所有执行CPU停止测试所述待测缓存。
可选的,如图13所示,所述CPU2还包括修改单元24,所述修改单元24,用于修改所述获取单元23获取的所述共享状态标志变量的值;所述指示单元22,具体用于根据所述修改单元24修改后的所述共享状态标志变量的值,指示所述所有执行CPU停止测试所述待测缓存。
本发明实施例提供一种CPU,该CPU实时检测所有执行CPU的状态寄存器的值,并根据所有执行CPU的状态寄存器的值,确定待测缓存是否测试成功。通过该方案,该CPU可以通过检测到的所有执行CPU的状态寄存器的值,获知待测缓存是否测试成功,因此,能够完全触发实际物理地址比特位之间的干扰故障,并且通过多CPU并行测试提高测试缓存的效率。
实施例四
如图14所示,本发明实施例提供一种多核CPU,该多核CPU可以包括:
至少一个执行CPU和一个监控CPU。
所述执行CPU,用于获取第一地址,所述第一地址为与待测缓存的大小相同的内存块的逻辑首地址,所述待测缓存包括n个缓存块,其中,n≥1,并根据所述第一地址和所述待测缓存中的第m个缓存块的物理地址信息,确定所述第m个缓存块的逻辑测试地址,其中,1≤m≤n,以及根据所述第m个缓存块的逻辑测试地址,测试所述第m个缓存块。
可选的,所述执行CPU,具体用于根据所述第m个缓存块的逻辑测试地址,读取所述第m个缓存块的数据位和所述第m个缓存块的状态位,所述状态位用于指示自旋锁的状态,并写入测试数据至所述第m个缓存块的数据位。
可选的,所述执行CPU,还用于当读取所述第m个缓存块的数据位和所述第m个缓存块的状态位中的任意一个失败,或写入所述测试数据至所述第m个缓存块的数据位失败时,修改状态寄存器的值,所述状态寄存器用于指示所述待测缓存是否测试成功。
可选的,所述执行CPU,还用于在写入所述测试数据至所述第m个缓存块的数据位之后,根据所述第m个缓存块的状态位,判断所述自旋锁是否为空闲状态。
可选的,所述执行CPU,还用于若所述自旋锁不为空闲状态,则确定第m+1个缓存块的逻辑测试地址,并根据所述第m+1个缓存块的逻辑测试地址,测试所述第m+1个缓存块。
可选的,所述执行CPU,还用于若所述自旋锁为空闲状态,则获取所述自旋锁,并修改所述第m个缓存块的状态位,且写入测试数据至所述第m个缓存块的数据位,并释放所述自旋锁,以及确定第m+1个缓存块的逻辑测试地址,并根据所述第m+1个缓存块的逻辑测试地址,测试所述第m+1个缓存块。
可选的,所述第m个缓存块的物理地址信息包括所述第m个缓存块的组数序号和所述第m个缓存块的路数序号;其中,所述执行CPU,具体用于根据所述第一地址、所述第m个缓存块的组数序号和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址。
可选的,所述执行CPU,具体用于根据所述第一地址和所述第m个缓存块的组数序号,确定所述第m个缓存块的组数地址,并根据所述第m个缓存块的组数地址和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址。
可选的,所述执行CPU,具体用于将所述第m个缓存块的组数序号左移第一预设值,得到第一结果,所述第一预设值为所述第m个缓存块的组数在所述待测缓存的地址结构中的起始比特位,并将所述第m个缓存块的路数序号左移第二预设值,得到第二结果,所述第二预设值为所述第m个缓存块的路数在所述待测缓存的地址结构中的起始比特位,且对所述第一结果和所述第一地址进行或运算,得到所述第m个缓存块的组数地址,以及对所述第二结果和所述第m个缓存块的组数地址进行或运算,得到所述第m个缓存块的逻辑测试地址。
可选的,所述执行CPU,具体用于根据所述第一地址和所述第m个缓存块的路数序号,确定所述第m个缓存块的路数地址,并根据所述第m个缓存块的路数地址和所述第m个缓存块的组数序号,确定所述第m个缓存块的逻辑测试地址。
可选的,所述执行CPU,具体用于将所述第m个缓存块的组数序号左移第一预设值,得到第一结果,所述第一预设值为所述第m个缓存块的组数在所述待测缓存的地址结构中的起始比特位,并将所述第m个缓存块的路数序号左移第二预设值,得到第二结果,所述第二预设值为所述第m个缓存块的路数在所述待测缓存的地址结构中的起始比特位,且对所述第二结果和所述第一地址进行或运算,得到所述第m个缓存块的路数地址,以及对所述第一结果和所述第m个缓存块的路数地址进行或运算,得到所述第m个缓存块的逻辑测试地址。
可选的,所述执行CPU,具体用于将所述第m个缓存块的组数序号作为所述第m+1个缓存块的组数序号,并将所述第m个缓存块的路数序号的下一个序号作为所述第m+1个缓存块的路数序号;或者,所述执行CPU,具体用于将所述第m个缓存块的路数序号作为所述第m+1个缓存块的路数序号,并将所述第m个缓存块的组数序号的下一个序号作为所述第m+1个缓存块的组数序号。
可选的,所述执行CPU,具体用于将所述第m个缓存块的组数序号的下一个序号作为所述第m+1个缓存块的组数序号,并将所述第m个缓存块的起始路数序号作为所述第m+1个缓存块的路数序号,其中,所述第m个缓存块为其所在组数中路数序号最大的缓存块;或者,所述执行CPU,具体用于将所述第m个缓存块的路数序号的下一个序号作为所述第m+1个缓存块的路数序号,并将所述第m个缓存块的起始组数序号作为所述第m+1个缓存块的组数序号,其中,所述第m个缓存块为其所在路数中组数序号最大的缓存块。
所述监控CPU,用于实时检测所有执行CPU的状态寄存器的值,并根据所述所有执行CPU的状态寄存器的值,确定所述待测缓存是否测试成功。
可选的,所述监控CPU,还用于在实时检测所有执行CPU的状态寄存器的值之前,指示所述所有执行CPU开始测试所述待测缓存。
可选的,所述监控CPU,具体用于获取共享状态标志变量的值,并根据所述共享状态标志变量的值,指示所述所有执行CPU开始测试所述待测缓存。
可选的,所述监控CPU,具体用于若所述所有执行CPU的状态寄存器的值均与预设值相同,则确定所述待测缓存测试成功;或者,所述监控CPU,具体用于若所述所有执行CPU的状态寄存器的值中至少一个执行CPU的状态寄存器的值与预设值不同,则确定所述待测缓存测试失败。
可选的,所述监控CPU,还用于当根据所述所有执行CPU的状态寄存器的值,确定所述待测缓存测试失败时,指示所述所有执行CPU停止测试所述待测缓存。
可选的,所述监控CPU,具体用于修改所述共享状态标志变量的值,并根据修改后的所述共享状态标志变量的值,指示所述所有执行CPU停止测试所述待测缓存。
本发明实施例提供一种CPU,该CPU获取第一地址,该第一地址为与待测缓存的大小相同的内存块的逻辑首地址,该待测缓存包括n个缓存块,其中,n≥1,并根据该第一地址和该待测缓存中的第m个缓存块的物理地址信息,确定第m个缓存块的逻辑测试地址,其中,1≤m≤n,以及根据第m个缓存块的逻辑测试地址,测试第m个缓存块。通过该方案,该CPU可以通过预先申请的与待测缓存的大小相同的内存块的首地址和缓存块的物理地址信息,按照相邻的物理地址次序将待测缓存中缓存块的物理地址转换为逻辑测试地址,并以缓存块为单位对待测缓存进行测试,解决了现有技术中不能完全触发实际物理地址比特位之间的干扰故障,并且测试缓存效率低的问题,因此,能够完全触发实际物理地址比特位之间的干扰故障,并且通过多CPU并行测试提高测试缓存的效率。
实施例五
如图15所示,本发明实施例提供一种服务器,该服务器可以包括:处理器17、存储器18和系统总线19,其中,
处理器17和存储器18之间通过系统总线19连接并完成相互间的通信。
处理器17可能可以为多核中央处理单元,或者为特定集成电路或者被配置为实施本发明实施例的一个或多个集成电路。
处理器17可以为多核CPU,该多核CPU可以包括至少一个实施例四所述的执行CPU和至少一个实施例四所述的监控CPU。
存储器18可以为高速RAM(Random Access Memory,随机存取存储器),也可以为非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
存储器18用于存储服务器的指令。具体的,服务器的指令可以包括软件程序和软件代码。
具体的,所述处理器17可用于通过系统总线19获取第一地址,所述第一地址为与待测缓存的大小相同的内存块的逻辑首地址,所述待测缓存包括n个缓存块,其中,n≥1,并根据所述第一地址和所述待测缓存中的第m个缓存块的物理地址信息,确定所述第m个缓存块的逻辑测试地址,其中,1≤m≤n,以及根据所述第m个缓存块的逻辑测试地址,测试所述第m个缓存块;所述存储器18可用于存储第一地址的软件代码、第m个缓存块的软件代码及控制所述处理器17完成上述步骤的软件程序,从而使得所述处理器17可通过执行上述软件程序并调用上述软件代码,从而完成上述步骤。
可选的,所述处理器17,具体用于根据所述第m个缓存块的逻辑测试地址,读取所述第m个缓存块的数据位和所述第m个缓存块的状态位,所述状态位用于指示自旋锁的状态,并写入测试数据至所述第m个缓存块的数据位。
可选的,所述处理器17,还用于当读取所述第m个缓存块的数据位和所述第m个缓存块的状态位中的任意一个失败,或写入所述测试数据至所述第m个缓存块的数据位失败时,修改状态寄存器的值,所述状态寄存器用于指示所述待测缓存是否测试成功。
可选的,所述处理器17,还用于在写入所述测试数据至所述第m个缓存块的数据位之后,根据所述第m个缓存块的状态位,判断所述自旋锁是否为空闲状态。
可选的,所述处理器17,还用于若所述自旋锁不为空闲状态,则确定第m+1个缓存块的逻辑测试地址,并根据所述确定单元确定的所述第m+1个缓存块的逻辑测试地址,测试所述第m+1个缓存块。
可选的,所述处理器17,还用于若所述自旋锁为空闲状态,则获取所述自旋锁,并修改所述第m个缓存块的状态位,且写入测试数据至所述第m个缓存块的数据位,并释放所述自旋锁,以及确定第m+1个缓存块的逻辑测试地址,并根据所述第m+1个缓存块的逻辑测试地址,测试所述第m+1个缓存块。
可选的,所述第m个缓存块的物理地址信息包括所述第m个缓存块的组数序号和所述第m个缓存块的路数序号;其中,所述处理器17,具体用于根据所述第一地址、所述第m个缓存块的组数序号和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址。
可选的,所述处理器17,具体用于根据所述第一地址和所述第m个缓存块的组数序号,确定所述第m个缓存块的组数地址,并根据所述第m个缓存块的组数地址和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址。
可选的,所述处理器17,具体用于将所述第m个缓存块的组数序号左移第一预设值,得到第一结果,所述第一预设值为所述第m个缓存块的组数在所述待测缓存的地址结构中的起始比特位,并将所述第m个缓存块的路数序号左移第二预设值,得到第二结果,所述第二预设值为所述第m个缓存块的路数在所述待测缓存的地址结构中的起始比特位,且对所述第一结果和所述第一地址进行或运算,得到所述第m个缓存块的组数地址,以及对所述第二结果和所述第m个缓存块的组数地址进行或运算,得到所述第m个缓存块的逻辑测试地址。
可选的,所述处理器17,具体用于根据所述第一地址和所述第m个缓存块的路数序号,确定所述第m个缓存块的路数地址,并根据所述第m个缓存块的路数地址和所述第m个缓存块的组数序号,确定所述第m个缓存块的逻辑测试地址。
可选的,所述处理器17,具体用于将所述第m个缓存块的组数序号左移第一预设值,得到第一结果,所述第一预设值为所述第m个缓存块的组数在所述待测缓存的地址结构中的起始比特位,并将所述第m个缓存块的路数序号左移第二预设值,得到第二结果,所述第二预设值为所述第m个缓存块的路数在所述待测缓存的地址结构中的起始比特位,且对所述第二结果和所述第一地址进行或运算,得到所述第m个缓存块的路数地址,以及对所述第一结果和所述第m个缓存块的路数地址进行或运算,得到所述第m个缓存块的逻辑测试地址。
可选的,所述处理器17,具体用于将所述第m个缓存块的组数序号作为所述第m+1个缓存块的组数序号,并将所述第m个缓存块的路数序号的下一个序号作为所述第m+1个缓存块的路数序号;或者,所述处理器17,具体用于将所述第m个缓存块的路数序号作为所述第m+1个缓存块的路数序号,并将所述第m个缓存块的组数序号的下一个序号作为所述第m+1个缓存块的组数序号。
可选的,所述处理器17,具体用于将所述第m个缓存块的组数序号的下一个序号作为所述第m+1个缓存块的组数序号,并将所述第m个缓存块的起始路数序号作为所述第m+1个缓存块的路数序号,其中,所述第m个缓存块为其所在组数中路数序号最大的缓存块;或者,所述处理器17,具体用于将所述第m个缓存块的路数序号的下一个序号作为所述第m+1个缓存块的路数序号,并将所述第m个缓存块的起始组数序号作为所述第m+1个缓存块的组数序号,其中,所述第m个缓存块为其所在路数中组数序号最大的缓存块。
所述处理器17,用于实时检测所有状态寄存器的值,并根据所述所有状态寄存器的值,确定所述待测缓存是否测试成功。
可选的,所述处理器17,还用于在实时检测所有执行CPU的状态寄存器的值之前,指示所述所有执行CPU开始测试所述待测缓存。
可选的,所述处理器17,具体用于获取共享状态标志变量的值,并根据所述共享状态标志变量的值,指示开始测试所述待测缓存。
可选的,所述处理器17,具体用于若所述所有状态寄存器的值均与预设值相同,则确定所述待测缓存测试成功;或者,所述处理器17,具体用于若所述所有状态寄存器的值中至少一个状态寄存器的值与预设值不同,则确定所述待测缓存测试失败。
可选的,所述处理器17,还用于当根据所述所有状态寄存器的值,确定所述待测缓存测试失败时,指示停止测试所述待测缓存。
可选的,所述处理器17,具体用于修改所述共享状态标志变量的值,并根据修改后的所述共享状态标志变量的值,指示停止测试所述待测缓存。
本发明实施例提供一种服务器,该服务器获取第一地址,该第一地址为与待测缓存的大小相同的内存块的逻辑首地址,该待测缓存包括n个缓存块,其中,n≥1,并根据该第一地址和该待测缓存中的第m个缓存块的物理地址信息,确定第m个缓存块的逻辑测试地址,其中,1≤m≤n,以及根据第m个缓存块的逻辑测试地址,测试第m个缓存块。通过该方案,该服务器可以通过预先申请的与待测缓存的大小相同的内存块的首地址和缓存块的物理地址信息,按照相邻的物理地址次序将待测缓存中缓存块的物理地址转换为逻辑测试地址,并以缓存块为单位对待测缓存进行测试,解决了现有技术中不能完全触发实际物理地址比特位之间的干扰故障,并且测试缓存效率低的问题,因此,能够完全触发实际物理地址比特位之间的干扰故障,并且通过多CPU并行测试提高测试缓存的效率。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (39)
1.一种缓存测试方法,其特征在于,包括:
获取第一地址,所述第一地址为与待测缓存的大小相同的内存块的逻辑首地址,所述待测缓存包括n个缓存块,其中,n≥1;
根据所述第一地址和所述待测缓存中的第m个缓存块的物理地址信息,确定所述第m个缓存块的逻辑测试地址,其中,1≤m≤n;
根据所述第m个缓存块的逻辑测试地址,测试所述第m个缓存块。
2.根据权利要求1所述的缓存测试方法,其特征在于,所述根据所述第m个缓存块的逻辑测试地址,测试所述第m个缓存块,具体包括:
根据所述第m个缓存块的逻辑测试地址,读取所述第m个缓存块的数据位和所述第m个缓存块的状态位,所述状态位用于指示自旋锁的状态;
写入测试数据至所述第m个缓存块的数据位。
3.根据权利要求2所述的缓存测试方法,其特征在于,当读取所述第m个缓存块的数据位和所述第m个缓存块的状态位中的任意一个失败,或写入测试数据至所述第m个缓存块的数据位失败时,所述方法还包括:
修改状态寄存器的值,所述状态寄存器用于指示所述待测缓存是否测试成功。
4.根据权利要求1或2所述的缓存测试方法,其特征在于,所述写入测试数据至所述第m个缓存块的数据位之后,所述方法还包括:
根据所述第m个缓存块的状态位,判断所述自旋锁是否为空闲状态。
5.根据权利要求4所述的缓存测试方法,其特征在于,若所述自旋锁不为空闲状态,则所述方法还包括:
确定第m+1个缓存块的逻辑测试地址;
根据所述第m+1个缓存块的逻辑测试地址,测试所述第m+1个缓存块。
6.根据权利要求4所述的缓存测试方法,其特征在于,若所述自旋锁为空闲状态,则所述方法还包括:
获取所述自旋锁;
修改所述第m个缓存块的状态位;
写入测试数据至所述第m个缓存块的数据位,并释放所述自旋锁;
确定第m+1个缓存块的逻辑测试地址;
根据所述第m+1个缓存块的逻辑测试地址,测试所述第m+1个缓存块。
7.根据权利要求1-6任一项所述的缓存测试方法,其特征在于,所述第m个缓存块的物理地址信息包括所述第m个缓存块的组数序号和所述第m个缓存块的路数序号,
其中,根据所述第一地址和所述待测缓存中的第m个缓存块的物理地址信息,确定所述第m个缓存块的逻辑测试地址,具体包括:
根据所述第一地址、所述第m个缓存块的组数序号和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址。
8.根据权利要求7所述的缓存测试方法,其特征在于,所述根据所述第一地址、所述第m个缓存块的组数序号和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址,具体包括:
根据所述第一地址和所述第m个缓存块的组数序号,确定所述第m个缓存块的组数地址;
根据所述第m个缓存块的组数地址和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址。
9.根据权利要求7或8所述的缓存测试方法,其特征在于,所述根据所述第一地址、所述第m个缓存块的组数序号和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址,具体包括:
将所述第m个缓存块的组数序号左移第一预设值,得到第一结果,所述第一预设值为所述第m个缓存块的组数在所述待测缓存的地址结构中的起始比特位;
将所述第m个缓存块的路数序号左移第二预设值,得到第二结果,所述第二预设值为所述第m个缓存块的路数在所述待测缓存的地址结构中的起始比特位;
对所述第一结果和所述第一地址进行或运算,得到所述第m个缓存块的组数地址;
对所述第二结果和所述第m个缓存块的组数地址进行或运算,得到所述第m个缓存块的逻辑测试地址。
10.根据权利要求7所述的缓存测试方法,其特征在于,所述根据所述第一地址、所述第m个缓存块的组数序号和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址,具体包括:
根据所述第一地址和所述第m个缓存块的路数序号,确定所述第m个缓存块的路数地址;
根据所述第m个缓存块的路数地址和所述第m个缓存块的组数序号,确定所述第m个缓存块的逻辑测试地址。
11.根据权利要求7或10所述的缓存测试方法,其特征在于,所述根据所述第一地址、所述第m个缓存块的组数序号和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址,具体包括:
将所述第m个缓存块的组数序号左移第一预设值,得到第一结果,所述第一预设值为所述第m个缓存块的组数在所述待测缓存的地址结构中的起始比特位;
将所述第m个缓存块的路数序号左移第二预设值,得到第二结果,所述第二预设值为所述第m个缓存块的路数在所述待测缓存的地址结构中的起始比特位;
对所述第二结果和所述第一地址进行或运算,得到所述第m个缓存块的路数地址;
对所述第一结果和所述第m个缓存块的路数地址进行或运算,得到所述第m个缓存块的逻辑测试地址。
12.根据权利要求5或6所述的缓存测试方法,其特征在于,所述第m+1个缓存块的物理地址信息通过如下方法来确定:
将所述第m个缓存块的组数序号作为所述第m+1个缓存块的组数序号,并将所述第m个缓存块的路数序号的下一个序号作为所述第m+1个缓存块的路数序号;或者,
将所述第m个缓存块的路数序号作为所述第m+1个缓存块的路数序号,并将所述第m个缓存块的组数序号的下一个序号作为所述第m+1个缓存块的组数序号。
13.根据权利要求5或6所述的缓存测试方法,其特征在于,所述第m+1个缓存块的物理地址信息通过如下方法来确定:
将所述第m个缓存块的组数序号的下一个序号作为所述第m+1个缓存块的组数序号,并将所述第m个缓存块的起始路数序号作为所述第m+1个缓存块的路数序号,其中,所述第m个缓存块为其所在组数中路数序号最大的缓存块;或者,
将所述第m个缓存块的路数序号的下一个序号作为所述第m+1个缓存块的路数序号,并将所述第m个缓存块的起始组数序号作为所述第m+1个缓存块的组数序号,其中,所述第m个缓存块为其所在路数中组数序号最大的缓存块。
14.一种缓存测试方法,其特征在于,包括:
实时检测所有执行中央处理器CPU的状态寄存器的值;
根据所述所有执行CPU的状态寄存器的值,确定待测缓存是否测试成功。
15.根据权利要求14所述的缓存测试方法,其特征在于,所述实时检测所有执行CPU的状态寄存器的值之前,所述方法还包括:
指示所述所有执行CPU开始测试所述待测缓存。
16.根据权利要求14或15所述的缓存测试方法,其特征在于,所述指示所述所有执行CPU开始测试所述待测缓存,具体包括:
获取共享状态标志变量的值;
根据所述共享状态标志变量的值,指示所述所有执行CPU开始测试所述待测缓存。
17.根据权利要求14-16任一项所述的缓存测试方法,其特征在于,所述根据所述所有执行CPU的状态寄存器的值,确定待测缓存是否测试成功,具体包括:
若所述所有执行CPU的状态寄存器的值均与预设值相同,则确定所述待测缓存测试成功;或者,
若所述所有执行CPU的状态寄存器的值中至少一个执行CPU的状态寄存器的值与预设值不同,则确定所述待测缓存测试失败。
18.根据权利要求14-17任一项所述的缓存测试方法,其特征在于,当根据所述所有执行CPU的状态寄存器的值,确定所述待测缓存测试失败时,所述方法还包括:
指示所述所有执行CPU停止测试所述待测缓存。
19.根据权利要求18所述的缓存测试方法,其特征在于,所述指示所述所有执行CPU停止测试所述待测缓存,具体包括:
修改所述共享状态标志变量的值;
根据修改后的所述共享状态标志变量的值,指示所述所有执行CPU停止测试所述待测缓存。
20.一种CPU,其特征在于,包括:
获取单元,用于获取第一地址,所述第一地址为与待测缓存的大小相同的内存块的逻辑首地址,所述待测缓存包括n个缓存块,其中,n≥1;
确定单元,用于根据所述获取单元获取的所述第一地址和所述待测缓存中的第m个缓存块的物理地址信息,确定所述第m个缓存块的逻辑测试地址,其中,1≤m≤n;
测试单元,用于根据所述确定单元确定的所述第m个缓存块的逻辑测试地址,测试所述第m个缓存块。
21.根据权利要求20所述的CPU,其特征在于,所述CPU还包括读取单元和写入单元,
所述读取单元,用于根据所述确定单元确定的所述第m个缓存块的逻辑测试地址,读取所述第m个缓存块的数据位和所述第m个缓存块的状态位,所述状态位用于指示自旋锁的状态;
所述写入单元,用于写入测试数据至所述第m个缓存块的数据位。
22.根据权利要求21所述的CPU,其特征在于,所述CPU还包括修改单元,
所述修改单元,用于当所述读取单元读取所述第m个缓存块的数据位和所述第m个缓存块的状态位中的任意一个失败,或所述写入单元写入所述测试数据至所述第m个缓存块的数据位失败时,修改状态寄存器的值,所述状态寄存器用于指示所述待测缓存是否测试成功。
23.根据权利要求20或21所述的CPU,其特征在于,所述CPU还包括判断单元,
所述判断单元,用于在所述写入单元写入所述测试数据至所述第m个缓存块的数据位之后,根据所述第m个缓存块的状态位,判断所述自旋锁是否为空闲状态。
24.根据权利要求23所述的CPU,其特征在于,
所述确定单元,还用于若所述判断单元判断出所述自旋锁不为空闲状态,则确定第m+1个缓存块的逻辑测试地址;
所述测试单元,还用于根据所述确定单元确定的所述第m+1个缓存块的逻辑测试地址,测试所述第m+1个缓存块。
25.根据权利要求23所述的CPU,其特征在于,
所述获取单元,还用于若所述判断单元判断出所述自旋锁为空闲状态,则获取所述自旋锁;
所述修改单元,还用于修改所述读取单元读取的所述第m个缓存块的状态位;
所述写入单元,还用于写入测试数据至所述第m个缓存块的数据位,并释放所述获取单元获取的所述自旋锁;
所述确定单元,还用于确定第m+1个缓存块的逻辑测试地址;
所述测试单元,还用于根据所述确定单元确定的所述第m+1个缓存块的逻辑测试地址,测试所述第m+1个缓存块。
26.根据权利要求20-25任一项所述的CPU,其特征在于,所述第m个缓存块的物理地址信息包括所述第m个缓存块的组数序号和所述第m个缓存块的路数序号;
其中,所述确定单元,具体用于根据所述获取单元获取的所述第一地址、所述第m个缓存块的组数序号和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址。
27.根据权利要求26所述的CPU,其特征在于,
所述确定单元,具体用于根据所述获取单元获取的所述第一地址和所述第m个缓存块的组数序号,确定所述第m个缓存块的组数地址,并根据所述第m个缓存块的组数地址和所述第m个缓存块的路数序号,确定所述第m个缓存块的逻辑测试地址。
28.根据权利要求26或27所述的CPU,其特征在于,
所述确定单元,具体用于将所述第m个缓存块的组数序号左移第一预设值,得到第一结果,所述第一预设值为所述第m个缓存块的组数在所述待测缓存的地址结构中的起始比特位,并将所述第m个缓存块的路数序号左移第二预设值,得到第二结果,所述第二预设值为所述第m个缓存块的路数在所述待测缓存的地址结构中的起始比特位,且对所述第一结果和所述获取单元获取的所述第一地址进行或运算,得到所述第m个缓存块的组数地址,以及对所述第二结果和所述第m个缓存块的组数地址进行或运算,得到所述第m个缓存块的逻辑测试地址。
29.根据权利要求26所述的CPU,其特征在于,
所述确定单元,具体用于根据所述获取单元获取的所述第一地址和所述第m个缓存块的路数序号,确定所述第m个缓存块的路数地址,并根据所述第m个缓存块的路数地址和所述第m个缓存块的组数序号,确定所述第m个缓存块的逻辑测试地址。
30.根据权利要求26或29所述的CPU,其特征在于,
所述确定单元,具体用于将所述第m个缓存块的组数序号左移第一预设值,得到第一结果,所述第一预设值为所述第m个缓存块的组数在所述待测缓存的地址结构中的起始比特位,并将所述第m个缓存块的路数序号左移第二预设值,得到第二结果,所述第二预设值为所述第m个缓存块的路数在所述待测缓存的地址结构中的起始比特位,且对所述第二结果和所述获取单元获取的所述第一地址进行或运算,得到所述第m个缓存块的路数地址,以及对所述第一结果和所述第m个缓存块的路数地址进行或运算,得到所述第m个缓存块的逻辑测试地址。
31.根据权利要求24或25所述的CPU,其特征在于,
所述确定单元,具体用于将所述第m个缓存块的组数序号作为所述第m+1个缓存块的组数序号,并将所述第m个缓存块的路数序号的下一个序号作为所述第m+1个缓存块的路数序号;或者,
所述确定单元,具体用于将所述第m个缓存块的路数序号作为所述第m+1个缓存块的路数序号,并将所述第m个缓存块的组数序号的下一个序号作为所述第m+1个缓存块的组数序号。
32.根据权利要求24或25所述的CPU,其特征在于,
所述确定单元,具体用于将所述第m个缓存块的组数序号的下一个序号作为所述第m+1个缓存块的组数序号,并将所述第m个缓存块的起始路数序号作为所述第m+1个缓存块的路数序号,其中,所述第m个缓存块为其所在组数中路数序号最大的缓存块;或者,
所述确定单元,具体用于将所述第m个缓存块的路数序号的下一个序号作为所述第m+1个缓存块的路数序号,并将所述第m个缓存块的起始组数序号作为所述第m+1个缓存块的组数序号,其中,所述第m个缓存块为其所在路数中组数序号最大的缓存块。
33.一种CPU,其特征在于,包括:
检测单元,用于实时检测所有执行CPU的状态寄存器的值;
确定单元,用于根据所述检测单元检测到的所述所有执行CPU的状态寄存器的值,确定待测缓存是否测试成功。
34.根据权利要求33所述的CPU,其特征在于,所述CPU还包括指示单元,
所述指示单元,用于在所述检测单元实时检测所有执行CPU的状态寄存器的值之前,指示所述所有执行CPU开始测试所述待测缓存。
35.根据权利要求33或34所述的CPU,其特征在于,所述CPU还包括获取单元,
所述获取单元,用于获取共享状态标志变量的值;
所述指示单元,具体用于根据所述获取单元获取的所述共享状态标志变量的值,指示所述所有执行CPU开始测试所述待测缓存。
36.根据权利要求33-35任一项所述的CPU,其特征在于,
所述确定单元,具体用于若所述检测单元检测出所述所有执行CPU的状态寄存器的值均与预设值相同,则确定所述待测缓存测试成功;或者,
所述确定单元,具体用于若所述检测单元检测出所述所有执行CPU的状态寄存器的值中至少一个执行CPU的状态寄存器的值与预设值不同,则确定所述待测缓存测试失败。
37.根据权利要求33-36任一项所述的CPU,其特征在于,
所述指示单元,还用于当所述确定单元根据所述所有执行CPU的状态寄存器的值,确定所述待测缓存测试失败时,指示所述所有执行CPU停止测试所述待测缓存。
38.根据权利要求37所述的CPU,其特征在于,所述CPU还包括修改单元,
所述修改单元,用于修改所述获取单元获取的所述共享状态标志变量的值;
所述指示单元,具体用于根据所述修改单元修改后的所述共享状态标志变量的值,指示所述所有执行CPU停止测试所述待测缓存。
39.一种服务器,其特征在于,包括:
至少一个如权利要求20-32所述的CPU和一个如权利要求33-38所述的CPU。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410123949.0A CN103902419B (zh) | 2014-03-28 | 2014-03-28 | 一种缓存测试方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410123949.0A CN103902419B (zh) | 2014-03-28 | 2014-03-28 | 一种缓存测试方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103902419A true CN103902419A (zh) | 2014-07-02 |
CN103902419B CN103902419B (zh) | 2017-12-22 |
Family
ID=50993755
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410123949.0A Active CN103902419B (zh) | 2014-03-28 | 2014-03-28 | 一种缓存测试方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103902419B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109144419A (zh) * | 2018-08-20 | 2019-01-04 | 浪潮电子信息产业股份有限公司 | 一种固态硬盘内存读写方法及系统 |
CN109344082A (zh) * | 2018-11-01 | 2019-02-15 | 郑州云海信息技术有限公司 | 一种自动测试寄存器的方法与系统 |
CN109901880A (zh) * | 2019-02-28 | 2019-06-18 | 福州瑞芯微电子股份有限公司 | 一种spinlock硬件电路及电子设备 |
CN110971481A (zh) * | 2019-11-05 | 2020-04-07 | 天津芯海创科技有限公司 | 一种缓存地址管理逻辑的测试方法及装置 |
CN114780323A (zh) * | 2022-06-17 | 2022-07-22 | 新华三信息技术有限公司 | 一种服务器中内存的故障检测方法、装置及设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1427420A (zh) * | 2001-12-20 | 2003-07-02 | 华为技术有限公司 | Ram高速测试控制电路及其测试方法 |
US20030167428A1 (en) * | 2001-04-13 | 2003-09-04 | Sun Microsystems, Inc | ROM based BIST memory address translation |
US6681346B2 (en) * | 2000-05-11 | 2004-01-20 | Goodrich Corporation | Digital processing system including a DMA controller operating in the virtual address domain and a method for operating the same |
CN101256844A (zh) * | 2007-03-01 | 2008-09-03 | 环达电脑(上海)有限公司 | 内存测试装置及内存测试方法 |
US20080229150A1 (en) * | 2007-03-16 | 2008-09-18 | Etas, Inc. | Address translation system for use in a simulation environment |
CN101937721A (zh) * | 2010-08-04 | 2011-01-05 | 武汉天喻信息产业股份有限公司 | 一种测试存储器件的方法 |
-
2014
- 2014-03-28 CN CN201410123949.0A patent/CN103902419B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6681346B2 (en) * | 2000-05-11 | 2004-01-20 | Goodrich Corporation | Digital processing system including a DMA controller operating in the virtual address domain and a method for operating the same |
US20030167428A1 (en) * | 2001-04-13 | 2003-09-04 | Sun Microsystems, Inc | ROM based BIST memory address translation |
CN1427420A (zh) * | 2001-12-20 | 2003-07-02 | 华为技术有限公司 | Ram高速测试控制电路及其测试方法 |
CN101256844A (zh) * | 2007-03-01 | 2008-09-03 | 环达电脑(上海)有限公司 | 内存测试装置及内存测试方法 |
US20080229150A1 (en) * | 2007-03-16 | 2008-09-18 | Etas, Inc. | Address translation system for use in a simulation environment |
CN101937721A (zh) * | 2010-08-04 | 2011-01-05 | 武汉天喻信息产业股份有限公司 | 一种测试存储器件的方法 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109144419A (zh) * | 2018-08-20 | 2019-01-04 | 浪潮电子信息产业股份有限公司 | 一种固态硬盘内存读写方法及系统 |
CN109344082A (zh) * | 2018-11-01 | 2019-02-15 | 郑州云海信息技术有限公司 | 一种自动测试寄存器的方法与系统 |
CN109901880A (zh) * | 2019-02-28 | 2019-06-18 | 福州瑞芯微电子股份有限公司 | 一种spinlock硬件电路及电子设备 |
CN109901880B (zh) * | 2019-02-28 | 2020-11-20 | 瑞芯微电子股份有限公司 | 一种spinlock硬件电路及电子设备 |
CN110971481A (zh) * | 2019-11-05 | 2020-04-07 | 天津芯海创科技有限公司 | 一种缓存地址管理逻辑的测试方法及装置 |
CN114780323A (zh) * | 2022-06-17 | 2022-07-22 | 新华三信息技术有限公司 | 一种服务器中内存的故障检测方法、装置及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN103902419B (zh) | 2017-12-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102129410B (zh) | 提供扩展的存储器保护 | |
CN103902419A (zh) | 一种缓存测试方法及装置 | |
CN104572517A (zh) | 提供被请求数据的方法、控制器以及计算机系统 | |
CN103473098A (zh) | 一种boot程序的启动方法和相关装置 | |
JP6290934B2 (ja) | プログラマブルデバイス、エラー保持システム、及び電子システム装置 | |
US9443613B2 (en) | Advanced memory test diagnostics | |
US20160172055A1 (en) | Combined rank and linear address incrementing utility for computer memory test operations | |
CN101908376A (zh) | 非挥发性存储装置及其控制方法 | |
TWI550404B (zh) | 識別含有重新映射記憶體位置之記憶體區域的技術 | |
CN115616377A (zh) | 故障芯片检测方法、装置、计算设备和存储介质 | |
US8910004B2 (en) | Information processing apparatus, and method of controlling information processing apparatus | |
US9009548B2 (en) | Memory testing of three dimensional (3D) stacked memory | |
CN114730607A (zh) | 一种存储器故障修复方法及装置 | |
CN111221681A (zh) | 一种存储器的修复方法及装置 | |
CN108108118B (zh) | 数据写入方法以及存储控制器 | |
CN114924923A (zh) | 一种硬盘写入点正确性验证方法、系统、设备及介质 | |
CN103984614A (zh) | 一种监控方法及监控装置、电子设备 | |
CN112216333A (zh) | 芯片测试方法及装置 | |
CN103534704A (zh) | 一种处理失效报文的方法、网络设备和处理器 | |
CN108572920B (zh) | 避免读取扰动的数据搬移方法以及使用该方法的装置 | |
EP3557422A1 (en) | Method for accessing code sram, and electronic device | |
CN115359834B (zh) | 一种盘仲裁区域检测方法、装置、设备及可读存储介质 | |
US11650738B2 (en) | Integrity check of a memory | |
CN116483641B (zh) | 硬盘异常掉电测试方法、系统及介质 | |
CN215910890U (zh) | 一种众核计算电路和堆叠芯片 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20211222 Address after: 450046 Floor 9, building 1, Zhengshang Boya Plaza, Longzihu wisdom Island, Zhengdong New Area, Zhengzhou City, Henan Province Patentee after: Super fusion Digital Technology Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |