【技术实现步骤摘要】
针对持久内存并发程序的崩溃一致性故障检测方法及系统
[0001]本专利技术属于计算机数据存储领域,更具体地,涉及一种针对持久内存并发程序的崩溃一致性故障检测方法及系统。
技术介绍
[0002]和传统的内存技术DRAM不同,新型的持久内存技术具有高密度和接近于零的泄漏电流,有望能大幅提升存储系统的性能。英特尔在2019年发布了第一代持久内存产品,其单条持久内存容量可以达到512GB,每个CPU最多可以支持6条持久内存,总容量可达3TB,每GB的成本要低于大容量的DRAM。然而,在持久内存平台的异步内存刷新(Asynchronous DRAM Refresh,ADR)机制下,片上缓存的易失性(数据掉电后丢失)和持久内存中的非易失性要求其存储的数据在重启后能恢复到整体一致的状态,称之为崩溃一致性。持久内存的崩溃一致性需要数据按一定的顺序持久化到持久内存中,这要求程序按顺序正确地对数据进行持久化,因此这种编程模式很容易出错。
[0003]现有的针对持久内存的故障检测工具通常是检测串行程序中的持久化操作,没有考虑并发程序中多线 ...
【技术保护点】
【技术特征摘要】
1.一种针对持久内存并发程序的崩溃一致性故障检测方法,其特征在于,包括以下步骤:S1、通过编译器对待测持久内存并发程序中的访存指令以及持久内存相关接口进行插桩,得到可执行程序;插桩代码用于崩溃一致性故障检测;S2、按照所述待测持久内存并发程序的输入规则,生成多个输入参数作为所述可执行程序的输入,构成输入参数集;S3、分别获取所述输入参数集中输入参数下,所述可执行程序中各访存指令所访问的持久内存地址所对应的访存模式、以及通过所述插桩代码控制所述可执行程序产生先写后读的访存时序后所述可执行程序中各访存指令所访问的持久内存地址所对应的访存模式;并在上述过程中,通过所述插桩代码判断所得各访存模式中是否存在基于未持久化的数据写持久内存的模式,若存在,则判定为一致性故障;其中,所述持久内存地址所对应的访存模式的形式为<Ix,Iy,Px,Py>,Ix和Iy表示访问该持久内存地址的连续两条指令,Px表示执行指令Ix后数据的持久化状态,Py表示执行指令Iy后数据的持久化状态;所述基于未持久化的数据写持久内存的模式为:当Ix为写指令,Px为执行指令Ix后的数据处于未持久化状态,Iy为读指令时,将与执行指令Iy获取的数据有数据依赖的任意数据写到持久内存的操作。2.根据权利要求1所述的崩溃一致性故障检测方法,其特征在于,所述步骤S2包括以下步骤:S21、按照所述待测持久内存并发程序的输入规则,随机生成输入参数,记为seed;S22、将seed输入到所述可执行程序中,开始运行所述可执行程序,并通过所述插桩代码记录运行过程中执行的代码分支;S23、判断所述待测持久内存并发程序中的所有代码分支是否均已执行,若是,则操作结束;否则,转至步骤S24;S24、若在当前输入的seed下执行了新的代码分支,则将当前seed保存到所述输入参数集中,并转至步骤S22;否则,通过修改seed中的参数值、增加seed中的参数、删除seed中的参数以及调整seed中的参数顺序中的任意一种方法来更新seed,并转至步骤S22中。3.根据权利要求2所述的崩溃一致性故障检测方法,其特征在于,通过修改seed中的参数值来更新seed的方法包括:将seed中不同操作的参数值改为相同的值,以增加应用中访问相同数据的访存模式。4.根据权利要求2所述的崩溃一致性故障检测方法,其特征在于,当更新seed后仍然没有出现新的代码分支,则向seed中增加大量的插入数据的操作,其中插入操作的参数值不同,以触发应用的扩充容量机制并执行相关的代码分支。5.根据权利要求1所述的崩溃一致性故障检测方法,其特征在于,所述步骤S3包括:对所述输入参数集中的各输入参数,分别执行以下步骤:S31、在所述输入参数集中的输入参数input下,运行所述可执行程序,得到当前运行环境下所述可执行程序中各访存指令所访问的持久内存地址所对应的访存模式,并通过所述插桩代码判断各访存模式中是否存在所述基于未持久化的数据写持久内存的模式,若存在,则判定为一致性故障,并保存可执行程序中出现所述基于未持久化的数据写持久内存的模式时的函数调用栈以及对应的持久内存映射文件;
S32、选择所述可执行程序中各访存指令所访问的持久内存地址中访问次数大于预设访问次数的持久内存地址,得到所选持久内存地址集;S33、对所述所选持久内存地址集中的所选持久内存地址,分别执行以下操作:对所选...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。