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

基于程序异构关系图的SDC错误检测方法

文献发布时间:2024-04-18 19:58:26


基于程序异构关系图的SDC错误检测方法

技术领域

本发明属于SDC错误检测加固技术领域,特别是一种基于程序异构关系图的SDC错误检测方法。

背景技术

随着芯片集成度和复杂度的指数级增长,系统的稳定性受到越来越大的挑战。在生活中,电磁或粒子辐射、安全攻击、硬件故障和软件错误等原因都可能导致计算机系统发生各种故障。其中,最具危害性的故障之一是错误的输出,称为静默数据损坏(SDC)。SDC具有复杂的传播机制,会随着程序的运行,传播到系统各个组件,最终可能导致重大的安全事故。因此,建立准确高效的SDC检测机制对于保证系统可靠性和安全性至关重要。

传统的基于冗余的SDC错误检测方法会导致巨大的性能开销,因此,近年来的工作主要偏向于识别程序中容易发生SDC的关键指令,进行针对性冗余,从而在保证检测率的同时,降低开销。最常见的是基于硬件故障注入的方法,它通过模拟硬件故障产生SDC错误,通过统计分析识别易损指令,然后进行冗余。Schirmeier等人提出了一个基于硬件故障注入的智能框架(FAIL:Anopenandversatilefault-injectionframeworkfortheassessmentofsoftware-implementedhardwarefaulttolerance)。为了更有效地压缩故障空间,提高硬件故障注入效率,它在没有故障模拟的情况下切割硬件故障,或识别出类似的故障。Li等人采用了硬件故障结果预测技术(SmartInjector:Exploitingintelligentfault injectionforSDCrateanalysis),减少了单个硬件故障模拟的时间。近年来,随着人工智能的兴起,基于机器学习的SDC错误检测技术应运而生,通过识别脆弱指令在保证检测率的同时,降低硬件故障注入的开销。Zheng等人采用分类回归树来预测SDC倾向性(VulnerabilityanalysisofinstructionsforSDC-causingerrordetection);Ma等人[19]通过构建程序指令的汇编级异质图并利用图注意网络来预测指令错误(GATPS:An attention-basedgraphneuralnetworkforpredictingSDC-causinginstructions)。

虽然现有研究工作中已有不少关于SDC错误检测的工作,但都存在一定的局限性。基于故障注入的错误检测方法随着程序大小和动态指令数的增加,硬件故障注入的成本呈指数级增长。基于人工智能的方法几乎都没有显式地考虑程序结构信息,程序表征不完整,无法充分挖掘SDC的损伤机理,其检测精度难以得到保证。

发明内容

本发明的目的在于针对上述现有技术存在的问题,提供一种基于程序异构关系图的SDC错误检测方法,实现更完整的程序信息挖掘,显式地考虑程序结构信息,以多关系异构图对程序进行表征,进一步探索SDC错误损伤机理,以此提高指令脆弱性预测精度,在保证检测率的同时,降低时空开销。此外,本发明具有良好的可扩展性,适用于各种程序的检测加固。

实现本发明目的的技术解决方案为:一方面,提供了一种基于程序异构关系图的SDC错误检测方法,所述方法包括以下步骤:

步骤1,对开源编译器LLVM进行二次开发,获取程序的结构信息和非结构信息;

步骤2,基于故障注入工具LLFI在寄存器或内存级别进行单粒子翻转故障模拟,挖掘程序各指令属性和SDC错误率;

步骤3,从步骤1和2获取的程序信息中挖掘指令节点和关系边,之后基于深度图谱库DGL构建程序异构关系图G;

步骤4,搭建多关系图注意力网络HPRG,预测SDC脆弱指令,并挖掘影响SDC错误率的关键关系;

步骤5,设计容错机制,对步骤4预测的SDC脆弱指令和关键关系进行分析,识别SDC关键指令,进行针对性冗余加固,实现SDC错误检测。

进一步地,步骤1中所述程序的结构信息,包括程序控制流、程序数据流、指令调用和数据存取;程序的非结构信息,包括指令特征提取,所述指令特征包括指令名称、类别、所属基本块、所属函数。

进一步地,步骤2中基于LLFI进行单粒子翻转故障模拟,其构建的故障模型FI表示为:

FI=(I

式中,I

进一步地,步骤3中所述从步骤1和2获取的程序信息中挖掘指令节点和关系边,之后基于深度图谱库DGL构建程序异构关系图G,具体包括:

步骤3-1,基于LLVM指令集,从程序结构信息中提取出各指令间关系,表示为一个三元组:

e

式中,e

形成指令关系库E

步骤3-2,根据步骤1得到的程序的非结构信息和步骤2得到的故障信息,提取指令特征集,表示为一个8元组:

F=(Bit,Pre,Suc,Nop,Type,BB,Fun,E_rate)

式中,Bit表示指令宽度、Pre表示指令前驱数、Suc表示指令后继数、Type表示指令类型、BB表示指令所属基本块、Fun表示指令所属函数、E_rate表示指令SDC错误率;

对F中各元素进行编码和标准化,得到标准特征集f:

式中,L表示指令特征总数,

步骤3-3,根据指令关系库E

进一步地,步骤4中构建的多关系图注意力网络HPRG具体为:

步骤4-1,输入为异构关系图G和标准特征集f,基于多头图注意力机制,首先,对于程序指令i∈[1,N],计算其邻域节点j∈N

其中,N

进一步,对注意力权重

式中,i∈[1,N],j∈[1,N],r∈[1,R],R为指令关系总数,

对权重系数进行加权求和,得到程序指令i在关系r下第k个注意力头的嵌入

式中,W

步骤4-2,对程序指令i在各关系r下的各注意力头k的嵌入

通过分类器得到程序指令i的SDC脆弱性y'

y'

式中,W

对于程序异构关系图G,多关系图注意力网络的损失函数L为:

进一步地,步骤5所述设计容错机制,对步骤4预测的SDC脆弱指令和关键关系进行分析,识别SDC关键指令,进行针对性冗余加固,实现SDC错误检测,具体包括:

步骤5-1,根据步骤4中多关系图注意力网络得到的指令脆弱性Y={y'

步骤5-2,根据步骤4中的多关系图注意力网络,获取每种关系下各注意力头的各边的注意力权重

式中,V

针对权重最大关系下的指令,选择权重大于阈值TV的边作为关键边,将该关键边的两端指令作为关键指令,形成关键指令集E

式中,

进一步,对E

RD=E

步骤5-3,对所述冗余指令集RD中的指令进行冗余加固,并插入比较指令cmp,用于比较原始指令与冗余指令,若相同则表示程序运行正常,继续运行程序;否则跳转到错误处理模块,进行异常中断。

进一步地,步骤5-1中根据可配置冗余粒度g∈(0,1),从D

另一方面,提供了一种基于程序异构关系图的SDC错误检测系统,所述系统包括顺次执行的:

第一模块,用于对开源编译器LLVM进行二次开发,获取程序的结构信息和非结构信息;

第二模块,用于基于故障注入工具LLFI在寄存器或内存级别进行单粒子翻转故障模拟,挖掘程序各指令属性和SDC错误率;

第三模块,用于从第一模块和第二模块获取的程序信息中挖掘指令节点和关系边,之后基于深度图谱库DGL构建程序异构关系图G;

第四模块,用于搭建多关系图注意力网络HPRG,预测SDC脆弱指令,并挖掘影响SDC错误率的关键关系;

第五模块,用于设计容错机制,对预测的SDC脆弱指令和关键关系进行分析,识别SDC关键指令,进行针对性冗余加固,实现SDC错误检测。

本发明与现有技术相比,其显著优点为:1)显式地考虑程序结构信息,创新地构建程序异构关系图,对程序表征信息进行更全面挖掘;2)构建了多关系图注意力网络,挖掘指令间空间相关性,可以更加准确地识别脆弱指令和关键关系,具有更高的SDC错误检测率和更低的时空开销,并且可以灵活适用于各种程序;3)对脆弱指令和关键关系进行分析,设计了程序容错机制,对程序进行粒度可配置冗余,从而达到有效高精度检测SDC错误的目的。

下面结合附图对本发明作进一步详细描述。

附图说明

图1为本发明基于程序异构关系图的SDC错误检测方法的流程图。

图2为一个实施例中算法误差对比图,其中图2中的(a)为本发明与四种变体在Precision上的性能对比,图2中的(b)为本发明与四种变体在Recall上的性能对比。

图3为一个实施例中算法误差对比图,其中图3中的(a)为本发明与四种变体在MAP上的性能对比,图3中的(b)为本发明与四种变体在NDCG上的性能对比。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

需要说明,若本发明实施例中有涉及方向性指示(诸如上、下、左、右、前、后……),则该方向性指示仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。

另外,若本发明实施例中有涉及“第一”、“第二”等的描述,则该“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。

在一个实施例中,提供了一种基于程序异构关系图的SDC错误检测方法,所述方法包括以下步骤:

步骤1,对开源编译器LLVM进行二次开发,获取程序的结构信息和非结构信息;

这里,所述程序的结构信息,包括程序控制流、程序数据流、指令调用和数据存取;程序的非结构信息,包括指令特征提取,所述指令特征包括指令名称、类别、所属基本块、所属函数。

步骤2,基于故障注入工具LLFI在寄存器或内存级别进行单粒子翻转故障模拟,挖掘程序各指令属性(操作码、指令宽度)和SDC错误率;

这里,构建的故障模型FI表示为:

FI=(I

式中,I

步骤3,从步骤1和2获取的程序信息中挖掘指令节点和关系边,之后基于深度图谱库DGL构建程序异构关系图G;具体包括:

步骤3-1,基于LLVM指令集,从程序结构信息中提取出各指令间关系,表示为一个三元组:

e

式中,e

形成指令关系库E

步骤3-2,根据步骤1得到的程序的非结构信息和步骤2得到的故障信息,提取指令特征集,表示为一个8元组:

F=(Bit,Pre,Suc,Nop,Type,BB,Fun,E_rate)

式中,Bit表示指令宽度、Pre表示指令前驱数、Suc表示指令后继数、Type表示指令类型、BB表示指令所属基本块、Fun表示指令所属函数、E_rate表示指令SDC错误率;

对f中各元素进行编码和标准化,得到标准特征集f:

式中,L表示指令特征总数,

步骤3-3,根据指令关系库E

步骤4,搭建多关系图注意力网络HPRG,预测SDC脆弱指令,并挖掘影响SDC错误率的关键关系;

这里,构建的多关系图注意力网络HPRG具体为:

步骤4-1,输入为异构关系图G和标准特征集f,基于多头图注意力机制,首先,对于程序指令i∈[1,N],计算其邻域节点j∈N

其中,N

进一步,对注意力权重

式中,i∈[1,N],j∈[1,N],r∈[1,R],R为指令关系总数,

对权重系数进行加权求和,得到程序指令i在关系r下第k个注意力头的嵌入

式中,W

步骤4-2,对程序指令i在各关系r下的各注意力头k的嵌入

通过分类器得到程序指令i的SDC脆弱性y'

y'

式中,W

对于程序异构关系图G,多关系图注意力网络的损失函数L为:

步骤5,设计容错机制,对步骤4预测的SDC脆弱指令和关键关系进行分析,识别SDC关键指令,进行针对性冗余加固,实现SDC错误检测。具体包括:

步骤5-1,根据步骤4中多关系图注意力网络得到的指令脆弱性Y={y'

步骤5-2,根据步骤4中的多关系图注意力网络,获取每种关系下各注意力头的各边的注意力权重

式中,V

针对权重最大关系下的指令,选择权重大于阈值TV的边作为关键边,将该关键边的两端指令作为关键指令,形成关键指令集E

式中,

进一步,对E

RD=E

步骤5-3,对所述冗余指令集RD中的指令进行冗余加固,并插入比较指令cmp,用于比较原始指令与冗余指令,若相同则表示程序运行正常,继续运行程序;否则跳转到错误处理模块,进行异常中断。最终,得到具有检测能力的加固程序。

在一个实施例中,提供了一种基于程序异构关系图的SDC错误检测系统,所述系统包括顺次执行的:

第一模块,用于对开源编译器LLVM进行二次开发,获取程序的结构信息和非结构信息;

第二模块,用于基于故障注入工具LLFI在寄存器或内存级别进行单粒子翻转故障模拟,挖掘程序各指令属性和SDC错误率;

第三模块,用于从第一模块和第二模块获取的程序信息中挖掘指令节点和关系边,之后基于深度图谱库DGL构建程序异构关系图G;

第四模块,用于搭建多关系图注意力网络HPRG,预测SDC脆弱指令,并挖掘影响SDC错误率的关键关系;

第五模块,用于设计容错机制,对预测的SDC脆弱指令和关键关系进行分析,识别SDC关键指令,进行针对性冗余加固,实现SDC错误检测。

关于基于程序异构关系图的SDC错误检测系统的具体限定可以参见上文中对于基于程序异构关系图的SDC错误检测方法的限定,在此不再赘述。上述基于程序异构关系图的SDC错误检测系统中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

作为一种具体示例,在其中一个实施例中,对本发明进行进一步验证说明。

本实施例使用Mibench基准测试集中的程序进行实验。程序包括快速排序(Qsort)、最短路径算法(Dijkstra)、整数平方根求解(Isqrt)、广度优先搜索(BFS)、弧度转角度(Rad2deg)和数据管理系统(Data)。将程序中的70%指令作为训练集,10%指令作为验证集,其余指令作为测试集。学习率设置为0.01,多关系图注意力网络的隐藏层维度设置为3,注意力头数设置为2,使用Adam和交叉熵损失对模型进行优化,通过反向传播使其最小化。使用准确率(Accurary)、精确率(Precision)和F1-score评价模型的预测精度。使用检测率以及时空开销评价方法的性能。

本实施例选择目前流行的不同SDC错误检测方法作为对比方法来进行对比实验:基于具有径向基函数核的支持向量机的SDC错误检测方法(IPAS)、基于改进SVM的SDC错误预测模型(PVInsiden)、基于改进LightGBM的SDC错误检测方法(SDIFI)、基于汇编关系图的指令错误预测模型(GATPS)、高频路径指令冗余方法(Hotpath)、基于深度回归森林的SDC错误检测加固方法(DFRMR)。本发明的方法记作RGED。不同方法在Mibench程序上的预测结果如下表1所示、不同方法在Mibench程序上的检测结果如下表2所示。

表1不同方法在各程序上的性能比较(Accuracy、Precision、F1-score)

表2不同方法在Mibench程序上的检测结果

由表1可以看出本发明提出的方法(RGED)在SDC脆弱性预测方面表现更好。从表中可以看出:RGED的平均准确率为0.845,比PVInsiden高12.7%;平均精确率为0.821,比SDIFI高10.2%;平均F1-score为0.843,比SDIFI高19.6%。GATPS虽然在Dijkstra上取得了更高的准确率,但是其F1-score最低,说明该方法对负样本的拟合度更好,而这是没有意义的,无法对脆弱性高的指令进行预测。SDIFI在Qsort上取得了更高的F1-socre,但在准确率和精确率都低于本发明的方法。本发明显式考虑了结构信息以及指令之间的多关系,对程序进行了更为充分的表征,从而可以更好的挖掘静动态信息,对SDC错误进行更好的拟合,提高了模型预测的准确率。

由表2可以看出本发明提出的方法(RGED)在SDC错误检测方面也表现更好。从表中可以看出,Hotpath、DFRMR、SDIFI和HPRG的平均检测率分别为83.1%、84.8%、87.0%和87.4%,本发明的方法具有更优越的性能。Hotpath基于传统的程序分析方法对程序执行高频路径上的指令进行冗余,并没有考虑路径外的SDC脆弱指令,因此检测能力最低。而DFRMR和SDIFI通过人工智能的方法去识别程序中的SDC脆弱性指令,可以比较充分挖掘程序中的关键指令。本发明的方法首次显式考虑了程序的结构信息,构建了程序多关系异构图,并通过图注意力机制去挖掘指令的空间相关性,综合考虑了程序中的关键指令和关键关系,因此具有较高的SDC错误检测能力。对于Rad2deg和Qsort程序,本发明的方法与SDIFI具有差不多的检测能力,可能是由于关键关系中的脆弱指令与SDIFI预测的脆弱指令是相同的。

为了探究指令间不同关系对于SDC错误的影响,进行了消融实验。除了考虑程序异构关系图的完整模型外,设置了本发明的四种变体:(1)HPRG_D表示不考虑数据流关系;(2)HPRG_C表示不考虑控制流关系;(3)HPRG_I表示不考虑调用关系;(4)HPRG_A表示不考虑存取关系。此外,以Data程序为例,将其边注意力权重进行了可视化,从而探索影响SDC错误的关键关系。最终的实验结果如图2所示。

由图2可以看出,(1)HPRG_D的效果降低的最为明显,这表明数据流对SDC错误的影响最大,因为当发生SDC错误时,指令运算后的结果往往是随着数据流向后传播,从而导致程序运算结果出错。同时,HPRG_A的影响也很大,因为存取指令与内存或寄存器高度相关,当错误数据存储在寄存器或内存中时,或者当内存或寄存器中发生错误并加载到某条指令中时,它或多或少会对程序的后续操作产生影响。而控制流和调用关系,是基本的程序流关系,如果它们中的任何一个缺失,则程序的结构信息不完整,从而影响方法的错误推理能力,并使模型的预测效果变差。(2)数据流的平均权重系数是最大的,这表明数据流是影响SDC错误关键关系,这与消融实验的结果是相似的。同理,存取关系也是如此。而控制流因为是基本的程序流向,包含一些数据关系,因此对SDC错误具有一定的影响。此外,各种关系中边权重都有着较大的差异,这说明本发明的模型可以学习到不同关系下指令的SDC错误影响因子,从而可以探索出关键关系。

为了验证本发明的有效性,不仅仅需要考虑检测率,还需要在性能开销方面进行评估。因此,在检测加固实验中,统计了各种方法加固后的程序大小,从而分析出各方法的空间开销,并统计了程序运行时间。将源程序的空间开销和运行时间定为1,加固程序的空间开销和运行时间定义为与源程序的比值。最终的实验结果如图3所示。

由图3可以看出,(1)Hotpath、DFRMR、SDIFI和HPRG的平均空间开销分别为1.216、1.192、1.186和1.177,本发明具有更低的空间开销。(2)Hotpath、DFRMR、SDIFI和HPRG的平均时间开销分别为1.556、1.532、1.509和1.502,本发明具有更低的时间开销。综上,本发明在保证检测率的同时,具有更低的时空开销。这是因为基于程序异构关系图的SDC错误检测方法可以更加充分的挖掘指令间的空间相关性,探究影响SDC错误的关键关系,可以更加准确地识别SDC脆弱指令,对关键关系进行分析,可以减少冗余指令和比较指令数量。

综上,本发明提出的基于程序异构关系图的SDC错误检测方法,充分挖掘程序信息,并通过程序异构关系图进行表征,提高了SDC错误推理能力。同时,构建多关系图注意力网络,学习更精准的指令表征,并探索影响SDC错误的关键关系。最后,使用一种基于指令脆弱性和关键关系的程序容错机制,实现高效SDC错误检测加固。通过与其他相关算法对比,进一步验证了本发明可以更准确地预测指令脆弱性,更高效地对SDC错误进行检测加固。

以上显示和描述了本发明的基本原理、主要特征及优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。

相关技术
  • 一种GPGPU程序SDC错误检测方法及装置
  • 一种基于指令脆弱性分析的SDC错误检测方法
技术分类

06120116486207