CN113704040A - 一种微处理器内存可靠性测试方法 - Google Patents
一种微处理器内存可靠性测试方法 Download PDFInfo
- Publication number
- CN113704040A CN113704040A CN202111054608.9A CN202111054608A CN113704040A CN 113704040 A CN113704040 A CN 113704040A CN 202111054608 A CN202111054608 A CN 202111054608A CN 113704040 A CN113704040 A CN 113704040A
- Authority
- CN
- China
- Prior art keywords
- error
- injection
- memory
- error injection
- script
- 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.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/2205—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
- G06F11/2236—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test CPU or processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/2273—Test methods
Abstract
本发明提供一种微处理器内存可靠性测试方法,包括:对待注错的应用源码插入注错辅助函数和标志变量;将可注错的应用源码烧录至目标发开版;调用Python注错脚本,对程序进行内存注错;解析注错结果,输出内存的软错误率评估报告。通过Python脚本调用注错系统对嵌入式应用进行内存可靠性的自动化测试,向开发者提供了一种通用的微处理器内存可靠性测试的途径,本方案测试效率高、通用性强、扩展性灵活、自由度高、实现成本低廉。
Description
技术领域
本发明属于微处理器测试技术领域,尤其涉及一种微处理器内存可靠性测试方法。
背景技术
随着嵌入式技术的迅猛发展,嵌入式应用不仅在我们的生活中随处可见,在航空航天、汽车和军工等安全关键行业中也比比皆是。然而,在恶劣的辐照环境中,芯片内部的静态随机存取存储器(SRAM,Static Random-Access Memory)对软错误非常敏感。比如,高能粒子打击内存,会造成数据污染,从而引起控制系统失效。
为了提高嵌入式系统片上内存对软错误的可靠性,传统的加固方式有硬件加固和软件加固。
常见的硬件技术有纠正码(ECC,Error Correcting Code)技术,ECC技术能够修正单位翻转及检测多位翻转。但ECC技术会引起额外的内存、性能、功耗和经济成本,例如,带ECC技术的芯片比同样配置没有ECC技术的芯片价格更高。为了克服上述缺点,本领域技术人员提出了选择性内存刷新和选择性内存冗余的软件技术,这些技术是基于应用的容错特性,有选择性地对系统的部分应用使用刷新或冗余技术进行保护。由于是基于应用的,这些技术要求开发者掌握软错误敏感的内存位置,内存的临界误码率,因为,这些因素会影响软件保护的内存位置和刷新时间。
目前,对微处理器片上内存的评估方式有两类,一类是基于FPGA的仿真和模拟故障注入方式;另一类是基于代码实现的故障注入方式。前者,要求开发者拥有测试芯片的电路设计描述,然而,对于一般开发者,商业芯片的设计资料是保密的,此外,这种技术的注错效率非常慢;后者,通常在中断服务中实现故障注入代码,这导致它们基于不同的平台,需要大量调整相关代码,例如,不同处理器的中断服务地址不同;不同平台会导致代码的实现不同。此外,部分底层资源无法通过代码访问。在开发前期,开发者通常需要选取多款芯片作为候选目标,而上述两种技术依赖硬件,导致它们的可移植性和可扩展性较差,造成开发者在选型和编写测试代码的方面需要付出额外的时间开销。除此之外,目前的注错方式提供的错误分配算法主要是均匀分布,比较单一。如上所述,微处理器的内存注入技术的通用性和灵活性亟待提高。
发明内容
为解决上述技术问题,本发明提供一种微处理器内存可靠性测试方法。为了对披露的实施例的一些方面有一个基本的理解,下面给出了简单的概括。该概括部分不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围。其唯一目的是用简单的形式呈现一些概念,以此作为后面的详细说明的序言。
本发明采用如下技术方案:
在一些可选的实施例中,提供一种微处理器内存可靠性测试方法,包括如下步骤:S1:对待注错的应用源码插入注错辅助函数和标志变量;S2:将可注错的应用源码烧录至目标发开版;S3:调用Python注错脚本,对程序进行内存注错。
进一步的,所述的一种微处理器内存可靠性测试方法,还包括:S4:解析注错结果,输出内存的软错误率评估报告。
进一步的,所述步骤S3的过程包括:
S301:生成注错任务列表;
S302:提取所述注错任务列表中的任务;
S303:执行注错任务;
S304:单次注错任务执行完毕,保存注错结果;
S305:判断所述注错任务列表中是否还有新任务,若有新任务,则转入步骤S302,否则,转入步骤S306;
S306:汇总并将结果导出至文件,结束脚本任务。
进一步的,所述步骤S303的过程包括:
S3031:挂起应用;
S3032:读取测试配置信息;
S3033:选择错误模型;
S3034:选择内存区域;
S3035:选择错误分配算法;
S3036:生成错误列表;
S3037:注入错误;
S3038:修改通知变量;
S3039:恢复应用运行。
进一步的,所述步骤S3032中读取的测试配置信息包括:注错模型、误码率、注错区域及错误分配算法;所述测试配置信息存放于json文件中。
进一步的,所述步骤S3033-步骤S3035,Python注错脚本根据测试配置信息随机生成错误列表。
本发明所带来的有益效果:通过Python脚本调用注错系统对嵌入式应用进行内存可靠性的自动化测试,向开发者提供了一种通用的微处理器内存可靠性测试的途径,本方案测试效率高、通用性强、扩展性灵活、自由度高、实现成本低廉。
附图说明
图1是本发明一种微处理器内存可靠性测试方法的流程示意图;
图2是本发明调用Python注错脚本对程序进行内存注错的流程示意图;
图3是本发明执行注错任务的流程示意图;
图4是本发明的内存可靠性的示例图。
具体实施方式
以下描述和附图充分地展示出本发明的具体实施方案,以使本领域的技术人员能够实践它们。其他实施方案可以包括结构的、逻辑的、电气的、过程的以及其他的改变。实施例仅代表可能的变化。除非明确要求,否则单独的部件和功能是可选的,并且操作的顺序可以变化。一些实施方案的部分和特征可以被包括在或替换其他实施方案的部分和特征。
如图1所示,在一些说明性的实施例中,本发明提供一种微处理器内存可靠性测试方法,支持主流的微处理器,提供一整套测试参数的自定义,方便实验的拟合仿真,从而帮助开发者完成对微处理器内存可靠性的自动化测试。具体包括如下步骤:
S1:注错系统对待注错的应用源码插入相关的注错辅助函数和标志变量,具体示例如下:
int main(void){
init();
while(1){
app_run();
if(DEBUG_FLAG!=0){
print_output();
break;
}
};
}
示例中,int main(void)为应用程序的入口函数;init()表示应用程序的初始化;app_run()表示等待注错的业务代码入口;print_output()表示通过串口将本次应用的输出信息回传给注错系统,以便后续分析。
while函数中,在没有注错的情况下,DEBUG_FLAG恒为0,循环执行app_run();当注错系统对内存注入软错误后,会检测到DEBUG_FLAG变为1,注错系统注入错误后,会将DEBUG_FLGA置为1,从而通过串口将本次运行的输出信息回传给注错工具,并跳出循环。
其中,注错系统软件部分由Python注错脚本和OpenOCD组成,运行在工作电脑端,注错系统控制目标开发板和访问目标开发板的信息;目标开发板的应用程序将应用程序的信息传送给Python注错脚本,Python注错脚本会保留这些信息,以便后续的分析使用。
S2:将可注错的应用源码烧录至目标发开版,可注错的应用源码即指步骤S1修改后的应用源码。
S3:调用Python注错脚本,对程序进行内存注错。
S4:解析整理注错结果,输出内存的软错误率评估报告。
如图2所示,其中,步骤S3的过程包括:
S301:生成注错任务列表;
S302:提取注错任务列表中的任务,即提取新的注错任务;
S303:执行注错任务;
S304:单次注错任务执行完毕,保存注错结果;
S305:判断注错任务列表中是否还有新任务,若有新任务,则转入步骤S302,否则,转入步骤S306;
S306:汇总并将结果导出至文件,结束脚本任务。
进一步地,汇总结果示意图如图4所示。图中,是三种不同神经网络应用分别部署在Cortex-M4和Cortex-R4处理器上的测试结果。测试中,Fault_Model为单位翻转,BER为0.0001,Distribution为均匀分布,内存范围为网络的权重参数。测试结果给出了在对应环境下,内存屏蔽错误的能力和失效的概率。例如,对于M4_LeNet,SDC小于0.0001,说明在上述环境下,内存导致LeNet失效的概率小于0.0001;Masked表示屏蔽错误的能力,Masked和SDC总和为1,由于SDC小于0.0001,说明LeNet屏蔽错误的概率大于0.9999。
如图3所示,步骤S303的过程包括:
S3031:挂起应用。
S3032:读取测试配置信息。
测试配置信息包括:注错模型、误码率、注错区域及错误分配算法;测试配置信息存放于JSON文件中,具体格式如下所示:
{
Fault_Model:1, //1 =单位翻转,2=双位翻转,10=多位翻转,0=全0故障,-1=全1故障
Area:[[0x123456,0x234567],[……]],
Distribution:1, // 1=均匀分布,2=正态分布,3=莱利分布,4=高斯分布
BER:0.001, //误码率范围为[0,1]
}
Fault_Model表述注错模型,数据类型整型数据,包括单位翻转、多位翻转、双位翻转、全0故障和全1故障,除了上述类型,可以任意扩展这个数据范围。
Area表示测试内存的范围,默认列表为空。列表为空时,脚本会对整个内存范围注入故障。如果列表不为空,则对选择的区域注入故障。列表的子元素为一个包含两个十六进制数的数组,第一个元素表示区域的起始地址,第二个元素表示区域的结束地址,例如,示例中,0x123456为起始地址,0x234567为结束地址,脚本会对这个区域注入指定数量的错误。用户可以根据需要,填充多个数组,注错脚本会自动拼接这些内存区域,生成错误列表时,会将这些内存块当作为整体对待。
Distribution表示错误的分配算法,以整数表示,目前支持均匀分布、正态分布、莱利分布和高斯分布,这部分可以根据需要任意扩展。
BER表示误码率,以小数表示,用于计算注入错误的数量。例如,0.001表示误码率为0.1%的误码率,也就是1000个存储单元中出现一个错误。用户可以根据拟合仿真的需要,任意设置内存的错误率,范围为[0,1]。
S3033:选择错误模型。
S3034:选择内存区域。
S3035:选择错误分配算法。
S3036:生成错误列表。
S3037:注入错误。
步骤S3033-步骤S3035,Python注错脚本根据测试配置信息随机生成错误列表,例如,假设Fault_Model为单位错误,BER为0.001,Distribution为均匀分布,Area为0x0000至0x0FFF,内存区域大小为4096个字节。脚本每次会生成4个错误,每个错误的模型为单位翻转,这些错误会按均匀分布的概率随机分配到0x0000-0x0FFF这个区域中。下面给出单块内存区域注错的具体代码示例:
Total_Num=BER*(0x0FFF-0x0000+1)
For i in range(0, Total_Num)
index=random(0x0FFF, 0x0000, Distribution)
bit_flip(index, Fault_Model)
行1通过BER和内存块的范围得到故障数量;行2,迭代执行注错;行3,根据分配算法和内存块范围随机得到一个地址;行4,根据上面得到的地址和故障模型,对指定单元注入对应的错误。
S3038:修改通知变量。
S3039:恢复应用运行。
如上所述,用户可以自由设置环境参数,通过注错拟合不同区域的内存误码率、错误模型和可靠性的关系。
本领域技术人员还应当理解,结合本文的实施例描述的各种说明性的逻辑框、模块、电路和算法步骤均可以实现成电子硬件、计算机软件或其组合。为了清楚地说明硬件和软件之间的可交换性,上面对各种说明性的部件、框、模块、电路和步骤均围绕其功能进行了一般地描述。至于这种功能是实现成硬件还是实现成软件,取决于特定的应用和对整个系统所施加的设计约束条件。熟练的技术人员可以针对每个特定应用,以变通的方式实现所描述的功能,但是,这种实现决策不应解释为背离本公开的保护范围。
Claims (6)
1.一种微处理器内存可靠性测试方法,其特征在于,包括如下步骤:
S1:对待注错的应用源码插入注错辅助函数和标志变量;
S2:将可注错的应用源码烧录至目标发开版;
S3:调用Python注错脚本,对程序进行内存注错。
2.根据权利要求1所述的一种微处理器内存可靠性测试方法,其特征在于,还包括:S4:解析注错结果,输出内存的软错误率评估报告。
3.根据权利要求2所述的一种微处理器内存可靠性测试方法,其特征在于,所述步骤S3的过程包括:
S301:生成注错任务列表;
S302:提取所述注错任务列表中的任务;
S303:执行注错任务;
S304:单次注错任务执行完毕,保存注错结果;
S305:判断所述注错任务列表中是否还有新任务,若有新任务,则转入步骤S302,否则,转入步骤S306;
S306:汇总并将结果导出至文件,结束脚本任务。
4.根据权利要求3所述的一种微处理器内存可靠性测试方法,其特征在于,所述步骤S303的过程包括:
S3031:挂起应用;
S3032:读取测试配置信息;
S3033:选择错误模型;
S3034:选择内存区域;
S3035:选择错误分配算法;
S3036:生成错误列表;
S3037:注入错误;
S3038:修改通知变量;
S3039:恢复应用运行。
5.根据权利要求4所述的一种微处理器内存可靠性测试方法,其特征在于,所述步骤S3032中读取的测试配置信息包括:注错模型、误码率、注错区域及错误分配算法;所述测试配置信息存放于JSON文件中。
6.根据权利要求5所述的一种微处理器内存可靠性测试方法,其特征在于,所述步骤S3033-步骤S3035,Python注错脚本根据测试配置信息随机生成错误列表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111054608.9A CN113704040A (zh) | 2021-09-09 | 2021-09-09 | 一种微处理器内存可靠性测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111054608.9A CN113704040A (zh) | 2021-09-09 | 2021-09-09 | 一种微处理器内存可靠性测试方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113704040A true CN113704040A (zh) | 2021-11-26 |
Family
ID=78659550
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111054608.9A Withdrawn CN113704040A (zh) | 2021-09-09 | 2021-09-09 | 一种微处理器内存可靠性测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113704040A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115329699A (zh) * | 2022-10-17 | 2022-11-11 | 北京紫光青藤微系统有限公司 | 用于Flash仿真模型的注错方法、装置及系统 |
-
2021
- 2021-09-09 CN CN202111054608.9A patent/CN113704040A/zh not_active Withdrawn
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115329699A (zh) * | 2022-10-17 | 2022-11-11 | 北京紫光青藤微系统有限公司 | 用于Flash仿真模型的注错方法、装置及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Hari et al. | SASSIFI: An architecture-level fault injection tool for GPU application resilience evaluation | |
US20080229176A1 (en) | Method for fast ecc memory testing by software including ecc check byte | |
US8225142B2 (en) | Method and system for tracepoint-based fault diagnosis and recovery | |
CN108710551B (zh) | 基于sparc处理器单粒子翻转故障注入的测试方法及系统 | |
US20190250210A1 (en) | System Architecture Method and Apparatus for Adaptive Hardware Fault Detection with Hardware Metrics Subsystem | |
CN103415840A (zh) | 跨硬件层和软件层的错误管理 | |
CN101853200A (zh) | 一种高效动态软件漏洞挖掘方法 | |
CN103617120A (zh) | 一种单元测试方法和装置 | |
JP2015130170A (ja) | ハードウェア故障を実行アプリケーションに注入する方法を可能にする方法及びコンピューティングシステム | |
JPH10207728A (ja) | 反復試験イベント生成ハードウエアを有するコンピュータシステムのプロセッサ−メモリバスインターフェース | |
US20030226062A1 (en) | System and method for testing response to asynchronous system errors | |
US6457145B1 (en) | Fault detection in digital system | |
US6647511B1 (en) | Reconfigurable datapath for processor debug functions | |
CN113704040A (zh) | 一种微处理器内存可靠性测试方法 | |
US20120060064A1 (en) | Soft error verification in hardware designs | |
CN116795728B (zh) | 一种基于uvm的多核缓存一致性验证模组及方法 | |
US7356804B2 (en) | Language integrated unit testing | |
McIntyre et al. | Trustworthy computing in a multi-core system using distributed scheduling | |
US20070150866A1 (en) | Displaying parameters associated with call statements | |
US10990728B1 (en) | Functional built-in self-test architecture in an emulation system | |
Kranzlmüller et al. | NOPE: A nondeterministic program evaluator | |
Guan et al. | Chaser: An enhanced fault injection tool for tracing soft errors in mpi applications | |
CN100359485C (zh) | 嵌入式系统的测试装置及测试方法 | |
Montrucchio et al. | Fault injection in the process descriptor of a Unix-based operating system | |
Carreira et al. | Assessing the effects of communication faults on parallel applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20211126 |