本发明专利技术公开了一种闪存文件系统可靠性分析方法,涉及计算机及电子信息技术领域,包括以下步骤:S1:选择工作负载和错误类型;S2:运行所述工作负载,将读写请求发送到闪存文件系统,并按所述错误类型在闪存文件系统和操作系统的MTD驱动模块之间进行错误植入;S3:植入错误后,将模拟错误的运行结果返回给闪存文件系统,若闪存文件系统未检测出模拟的错误或检测出后未修复,则认为闪存文件系统不可靠。本发明专利技术能够对闪存文件系统的读、写和擦除功能进行详细的测试,实现了对闪存文件系统的可靠性分析。
【技术实现步骤摘要】
本专利技术涉及计算机及电子信息
,特别涉及一种。
技术介绍
随着技术的不断革新,闪存已经越来越多地应用到嵌入式设备中。虽然闪存具有众多优点,但是也存在缺点。最大的缺点是面临着“部分失效”的问题,即在读写闪存的某些区域时可能会发生错误,这些错误可能是暂时性错误,也可能是持久性错误。闪存块的擦除次数是有限的,在1万次至100万次之间,超过这个限制后,闪存单元就变为不可用。研究表明,对于闪存,温度越高,数据保持能力越差;随着写入和擦除次数的增加,闪存的位出错率会明显增大,而且会出现编程和读操作的干扰现象。在实际应用中,闪存硬件控制器具有执行错误纠正码(ECC)的功能,可以纠正部分错误,但如果错误较多,ECC也可能无法全部恢复。因此,闪存是可能会出错的,使用闪存时必须要解决这些问题。应用程序通过文件系统对闪存进行读写。闪存文件系统不仅要完成对闪存的读写和擦除功能,还要有能力应对可能出现的各种错误。目前研究领域还没有对闪存文件系统进行过任何详细的可靠性分析。在文件系统可靠性研究方面,目前研究主要关注于通用文件系统,如Ext3、NTFS、ZFS等,存储介质是磁盘和内存,研究思路是先假设磁盘和内存可能会出错,然后通过错误植入的方法进行分析。正如前文所说,闪存存在部分失效的问题,如果闪存文件系统处理不当,可能造成数据污染或数据丢失,甚至影响系统稳定,因此研究闪存文件系统的可靠性具有重要意义。
技术实现思路
(一)要解决的技术问题本专利技术要解决的技术问题是如何对闪存进行可靠性分析,以尽量避免因闪存失效导致的读写错误。( 二 )技术方案为解决上述技术问题,本专利技术提供了一种,包括以下步骤Sl 选择工作负载和错误类型;S2:运行所述工作负载,将读写请求发送到闪存文件系统,并按所述错误类型在闪存文件系统和操作系统的内存技术设备(memory technology device, MTD)驱动模块之间进行错误植入;S3:植入错误后,将模拟错误的运行结果返回给闪存文件系统,若闪存文件系统未检测出模拟的错误或检测出后未修复,则认为闪存文件系统不可靠。其中,所述步骤S2具体包括测量所述工作负载调用所述MTD驱动模块中测试接口的总次数;针对一个测试接口,随机选择一次进行相应的错误植入。其中,所述错误植入的具体方式为通过在操作系统的用户态调用I/O控制函数,将用户态的错误植入命令传入操作系统内核,触发内核进行错误植入。其中,所述测试接口为闪存文件系统对MTD驱动模块的调用接口,包括nand_ read、nand—write 禾口 nand—erase。其中,所述步骤S3具体包括对于读、写、擦除错误,向上层直接返回-EIO ;对于读污染,采取“比特位翻转”的方式从所述MTD驱动模块中读取数据后,随机选择其中某一位取反,再返回给上层;对比所述工作负载的输出和操作系统中与闪存文件系统有关的日志记录,确定闪存文件系统的可靠性。其中,所述错误类型包括暂时性错误和持久性错误两类,其中每一类都包括四种读错误、读污染、写错误和擦除错误。其中,所述工作负载包括POSIX定义的接口测试样例和闪存文件系统测试模块中的测试样例stress_3。(三)有益效果本专利技术通过在闪存文件系统对MTD驱动模块的调用接口中植入错误,模拟错误的运行结果是否被闪存文件系统检测出并正确处理,从而实现了对闪存的可靠性分析。附图说明图1是本专利技术实施例的一种流程图;图2是实现图1中方法的系统架构图;图3为本专利技术实施例中植入的错误类型。具体实施例方式下面结合附图和实施例,对本专利技术的具体实施方式作进一步详细描述。以下实施例用于说明本专利技术,但不用来限制本专利技术的范围。如图1所示,为本专利技术实施例的流程图,本实施例中以Linux操作系统为例,图2是实现图1方法的系统架构设计图。在Linux内核中编写错误植入模块,植入自定义的错误。设计的错误类型共分为两大类暂时性错误和持久性错误。其中每一类都包括四种读错误、读污染、写错误和擦除错误。这样一共有八种类型的错误,如图3所示。其中暂时性错误是指暂时性发生的、带有随机性的错误,一般只会发生一次,再尝试相同操作时会成功返回;而持久性错误会一直存在。另外,读/写/擦除错误是指当底层设备出现异常,向上层返回-EIO ;读污染是指读出的数据和在闪存上存储的原有数据不一致,即在读取过程中发生了数据“污染”。控制器实现在Linux用户态,主要用于监控整个实验过程。控制器完成的功能主要为选择所要植入的错误类型(共八种)以及测试所用的工作负载,之后通过调用ioctl 函数,将用户态的命令传入Linux内核,触发内核的错误植入模块进行工作。由于实验使用的闪存文件系统没有实现ioctl功能,所以需要在内核中添加相应支持。本实施例的方法包括如下步骤步骤S101,在控制器中选择工作负载,工作负载包括POSIX (Portable Operating System Interface of Unix,ρ )白勺(read>write>rename 和sync)测试样例和闪存文件系统测试模块中的测试样例stress_3。该样例会生成测试文件,并对该文件进行多次读写(read、write)以及截短(truncate)等操作。步骤S102,在控制器设定测试参数,测试参数包括测试的调用接口(指对MTD驱动模块的三个调用接口 nand_read、nand_write和nand_erase中的一个)、错误植入的时机和植入错误的类型(包括上述8种类型)。步骤S103,运行上述工作负载时,接收闪存文件系统的读写请求。步骤S104,在执行读写请求时,在错误植入模块中对相应的调用接口进行计数,若计数达到控制器的指定值,则执行步骤S105,比如有100次对nancLread的调用,那么取 1-100之间的一个随机数(如24),当错误植入模块计数达到M时,进行错误植入。否则执行步骤S106。步骤S105,在相应的调用接口中植入错误,将执行结果返回给闪存文件系统并分析执行结果。针对一个测试接口,错误植入模块随机选择一次进行相应的错误植入,具体通过控制器在操作系统的用户态调用ioctl函数,将用户态的错误植入命令传入操作系统内核的错误植入模块,触发内核的错误植入模块进行错误植入。错误植入后,需要模拟闪存出错的情况,对于读、写、擦除错误,向上层直接返回-EIO ;对于读污染,采取“比特位翻转” 的方式从所述MTD驱动模块中读取数据后,随机选择其中某一位取反,再返回给闪存文件系统。植入的错误是模拟的闪存硬件错误,通过查看工作负载输出和操作系统记录的有关闪存文件系统的日志记录可以发现闪存文件系统的错误检测和修复功能是否能够正确实施,以此来确定闪存文件系统的可靠性。若闪存文件系统在面对闪存失效时,能够正确检测到闪存错误并可以进行恢复,则闪存文件系统可靠,如果发现闪存文件系统没有错误检测与恢复机制(比如不能发现闪存错误、出错返回值被忽略、没有数据备份与出错重试机制等),就说明闪存文件系统可靠性较差。具体来说,在植入错误之后,出现比如死机、工作负载运行中止或结果不正确等异常情况,就说明了文件系统可靠性较差。上述闪存文件系统错误检测方法包括利用冗余机制(如在闪存块中增加校验码,计算checksum,与本文档来自技高网...
【技术保护点】
【技术特征摘要】
【专利技术属性】
技术研发人员:胡事民,郭旭峰,
申请(专利权)人:清华大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。