一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于IO劫持的磁盘测试方法、装置、设备及介质与流程

2021-08-06 18:27:00 来源:中国专利 TAG:磁盘 测试 劫持 介质 装置
一种基于IO劫持的磁盘测试方法、装置、设备及介质与流程

本发明涉及磁盘测试设计领域,尤其是涉及一种基于io劫持的磁盘测试方法、装置、设备及介质。



背景技术:

随着大数据、云计算、高性能应用大量兴起,分布式存储系统已越来越多地应用于后端存储,而存储设备(如磁盘)在使用一段时间后,会出现各种情况的慢盘,比如磁盘本身的出现坏扇区进行重映射后导致的慢盘,或者磁盘温度过高导致的慢盘,一般会有慢盘检测的特性去检测出慢盘并剔除集群,避免因某个慢盘导致的端板效应影响客户的使用。

因慢盘在实验室很较难出现,如何准确模拟慢盘,测试慢盘检测的特性,成了必须要面对的问题。

现有技术中,一种方式是基于内核fault-injection(故障注入)架构的注入,但是需要重新编译内核,使用不灵活且不能模拟慢盘;另一种方式是使用systemtap(内核诊断工具)注入慢盘,但是需要提前安装内核的debug包(调试包)且模拟的时延并不准确,不利于提高磁盘测试中慢盘检测的可用性和准确性,且降低了测试的效率。



技术实现要素:

本发明为了解决现有技术中存在的问题,创新提出了一种基于io劫持的磁盘测试方法、装置、设备及介质,不仅提高磁盘测试中慢盘检测的可用性和准确性,而且降低了测试的效率。

本发明第一方面提供了一种基于io劫持的磁盘测试方法,包括:

在操作系统内核中的scsi子系统中注入io故障;

获取scsi子系统中注入io故障的sas卡的物理地址;

根据注入io故障的sas卡的物理地址,确定第一磁盘的地址,其中,第一磁盘为注入io故障的sas卡对应的待劫持磁盘;

通过加载内核,判断待处理的命令是否是对应于第一磁盘的读写操作,如果是对应于第一磁盘的读写操作,对第一磁盘的读写操作进行io劫持操作,并对第一磁盘的读写操作注入io时延,进行磁盘的慢盘测试;如果不是对应于第一磁盘的读写操作,则直接将第一磁盘的非读写操作发送至第一磁盘或将第二磁盘的全部操作发送到对应第二磁盘,其中,第二磁盘为注入io故障的sas卡对应的待劫持磁盘以外的其他磁盘。

可选地,通过加载内核之前,判断待处理的命令是否是对应于确定注入io故障的sas卡对应的磁盘的读写操作还包括:

对注入io故障的sas卡设置自旋锁;

获取注入io故障的sas卡的第一队列处理函数指针,其中,第一队列处理函数指针用于将注入io故障的sas卡执行队列中的第一磁盘对应的非读写操作命令直接指向至第一磁盘,或将注入io故障的sas卡执行队列中的第二磁盘对应的全部操作命令直接指向至第二磁盘;

将注入io故障的sas卡的队列处理指针指向第二队列处理函数指针,第二队列处理函数指针用于将注入io故障的sas卡的第一磁盘对应的读写操作命令进行io劫持操作后,指向至第一磁盘;

对注入io故障的sas卡解除自旋锁。

进一步地,还包括:保存注入io故障的sas卡的第一队列处理函数指针。

可选地,如果是对应于第一磁盘的读写操作,对第一磁盘的读写操作进行io劫持操作,并对第一磁盘的读写操作注入io时延,并进行磁盘的慢盘测试;如果不是对应于第一磁盘的读写操作,则直接将第一磁盘的非读写操作发送至第一磁盘或将第二磁盘的全部操作发送到对应第二磁盘具体是:

如果待处理的操作命令中的磁盘物理地址对应于第一磁盘的物理地址且操作命令为读写操作,对第一磁盘的读写操作进行io劫持操作,并对第一磁盘的读写操作注入预设io时延,调用第二队列处理函数指针将已劫持的第一磁盘对应的读写操作发送至第一磁盘;

如果待处理的操作命令中的磁盘物理地址对应于第一磁盘的物理地址,但操作命令为非读写操作,则调用第一队列处理函数指针直接将第一磁盘对应的非读写操作发送到对应第一磁盘;

如果待处理的操作命令中的磁盘物理地址对应于第二磁盘的物理地址,则调用第一队列处理函数指针直接将第二磁盘对应的全部操作发送到对应第二磁盘。

进一步地,所述预设时延的时间单位为毫秒级。

可选地,进行io劫持操作之后还包括:针对劫持的io操作进行解除。

进一步地,针对劫持的io操作进行解除具体是:

对scsi子系统中注入io故障的sas卡设置自旋锁,把scsi子系统中注入io故障的sas卡的第二队列处理函数指针修改为第一队列处理函数指针,解除自旋锁。

本发明第二方面提供了一种基于io劫持的磁盘测试装置,包括:

注入模块,在操作系统内核中的scsi子系统中注入io故障;

第一获取模块,获取scsi子系统中注入io故障的sas卡的物理地址;

确定模块,根据注入io故障的sas卡的物理地址,确定注入io故障的sas卡对应的磁盘的地址;

判断劫持模块,通过加载内核,判断待处理的命令是否是对应于第一磁盘的读写操作,如果是对应于第一磁盘的读写操作,对第一磁盘的读写操作进行io劫持操作,并对第一磁盘的读写操作注入io时延,进行磁盘的慢盘测试;如果不是对应于第一磁盘的读写操作,则直接将第一磁盘的非读写操作发送至第一磁盘或将第二磁盘的全部操作发送到对应第二磁盘,其中,第二磁盘为注入io故障的sas卡对应的待劫持磁盘以外的其他磁盘。

本发明第三方面提供了一种电子设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现如本发明第一方面所述的基于io劫持的磁盘测试方法的步骤。

本发明第四方面提供了一种计算机可读存储介质,其特征是,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如本发明第一方面所述的基于io劫持的磁盘测试方法的步骤。

本发明采用的技术方案包括以下技术效果:

1、本发明通过在内核中的scsi层(scsi子系统中)劫持io处理函数,对读写操作进行延迟,达到模拟慢盘的目的,不仅提高磁盘测试中慢盘检测的可用性和准确性,而且降低了测试的效率。

2、本发明技术方案加强了对磁盘中的慢盘检测功能及各种异常处理机制的评测,能在研发过程中及时发现,节约上市维护的成本。

3、本发明技术方案通过保存注入io故障的sas卡的第一队列处理函数指针,用于第一磁盘对应的第二队列处理函数指针执行完进行io劫持操作后进行还原至第一队列处理函数指针,提高了磁盘中的慢盘检测的适用性。

4、本发明技术方案在对io劫持操作时,仅针对第一磁盘的读写操作,对于第一磁盘的非读写操作以及sas卡对应的第二磁盘,并不影响,最大程度降低了io劫持操作对于存储系统的影响。

应当理解的是以上的一般描述以及后文的细节描述仅是示例性和解释性的,并不能限制本发明。

附图说明

为了更清楚说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单介绍,显而易见的,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明方案中实施例一方法的一流程示意图;

图2为本发明方案中实施例一方法中内核中scsi层的结构示意图;

图3为本发明方案中实施例一方法中的另一流程示意图;

图4为本发明方案中实施例一方法中的另一流程示意图;

图5为本发明方案中实施例二装置的一结构示意图;

图6为本发明方案中实施例二装置的另一结构示意图;

图7为本发明方案中实施例二装置的另一结构示意图;

图8为本发明方案中实施例三设备的结构示意图。

具体实施方式

为能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。

实施例一

如图1-图2所示,本发明提供了一种基于io劫持的磁盘测试方法,包括:

s101,在操作系统内核中的scsi子系统中注入io故障;

s102,获取scsi子系统中注入io故障的sas卡的物理地址;

s103,根据注入io故障的sas卡的物理地址,确定第一磁盘的地址,其中,第一磁盘为注入io故障的sas卡对应的待劫持磁盘;

s108,通过加载内核,判断待处理的命令是否是对应于第一磁盘的读写操作,如果判断结果为是,则执行步骤s109;如果判断结果为否,则执行步骤s110;

s109,对第一磁盘的读写操作进行io劫持操作,并对第一磁盘的读写操作注入io时延,进行磁盘的慢盘测试;

s110,则直接将第一磁盘的非读写操作发送至第一磁盘或将第二磁盘的全部操作发送到对应第二磁盘,其中,第二磁盘为注入io故障的sas卡对应的待劫持磁盘以外的其他磁盘。

在步骤s101中,在操作系统内核中的scsi(smallcomputersysteminterface,小型计算机系统接口)子系统(或scsi层)中注入io(input/output,输入/输出)故障,scsi子系统位于操作系统的内核态中,除了scsi子系统,还包括blocklayer(块设备层或块设备子系统)、驱动层(或介质层,即磁盘),scsi子系统位于操作系统的内核态的中间部分,上端是blocklayer,下端是介质(即磁盘),本发明实施例中注入io故障的即为scsi子系统。

在步骤s102中,步骤s101中的针对scsi子系统中注入io故障,即对scsi子系统中的sas卡(磁盘阵列卡)注入io故障,服务器主机中往往包括多个sas卡,故获取scsi子系统中注入io故障的sas卡的物理地址(id,identitydocument,即host_no),以便定位scsi子系统中注入io故障的sas卡。

在步骤s103中,根据注入io故障的sas卡的物理地址,确定第一磁盘的地址,其中,第一磁盘为注入io故障的sas卡对应的待劫持磁盘,因为一个sas卡往往对应多个磁盘,本发明实施例中仅对注入io故障的sas卡对应的一个磁盘(注入io故障的sas卡确定后预先设定注入io故障的sas卡所对应的其中一个磁盘为待劫持磁盘)进行io劫持操作,以便进行磁盘的慢盘模拟测试,所以确定第一磁盘的地址(device_id),即注入io故障的sas卡对应的待劫持磁盘的地址。

在步骤s108-s110中,具体地:

首先通过加载内核,判断待处理的操作命令是否是对应于第一磁盘的读写操作。待处理的操作命令包含有操作对应的磁盘物理地址以及操作类型,具体地,磁盘物理地址判断方式可以是:待处理的操作命令包含有操作对应的磁盘物理地址与步骤s103的确定的第一磁盘的物理地址进行比对,如果一致,待处理的操作命令对应于第一磁盘,如果不一致,则待处理的操作命令对应于第二磁盘;操作类型的判断方式可以是操作命令的中某一操作类型判断字节来判断,例如,在sas协议中规定,根据操作命令的第一个字节判断操作类型,如果第一个字节对应于读操作,待处理的操作命令即为读操作类型,如果对应于写操作,待处理的操作命令即为写操作类型,如果对应于非读写操作,则待处理的操作命令即为非读写操作类型。

例如,读操作类型可以是:read_6(500g以内)、read_10(1t)、read_12(2t)、read_16(8t),代表读操作命令,6、8、10、12代表读操作的命令长度,里面包含读的开始扇区和读取的扇区个数,命令长度越大,寻址越大,可支持更大容量磁盘。写操作类型可以是:write_6(500g以内)、write_10(1t)、write_12(2t)、write_16(8t),代表写操作命令,6、8、10、12代表写操作的命令长度,里面包含写的开始扇区和写入的扇区个数,命令长度越大,寻址越大,可支持更大容量磁盘。

如果待处理的操作命令中的磁盘物理地址对应于第一磁盘的物理地址且操作命令为读写操作,对第一磁盘的读写操作进行io劫持操作,并对第一磁盘的读写操作注入预设io时延,将已劫持的第一磁盘对应的读写操作发送至第一磁盘;

如果待处理的操作命令中的磁盘物理地址对应于第一磁盘的物理地址,但操作命令为非读写操作,则直接将第一磁盘对应的非读写操作发送到对应第一磁盘;

如果待处理的操作命令中的磁盘物理地址对应于第二磁盘的物理地址,则直接将第二磁盘对应的全部操作发送到对应第二磁盘。

进一步地,如图3所示,在步骤s108之前,还包括:

s104,对注入io故障的sas卡设置自旋锁;

s105,获取注入io故障的sas卡的第一队列处理函数指针,其中,第一队列处理函数指针用于将注入io故障的sas卡执行队列中的第一磁盘对应的非读写操作命令直接指向至第一磁盘,或将注入io故障的sas卡执行队列中的第二磁盘对应的全部操作命令直接指向至第二磁盘;

s106,将注入io故障的sas卡的队列处理指针指向第二队列处理函数指针,第二队列处理函数指针用于将注入io故障的sas卡的第一磁盘对应的读写操作命令进行io劫持操作后,指向至第一磁盘;

s107,对注入io故障的sas卡解除自旋锁。

在步骤s104-s107中,对注入io故障的sas卡设置自旋锁(spin_lock);第一队列处理函数指针(save_qcmd)用于将注入io故障的sas卡执行队列中的第一磁盘对应的非读写操作命令直接指向至第一磁盘,或将注入io故障的sas卡执行队列中的第二磁盘对应的全部操作命令直接指向至第二磁盘;将注入io故障的sas卡的队列处理指针(queuecommand)指向第二队列处理函数指针(hijack_qcmd),第二队列处理函数指针用于将注入io故障的sas卡的第一磁盘对应的读写操作命令进行io劫持操作后,指向至第一磁盘。

本发明实施例中通过对注入io故障的sas卡设置自旋锁的方式,加锁后,其它设备或系统就不能使用对应的注入io故障的sas卡了,不仅提高磁盘测试中慢盘检测的可用性和准确性,而且,进一步地降低了io劫持操作对于存储系统的影响。

优选地,还可以保存注入io故障的sas卡的第一队列处理函数指针,以便用于第一磁盘对应的第二队列处理函数指针执行完进行io劫持操作后进行还原至第一队列处理函数指针。

对应地,步骤s108-s110,如果待处理的操作命令中的磁盘物理地址对应于第一磁盘的物理地址且操作命令为读写操作,对第一磁盘的读写操作进行io劫持操作,并对第一磁盘的读写操作注入预设io时延,调用第二队列处理函数指针将已劫持的第一磁盘对应的读写操作发送至第一磁盘;

如果待处理的操作命令中的磁盘物理地址对应于第一磁盘的物理地址,但操作命令为非读写操作,则调用第一队列处理函数指针直接将第一磁盘对应的非读写操作发送到对应第一磁盘;

如果待处理的操作命令中的磁盘物理地址对应于第二磁盘的物理地址,则调用第一队列处理函数指针直接将第二磁盘对应的全部操作发送到对应第二磁盘。

进一步地,预设时延(delay_time参数)的时间单位可以为毫秒级,例如10ms-1000ms等,可以根据实际情况进行灵活调整,本发明在此不做限制。

进一步地,如图4所示,本发明技术方案还包括:

s111,针对劫持的io操作进行解除。

在步骤s111中,针对劫持的io操作进行解除具体是:

对scsi子系统中注入io故障的sas卡设置自旋锁,把scsi子系统中注入io故障的sas卡的第二队列处理函数指针修改为第一队列处理函数指针,解除自旋锁。

优选地,可以将把scsi子系统中注入io故障的sas卡的第二队列处理函数指针重置为已保存的第一队列处理函数指针,而不需要重新再设置第一队列函数指针,进一步地提高磁盘的慢盘测试的效率。

需要说明的是,本发明技术方案中,获取操作均可以通过lsscsi命令实现,也可以通过其他方式实现,本发明在此不做限制;本发明技术方案可以通过软件或硬件编程的方式实现,编程的思路与本发明技术方案的步骤相对应,也可以通过其他的方式实现,本发明在此不做限制。

本发明通过在内核中的scsi层(scsi子系统中)劫持io处理函数,对读写操作进行延迟,达到模拟慢盘的目的,不仅提高磁盘测试中慢盘检测的可用性和准确性,而且降低了测试的效率。

本发明技术方案加强了对磁盘中的慢盘检测功能及各种异常处理机制的评测,能在研发过程中及时发现,节约上市维护的成本。

本发明技术方案通过保存注入io故障的sas卡的第一队列处理函数指针,用于第一磁盘对应的第二队列处理函数指针执行完进行io劫持操作后进行还原至第一队列处理函数指针,提高了磁盘中的慢盘检测的适用性。

本发明技术方案在对io劫持操作时,仅针对第一磁盘的读写操作,对于第一磁盘的非读写操作以及sas卡对应的第二磁盘,并不影响,最大程度降低了io劫持操作对于存储系统的影响。

实施例二

如图5所示,本发明技术方案还提供了一种基于io劫持的磁盘测试装置,包括:

注入模块201,在操作系统内核中的scsi子系统中注入io故障;

第一获取模块202,获取scsi子系统中注入io故障的sas卡的物理地址;

确定模块203,根据注入io故障的sas卡的物理地址,确定注入io故障的sas卡对应的磁盘的地址;

判断劫持模块204,通过加载内核,判断待处理的命令是否是对应于第一磁盘的读写操作,如果是对应于第一磁盘的读写操作,对第一磁盘的读写操作进行io劫持操作,并对第一磁盘的读写操作注入io时延,进行磁盘的慢盘测试;如果不是对应于第一磁盘的读写操作,则直接将读写操作发送到对应第二磁盘,其中,第二磁盘为注入io故障的sas卡对应的待劫持磁盘以外的其他磁盘。

在注入模块201中,在操作系统内核中的scsi(smallcomputersysteminterface,小型计算机系统接口)子系统(scsi层)中注入io(input/output,输入/输出)故障,scsi子系统位于操作系统的内核态中,除了scsi子系统,还包括blocklayer(块设备层或块设备子系统)、驱动层(或介质层,即磁盘),scsi子系统位于操作系统的内核态的中间部分,上端是blocklayer,下端是介质(即磁盘),本发明实施例中注入io故障的即为scsi子系统。

在第一获取模块202中,注入模块201中的针对scsi子系统中注入io故障,即对scsi子系统中的sas卡(磁盘阵列卡)注入io故障,服务器主机中往往包括多个sas卡,故获取scsi子系统中注入io故障的sas卡的物理地址(id,identitydocument,即host_no),以便定位scsi子系统中注入io故障的sas卡。

在确定模块203中,根据注入io故障的sas卡的物理地址,确定第一磁盘的地址,其中,第一磁盘为注入io故障的sas卡对应的待劫持磁盘,因为一个sas卡往往对应多个磁盘,本发明实施例中仅对注入io故障的sas卡对应的一个磁盘进行io劫持操作,以便进行磁盘的慢盘模拟测试,所以确定第一磁盘的地址(device_id),即注入io故障的sas卡对应的待劫持磁盘的地址。

在判断劫持模块204中,具体地:

首先通过加载内核,判断待处理的操作命令是否是对应于第一磁盘的读写操作。待处理的操作命令包含有操作对应的磁盘物理地址以及操作类型,具体地,磁盘物理地址判断方式可以是:待处理的操作命令包含有操作对应的磁盘物理地址与步骤s103的确定的第一磁盘的物理地址进行比对,如果一致,待处理的操作命令对应于第一磁盘,如果不一致,则待处理的操作命令对应于第二磁盘;操作类型的判断方式可以是操作命令的中某一操作类型判断字节来判断,例如,在sas协议中规定,根据操作命令的第一个字节判断操作类型,如果第一个字节对应于读操作,待处理的操作命令即为读操作类型,如果对应于写操作,待处理的操作命令即为写操作类型,如果对应于非读写操作,则待处理的操作命令即为非读写操作类型。

例如,读操作类型可以是:read_6(500g以内)、read_10(1t)、read_12(2t)、read_16(8t),代表读操作命令,6、8、10、12代表读操作的命令长度,里面包含读的开始扇区和读取的扇区个数,命令长度越大,寻址越大,可支持更大容量磁盘。写操作类型可以是:write_6(500g以内)、write_10(1t)、write_12(2t)、write_16(8t),代表写操作命令,6、8、10、12代表写操作的命令长度,里面包含写的开始扇区和写入的扇区个数,命令长度越大,寻址越大,可支持更大容量磁盘。

如果待处理的操作命令中的磁盘物理地址对应于第一磁盘的物理地址且操作命令为读写操作,对第一磁盘的读写操作进行io劫持操作,并对第一磁盘的读写操作注入预设io时延,将已劫持的第一磁盘对应的读写操作发送至第一磁盘;

如果待处理的操作命令中的磁盘物理地址对应于第一磁盘的物理地址,但操作命令为非读写操作,则直接将第一磁盘对应的非读写操作发送到对应第一磁盘;

如果待处理的操作命令中的磁盘物理地址对应于第二磁盘的物理地址,则直接将第二磁盘对应的全部操作发送到对应第二磁盘。

进一步地,如图6所示,还包括:

设置模块205,对注入io故障的sas卡设置自旋锁;

第二获取模块206,获取注入io故障的sas卡的第一队列处理函数指针,其中,第一队列处理函数指针用于将注入io故障的sas卡执行队列中的第一磁盘对应的非读写操作命令直接指向至第一磁盘,或将注入io故障的sas卡执行队列中的第二磁盘对应的全部操作命令直接指向至第二磁盘;

指向模块207,将注入io故障的sas卡的队列处理指针指向第二队列处理函数指针,第二队列处理函数指针用于将注入io故障的sas卡的第一磁盘对应的读写操作命令进行io劫持操作后,指向至第一磁盘;

第一解除模块208,对注入io故障的sas卡解除自旋锁。

在步骤设置模块205-第一解除模块208中,对注入io故障的sas卡设置自旋锁(spin_lock);第一队列处理函数指针(save_qcmd)用于将注入io故障的sas卡执行队列中的第一磁盘对应的非读写操作命令直接指向至第一磁盘,或将注入io故障的sas卡执行队列中的第二磁盘对应的全部操作命令直接指向至第二磁盘;将注入io故障的sas卡的队列处理指针(queuecommand)指向第二队列处理函数指针(hijack_qcmd),第二队列处理函数指针用于将注入io故障的sas卡的第一磁盘对应的读写操作命令进行io劫持操作后,指向至第一磁盘。

本发明实施例中通过对注入io故障的sas卡设置自旋锁的方式,加锁后,其它设备或系统就不能使用对应的注入io故障的sas卡了,不仅提高磁盘测试中慢盘检测的可用性和准确性,而且,进一步地降低了io劫持操作对于存储系统的影响。

优选地,还可以保存注入io故障的sas卡的第一队列处理函数指针,以便用于第一磁盘对应的第二队列处理函数指针执行完进行io劫持操作后进行还原至第一队列处理函数指针。

对应地,判断劫持模块204中,如果待处理的操作命令中的磁盘物理地址对应于第一磁盘的物理地址且操作命令为读写操作,对第一磁盘的读写操作进行io劫持操作,并对第一磁盘的读写操作注入预设io时延,调用第二队列处理函数指针将已劫持的第一磁盘对应的读写操作发送至第一磁盘;

如果待处理的操作命令中的磁盘物理地址对应于第一磁盘的物理地址,但操作命令为非读写操作,则调用第一队列处理函数指针直接将第一磁盘对应的非读写操作发送到对应第一磁盘;

如果待处理的操作命令中的磁盘物理地址对应于第二磁盘的物理地址,则调用第一队列处理函数指针直接将第二磁盘对应的全部操作发送到对应第二磁盘。

进一步地,预设时延的时间单位可以为毫秒级,可以根据实际情况进行灵活调整,本发明在此不做限制。

进一步地,如图7所示,本发明技术方案还包括:

第二解除模块209,针对劫持的io操作进行解除。

在第二解除模块209中,具体执行步骤是:

对scsi子系统中注入io故障的sas卡设置自旋锁,把scsi子系统中注入io故障的sas卡的第二队列处理函数指针修改为第一队列处理函数指针,解除自旋锁。

优选地,可以将把scsi子系统中注入io故障的sas卡的第二队列处理函数指针重置为已保存的第一队列处理函数指针,而不需要重新再设置第一队列函数指针,进一步地提高磁盘的慢盘测试的效率。

本发明通过在内核中的scsi层(scsi子系统中)劫持io处理函数,对读写操作进行延迟,达到模拟慢盘的目的,不仅提高磁盘测试中慢盘检测的可用性和准确性,而且降低了测试的效率。

本发明技术方案加强了对磁盘中的慢盘检测功能及各种异常处理机制的评测,能在研发过程中及时发现,节约上市维护的成本。

本发明技术方案通过保存注入io故障的sas卡的第一队列处理函数指针,用于第一磁盘对应的第二队列处理函数指针执行完进行io劫持操作后进行还原至第一队列处理函数指针,提高了磁盘中的慢盘检测的适用性。

本发明技术方案在对io劫持操作时,仅针对第一磁盘的读写操作,对于第一磁盘的非读写操作以及sas卡对应的第二磁盘,并不影响,最大程度降低了io劫持操作对于存储系统的影响。

实施例三

如图8所示,本发明技术方案还提供了一种电子设备,包括:存储器301,用于存储计算机程序;处理器302,用于执行所述计算机程序时实现如实施例所述的基于io劫持的磁盘测试方法的步骤。

本申请实施例中的存储器301用于存储各种类型的数据以支持电子设备的操作。这些数据的示例包括:用于在电子设备上操作的任何计算机程序。可以理解,存储器301可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(rom,readonlymemory)、可编程只读存储器(prom,programmableread-onlymemory)、可擦除可编程只读存储器(eprom,erasableprogrammableread-onlymemory)、电可擦除可编程只读存储器(eeprom,electricallyerasableprogrammableread-onlymemory)、磁性随机存取存储器(fram,ferromagneticrandomaccessmemory)、快闪存储器(flashmemory)、磁表面存储器、光盘、或只读光盘(cd-rom,compactdiscread-onlymemory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(ram,randomaccessmemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(sram,staticrandomaccessmemory)、同步静态随机存取存储器(ssram,synchronousstaticrandomaccessmemory)、动态随机存取存储器(dram,dynamicrandomaccessmemory)、同步动态随机存取存储器(sdram,synchronousdynamicrandomaccessmemory)、双倍数据速率同步动态随机存取存储器(ddrsdram,doubledataratesynchronousdynamicrandomaccessmemory)、增强型同步动态随机存取存储器(esdram,enhancedsynchronousdynamicrandomaccessmemory)、同步连接动态随机存取存储器(sldram,synclinkdynamicrandomaccessmemory)、直接内存总线随机存取存储器(drram,directrambusrandomaccessmemory)。本申请实施例描述的存储器301旨在包括但不限于这些和任意其它适合类型的存储器。上述本申请实施例揭示的方法可以应用于处理器302中,或者由处理器302实现。处理器302可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器302中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器302可以是通用处理器、dsp(digitalsignalprocessing,即指能够实现数字信号处理技术的芯片),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器302可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器301,处理器302读取存储器301中的程序,结合其硬件完成前述方法的步骤。处理器302执行所述程序时实现本申请实施例的各个方法中的相应流程,为了简洁,在此不再赘述。

本发明通过在内核中的scsi层(scsi子系统中)劫持io处理函数,对读写操作进行延迟,达到模拟慢盘的目的,不仅提高磁盘测试中慢盘检测的可用性和准确性,而且降低了测试的效率。

本发明技术方案加强了对磁盘中的慢盘检测功能及各种异常处理机制的评测,能在研发过程中及时发现,节约上市维护的成本。

本发明技术方案通过保存注入io故障的sas卡的第一队列处理函数指针,用于第一磁盘对应的第二队列处理函数指针执行完进行io劫持操作后进行还原至第一队列处理函数指针,提高了磁盘中的慢盘检测的适用性。

本发明技术方案在对io劫持操作时,仅针对第一磁盘的读写操作,对于第一磁盘的非读写操作以及sas卡对应的第二磁盘,并不影响,最大程度降低了io劫持操作对于存储系统的影响。

实施例四

本发明技术方案还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如实施例一所述的基于io劫持的磁盘测试方法的步骤。

例如包括存储计算机程序的存储器301,上述计算机程序可由处理器302执行,以完成前述方法所述步骤。计算机可读存储介质可以是fram、rom、prom、eprom、eeprom、flashmemory、磁表面存储器、光盘、或cd-rom等存储器。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台电子设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

本发明通过在内核中的scsi层(scsi子系统中)劫持io处理函数,对读写操作进行延迟,达到模拟慢盘的目的,不仅提高磁盘测试中慢盘检测的可用性和准确性,而且降低了测试的效率。

本发明技术方案加强了对磁盘中的慢盘检测功能及各种异常处理机制的评测,能在研发过程中及时发现,节约上市维护的成本。

本发明技术方案通过保存注入io故障的sas卡的第一队列处理函数指针,用于第一磁盘对应的第二队列处理函数指针执行完进行io劫持操作后进行还原至第一队列处理函数指针,提高了磁盘中的慢盘检测的适用性。

本发明技术方案在对io劫持操作时,仅针对第一磁盘的读写操作,对于第一磁盘的非读写操作以及sas卡对应的第二磁盘,并不影响,最大程度降低了io劫持操作对于存储系统的影响。

上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。

再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜