CN113223598B - 一种基于io劫持的磁盘测试方法、装置、设备及介质 - Google Patents
一种基于io劫持的磁盘测试方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN113223598B CN113223598B CN202110600772.9A CN202110600772A CN113223598B CN 113223598 B CN113223598 B CN 113223598B CN 202110600772 A CN202110600772 A CN 202110600772A CN 113223598 B CN113223598 B CN 113223598B
- Authority
- CN
- China
- Prior art keywords
- disk
- read
- fault
- write operation
- injected
- 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.)
- Active
Links
- 238000012360 testing method Methods 0.000 title claims abstract description 46
- 238000012545 processing Methods 0.000 claims description 95
- 230000006870 function Effects 0.000 claims description 88
- 238000000034 method Methods 0.000 claims description 27
- 238000004590 computer program Methods 0.000 claims description 13
- 238000010998 test method Methods 0.000 claims description 8
- 238000002347 injection Methods 0.000 claims description 6
- 239000007924 injection Substances 0.000 claims description 6
- 238000001514 detection method Methods 0.000 description 21
- 230000005291 magnetic effect Effects 0.000 description 8
- 230000001360 synchronised effect Effects 0.000 description 8
- 239000000243 solution Substances 0.000 description 6
- 230000002159 abnormal effect Effects 0.000 description 5
- 230000003111 delayed effect Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 238000011156 evaluation Methods 0.000 description 5
- 238000012423 maintenance Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 238000012827 research and development Methods 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000001627 detrimental effect Effects 0.000 description 1
- 230000005294 ferromagnetic effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/1201—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details comprising I/O circuitry
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C29/08—Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
- G11C29/12—Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
- G11C29/18—Address generation devices; Devices for accessing memories, e.g. details of addressing circuits
Landscapes
- Test And Diagnosis Of Digital Computers (AREA)
Abstract
本发明提出了一种基于IO劫持的磁盘测试方法,包括:在操作系统内核中的scsi子系统中注入IO故障;获取scsi子系统中注入IO故障的SAS卡的物理地址;根据注入IO故障的SAS卡的物理地址,确定第一磁盘的地址;如果是对应于第一磁盘的读写操作,对第一磁盘的读写操作进行IO劫持操作,并对第一磁盘的读写操作注入IO时延,进行磁盘的慢盘测试;如果不是对应于第一磁盘的读写操作,则直接将第一磁盘的非读写操作发送至第一磁盘或将第二磁盘的全部操作发送到对应第二磁盘,本发明还提出了一种基于IO劫持的磁盘测试装置、设备及介质,不仅提高磁盘测试中慢盘检测的可用性和准确性,而且降低了测试的效率。
Description
技术领域
本发明涉及磁盘测试设计领域,尤其是涉及一种基于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(Small Computer System Interface,小型计算机系统接口)子系统(或scsi层)中注入IO(input/output,输入/输出)故障,scsi子系统位于操作系统的内核态中,除了scsi子系统,还包括block layer(块设备层或块设备子系统)、驱动层(或介质层,即磁盘),scsi子系统位于操作系统的内核态的中间部分,上端是block layer,下端是介质(即磁盘),本发明实施例中注入IO故障的即为scsi子系统。
在步骤S102中,步骤S101中的针对scsi子系统中注入IO故障,即对scsi子系统中的SAS卡(磁盘阵列卡)注入IO故障,服务器主机中往往包括多个SAS卡,故获取scsi子系统中注入IO故障的SAS卡的物理地址(ID,Identity document,即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(Small Computer SystemInterface,小型计算机系统接口)子系统(scsi层)中注入IO(input/output,输入/输出)故障,scsi子系统位于操作系统的内核态中,除了scsi子系统,还包括block layer(块设备层或块设备子系统)、驱动层(或介质层,即磁盘),scsi子系统位于操作系统的内核态的中间部分,上端是block layer,下端是介质(即磁盘),本发明实施例中注入IO故障的即为scsi子系统。
在第一获取模块202中,注入模块201中的针对scsi子系统中注入IO故障,即对scsi子系统中的SAS卡(磁盘阵列卡)注入IO故障,服务器主机中往往包括多个SAS卡,故获取scsi子系统中注入IO故障的SAS卡的物理地址(ID,Identity document,即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,Read Only Memory)、可编程只读存储器(PROM,Programmable Read-OnlyMemory)、可擦除可编程只读存储器(EPROM,ErasableProgrammable Read-Only Memory)、电可擦除可编程只读存储器(EEPROM,ElectricallyErasable Programmable Read-Only Memory)、磁性随机存取存储器(FRAM,ferromagneticrandom access memory)、快闪存储器(FlashMemory)、磁表面存储器、光盘、或只读光盘(CD-ROM,Compact Disc Read-Only Memory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(RAM,RandomAccessMemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(SRAM,Static RandomAccess Memory)、同步静态随机存取存储器(SSRAM,Synchronous StaticRandomAccess Memory)、动态随机存取存储器(DRAM,Dynamic RandomAccess Memory)、同步动态随机存取存储器(SDRAM,SynchronousDynamic RandomAccess Memory)、双倍数据速率同步动态随机存取存储器(DDRSDRAM,Double Data Rate Synchronous Dynamic RandomAccess Memory)、增强型同步动态随机存取存储器(ESDRAM,Enhanced SynchronousDynamic Random Access Memory)、同步连接动态随机存取存储器(SLDRAM,SyncLinkDynamic RandomAccess Memory)、直接内存总线随机存取存储器(DRRAM,Direct RambusRandom Access Memory)。本申请实施例描述的存储器301旨在包括但不限于这些和任意其它适合类型的存储器。上述本申请实施例揭示的方法可以应用于处理器302中,或者由处理器302实现。处理器302可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器302中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器302可以是通用处理器、DSP(Digital Signal Processing,即指能够实现数字信号处理技术的芯片),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器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劫持操作对于存储系统的影响。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
Claims (9)
1.一种基于IO劫持的磁盘测试方法,其特征是,包括:
在操作系统内核中的scsi子系统中注入IO故障;
获取scsi子系统中注入IO故障的SAS卡的物理地址;
根据注入IO故障的SAS卡的物理地址,确定第一磁盘的地址,其中,第一磁盘为注入IO故障的SAS卡对应的待劫持磁盘;
对注入IO故障的SAS卡设置自旋锁;
获取注入IO故障的SAS卡的第一队列处理函数指针,其中,第一队列处理函数指针用于将注入IO故障的SAS卡执行队列中的第一磁盘对应的非读写操作命令直接指向至第一磁盘,或将注入IO故障的SAS卡执行队列中的第二磁盘对应的全部操作命令直接指向至第二磁盘;
将注入IO故障的SAS卡的队列处理指针指向第二队列处理函数指针,第二队列处理函数指针用于将注入IO故障的SAS卡的第一磁盘对应的读写操作命令进行IO劫持操作后,指向至第一磁盘;
对注入IO故障的SAS卡解除自旋锁;
通过加载内核,判断待处理的命令是否是对应于第一磁盘的读写操作,如果是对应于第一磁盘的读写操作,对第一磁盘的读写操作进行IO劫持操作,并对第一磁盘的读写操作注入IO时延,进行磁盘的慢盘测试;如果不是对应于第一磁盘的读写操作,则直接将第一磁盘的非读写操作发送至第一磁盘或将第二磁盘的全部操作发送到对应第二磁盘,其中,第二磁盘为注入IO故障的SAS卡对应的待劫持磁盘以外的其他磁盘。
2.根据权利要求1所述的基于IO劫持的磁盘测试方法,其特征是,获取注入IO故障的SAS卡的第一队列处理函数指针之后,还包括:保存注入IO故障的SAS卡的第一队列处理函数指针。
3.根据权利要求1所述的基于IO劫持的磁盘测试方法,其特征是,如果是对应于第一磁盘的读写操作,对第一磁盘的读写操作进行IO劫持操作,并对第一磁盘的读写操作注入IO时延,并进行磁盘的慢盘测试;如果不是对应于第一磁盘的读写操作,则直接将第一磁盘的非读写操作发送至第一磁盘或将第二磁盘的全部操作发送到对应第二磁盘具体是:
如果待处理的操作命令中的磁盘物理地址对应于第一磁盘的物理地址且操作命令为读写操作,对第一磁盘的读写操作进行IO劫持操作,并对第一磁盘的读写操作注入预设IO时延,调用第二队列处理函数指针将已劫持的第一磁盘对应的读写操作发送至第一磁盘;
如果待处理的操作命令中的磁盘物理地址对应于第一磁盘的物理地址,但操作命令为非读写操作,则调用第一队列处理函数指针直接将第一磁盘对应的非读写操作发送到对应第一磁盘;
如果待处理的操作命令中的磁盘物理地址对应于第二磁盘的物理地址,则调用第一队列处理函数指针直接将第二磁盘对应的全部操作发送到对应第二磁盘。
4.根据权利要求3所述的基于IO劫持的磁盘测试方法,其特征是,所述预设IO时延的时间单位为毫秒级。
5.根据权利要求1-4任一所述的基于IO劫持的磁盘测试方法,其特征是,进行IO劫持操作之后还包括:针对劫持的IO操作进行解除。
6.根据权利要求5所述的基于IO劫持的磁盘测试方法,其特征是,针对劫持的IO操作进行解除具体是:
对scsi子系统中注入IO故障的SAS卡设置自旋锁,把scsi子系统中注入IO故障的SAS卡的第二队列处理函数指针修改为第一队列处理函数指针,解除自旋锁。
7.一种基于IO劫持的磁盘测试装置,其特征是,包括:
注入模块,在操作系统内核中的scsi子系统中注入IO故障;
第一获取模块,获取scsi子系统中注入IO故障的SAS卡的物理地址;
确定模块,根据注入IO故障的SAS卡的物理地址,确定注入IO故障的SAS卡对应的磁盘的地址;
设置模块,对注入IO故障的SAS卡设置自旋锁;
第二获取模块,获取注入IO故障的SAS卡的第一队列处理函数指针,其中,第一队列处理函数指针用于将注入IO故障的SAS卡执行队列中的第一磁盘对应的非读写操作命令直接指向至第一磁盘,或将注入IO故障的SAS卡执行队列中的第二磁盘对应的全部操作命令直接指向至第二磁盘;
指向模块,将注入IO故障的SAS卡的队列处理指针指向第二队列处理函数指针,第二队列处理函数指针用于将注入IO故障的SAS卡的第一磁盘对应的读写操作命令进行IO劫持操作后,指向至第一磁盘;
第一解除模块,对注入IO故障的SAS卡解除自旋锁;
判断劫持模块,通过加载内核,判断待处理的命令是否是对应于第一磁盘的读写操作,如果是对应于第一磁盘的读写操作,对第一磁盘的读写操作进行IO劫持操作,并对第一磁盘的读写操作注入IO时延,进行磁盘的慢盘测试;如果不是对应于第一磁盘的读写操作,则直接将第一磁盘的非读写操作发送至第一磁盘或将第二磁盘的全部操作发送到对应第二磁盘,其中,第二磁盘为注入IO故障的SAS卡对应的待劫持磁盘以外的其他磁盘。
8.一种电子设备,其特征是,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现如权利要求1至6任一项所述的基于IO劫持的磁盘测试方法的步骤。
9.一种计算机可读存储介质,其特征是,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述的基于IO劫持的磁盘测试方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110600772.9A CN113223598B (zh) | 2021-05-31 | 2021-05-31 | 一种基于io劫持的磁盘测试方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110600772.9A CN113223598B (zh) | 2021-05-31 | 2021-05-31 | 一种基于io劫持的磁盘测试方法、装置、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113223598A CN113223598A (zh) | 2021-08-06 |
CN113223598B true CN113223598B (zh) | 2024-02-23 |
Family
ID=77081864
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110600772.9A Active CN113223598B (zh) | 2021-05-31 | 2021-05-31 | 一种基于io劫持的磁盘测试方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113223598B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1545030A (zh) * | 2003-11-14 | 2004-11-10 | 清华大学 | 基于磁盘特征的数据分布动态映射的方法 |
US10185639B1 (en) * | 2015-05-08 | 2019-01-22 | American Megatrends, Inc. | Systems and methods for performing failover in storage system with dual storage controllers |
CN109684140A (zh) * | 2018-12-11 | 2019-04-26 | 广东浪潮大数据研究有限公司 | 一种慢盘检测方法、装置、设备及计算机可读存储介质 |
WO2021082011A1 (zh) * | 2019-11-01 | 2021-05-06 | 华为技术有限公司 | 应用于磁盘阵列系统的数据重构方法、装置及计算设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9588690B2 (en) * | 2014-11-19 | 2017-03-07 | International Business Machines Corporation | Performance-based grouping of storage devices in a storage system |
KR20200137244A (ko) * | 2019-05-29 | 2020-12-09 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것의 동작방법 |
-
2021
- 2021-05-31 CN CN202110600772.9A patent/CN113223598B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1545030A (zh) * | 2003-11-14 | 2004-11-10 | 清华大学 | 基于磁盘特征的数据分布动态映射的方法 |
US10185639B1 (en) * | 2015-05-08 | 2019-01-22 | American Megatrends, Inc. | Systems and methods for performing failover in storage system with dual storage controllers |
CN109684140A (zh) * | 2018-12-11 | 2019-04-26 | 广东浪潮大数据研究有限公司 | 一种慢盘检测方法、装置、设备及计算机可读存储介质 |
WO2021082011A1 (zh) * | 2019-11-01 | 2021-05-06 | 华为技术有限公司 | 应用于磁盘阵列系统的数据重构方法、装置及计算设备 |
Non-Patent Citations (3)
Title |
---|
Novell网使用中常见故障分析与排除;齐学梅;微型机与应用(09);全文 * |
基于内核层文件补丁的自启动方法研究;韦伟;罗森林;;信息网络安全(11);全文 * |
测试海量存储系统可用性的故障注入法;潘清;庄泽南;王霄军;张晓清;;计算机工程与应用(36);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113223598A (zh) | 2021-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112331253B (zh) | 一种芯片的测试方法、终端和存储介质 | |
US5875195A (en) | Method and apparatus for error injection techniques | |
CN111145826B (zh) | 一种存储器内建自测试方法、电路及计算机存储介质 | |
CN110992992A (zh) | 一种硬盘测试方法、设备以及存储介质 | |
US20210373810A1 (en) | Data storage device and operating method thereof | |
CN113035259A (zh) | Dram测试方法、装置、可读存储介质及电子设备 | |
CN110083305B (zh) | 存储器系统及其操作方法 | |
CN113223598B (zh) | 一种基于io劫持的磁盘测试方法、装置、设备及介质 | |
US10734079B1 (en) | Sub block mode read scrub design for non-volatile memory | |
CN115602242B (zh) | 一种存储装置及其测试方法 | |
CN113470723B (zh) | 读重试测试方法、装置、可读存储介质及电子设备 | |
US8176250B2 (en) | System and method for testing a memory | |
US10922023B2 (en) | Method for accessing code SRAM and electronic device | |
US20130124925A1 (en) | Method and apparatus for checking a main memory of a processor | |
CN113760682A (zh) | 一种内存信号质量评估方法、系统及装置 | |
CN110399645B (zh) | 基于固态硬盘的fpga原型验证加速系统及实现方法 | |
CN113806149B (zh) | 内存读写测试方法、装置以及存储介质 | |
CN117236277B (zh) | 用于检查寄存器的方法及装置、电子设备 | |
CN117393032B (zh) | 一种存储装置及其数据处理方法 | |
CN113744789B (zh) | 一种在研发阶段测试ssd稳定性的方法、系统、设备和介质 | |
US11650898B2 (en) | On-die logic analyzer | |
CN116434814A (zh) | 一种仿真测试中闪存地址管理方法、装置、设备及介质 | |
CN112684981B (zh) | 固态硬盘读操作记录方法、系统、装置及可读存储介质 | |
CN114253786A (zh) | 提高固态硬盘功能测试效率的方法、装置、设备及介质 | |
CN115373922A (zh) | 一种不同厂商smr硬盘自动测试装置、方法、终端及介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |