CN117931555B - 在内核态下模拟scsi设备故障的方法及装置 - Google Patents

在内核态下模拟scsi设备故障的方法及装置 Download PDF

Info

Publication number
CN117931555B
CN117931555B CN202410338822.4A CN202410338822A CN117931555B CN 117931555 B CN117931555 B CN 117931555B CN 202410338822 A CN202410338822 A CN 202410338822A CN 117931555 B CN117931555 B CN 117931555B
Authority
CN
China
Prior art keywords
function
callback function
scsi
target
softirq
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
Application number
CN202410338822.4A
Other languages
English (en)
Other versions
CN117931555A (zh
Inventor
张恒卫
李豪
杨康
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
New H3C Information Technologies Co Ltd
Original Assignee
New H3C Information Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by New H3C Information Technologies Co Ltd filed Critical New H3C Information Technologies Co Ltd
Priority to CN202410338822.4A priority Critical patent/CN117931555B/zh
Publication of CN117931555A publication Critical patent/CN117931555A/zh
Application granted granted Critical
Publication of CN117931555B publication Critical patent/CN117931555B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2205Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
    • G06F11/2221Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test input/output devices or peripheral units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/008Reliability or availability analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2273Test methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请提供在内核态下模拟SCSI设备故障的方法及装置,在本实施例中,无论是模拟目标SCSI设备的I/O任务延时故障,还是模拟目标SCSI设备的I/O错误故障,这都是通过修改对目标SCSI设备操作时调用的回调函数,来修改对目标SCSI设备操作的处理逻辑,来模拟出耦合度较高的故障,而非修改I/O任务的指令本身来在目标SCSI设备中真实发生故障。由于目标SCSI设备中并未发生真实的错误,这避免了在故障模拟过程中对目标SCSI设备的损伤,这实现了在不损害SCSI设备的前提下模拟故障以提高存储***的可靠性的目的。

Description

在内核态下模拟SCSI设备故障的方法及装置
技术领域
本发明涉及计算机技术领域,尤其涉及在内核态下模拟SCSI设备故障的方法及装置。
背景技术
由于小型计算机***接口(SCSI,Small Computer System Interface)具有快速且高效传输的特点,采用SCSI接口的存储设备(记为SCSI设备)被广泛应用于存储***比如分布式存储***。
目前,通过模拟SCSI设备故障的方式来检测存储***对故障的应对能力,以在发现存储***无法应对的模拟故障时,基于该模拟故障的解决方案来提升存储***的故障应对能力。
相关技术中,在SCSI任务下发时通过对指令内容进行修改,以此来实现下发错误SCSI指令导致故障,比如通过修改I/O指令来导致I/O错误。然而,这种方式会导致SCSI设备中真实发生故障,从而导致SCSI设备硬件受损。
发明内容
有鉴于此,本申请提供在内核态下模拟SCSI设备故障的方法及装置,以避免在故障模拟过程中对SCSI设备的损伤。
本申请实施例提供一种在内核态下模拟计算机***接口SCSI设备故障的方法,该方法应用于电子设备,所述电子设备被用于外接至少一个SCSI设备;所述方法包括:
在内核态下获得待进行故障模拟的目标SCSI设备的字符设备文件;
若所述故障模拟为延时故障模拟,则在内核态下基于所述字符设备文件获得用于延时控制的第一初始回调函数,基于所述第一初始回调函数生成第一目标回调函数,所述第一目标回调函数相比所述第一初始回调函数,在内核态下被调用时将所述目标SCSI设备的I/O任务挂起到内核调度任务队列中,并增加对应的延时;
在内核态下基于所述第一目标回调函数将所述目标SCSI设备的I/O任务挂起到内核调度任务队列中,并为所述I/O任务增加对应的延时,在任一I/O任务对应的延时结束时,在内核态下调用该I/O任务,以模拟目标SCSI设备的I/O任务延时故障;
若所述故障模拟为I/O错误故障模拟,则在内核态下基于所述字符设备文件获得用于I/O控制的第二初始回调函数,基于所述第二初始回调函数生成第二目标回调函数,所述第二目标回调函数相比所述第二初始回调函数,在内核态下被调用时枚举所述目标SCSI设备的不同读写I/O错误码;
在内核态下获得基于所述第二目标回调函数枚举的所述目标SCSI设备的不同读写I/O错误码,以模拟I/O错误故障。
本申请实施例还提供一种在内核态下模拟SCSI设备故障的装置,该装置应用于电子设备,所述电子设备被用于外接至少一个SCSI设备;所述装置包括:
第一获得模块,用于在内核态下获得待进行故障模拟的目标SCSI设备的字符设备文件;
第一故障模拟模块,用于若所述故障模拟为延时故障模拟,则在内核态下基于所述字符设备文件获得用于延时控制的第一初始回调函数,基于所述第一初始回调函数生成第一目标回调函数,所述第一目标回调函数相比所述第一初始回调函数,在内核态下被调用时将所述目标SCSI设备的I/O任务挂起到内核调度任务队列中,并增加对应的延时;
在内核态下基于所述第一目标回调函数将所述目标SCSI设备的I/O任务挂起到内核调度任务队列中,并为所述I/O任务增加对应的延时,在任一I/O任务对应的延时结束时,在内核态下调用该I/O任务,以模拟目标SCSI设备的I/O任务延时故障;
第二故障模拟模块,用于若所述故障模拟为I/O错误故障模拟,则在内核态下基于所述字符设备文件获得用于I/O控制的第二初始回调函数,基于所述第二初始回调函数生成第二目标回调函数,所述第二目标回调函数相比所述第二初始回调函数,在内核态下被调用时枚举所述目标SCSI设备的不同读写I/O错误码;
在内核态下获得基于所述第二目标回调函数枚举的所述目标SCSI设备的不同读写I/O错误码,以模拟I/O错误故障。
本申请实施例还提供一种电子设备,包括:处理器和用于存储计算机程序指令的存储器,计算机程序指令在被处理器运行时使得处理器执行如上方法的步骤。
本申请实施例还提供一种机器可读存储介质,该存储介质存储有计算机程序指令,当该计算机程序指令被执行时,能够实现如上方法的步骤。
由以上技术方案可以看出,本申请实施例中,在内核态下获得待进行故障模拟的目标SCSI设备的字符设备文件之后,若故障模拟为延时故障模拟,则在内核态下基于该字符设备文件获得用于延时控制的第一初始回调函数,基于该第一初始回调函数生成第一目标回调函数,由于第一目标回调函数在内核态下被调用时,能够将目标SCSI设备的I/O任务挂起到内核调度任务队列中,并增加对应的延时,这实现了模拟目标SCSI设备的I/O任务延时故障。若故障模拟为I/O错误故障模拟,则在内核态下基于字符设备文件获得用于I/O控制的第二初始回调函数,基于第二初始回调函数生成第二目标回调函数,由于第二目标回调函数在内核态下被调用时,能够枚举目标SCSI设备的不同读写I/O错误码,这实现了模拟目标SCSI设备的I/O读写故障。
在本实施例中,无论是模拟目标SCSI设备的I/O任务延时故障,还是模拟目标SCSI设备的I/O错误故障,这都是通过修改对目标SCSI设备操作时调用的回调函数来修改对目标SCSI设备操作的处理逻辑,来模拟出耦合度较高的故障,而非修改I/O任务的指令本身来在目标SCSI设备中真实发生故障,目标SCSI设备中并未发生真实的错误,这避免了在故障模拟过程中对目标SCSI设备的损伤。这实现了在不损害SCSI设备的前提下模拟故障,以提高存储***的可靠性的目的。
附图说明
图1为本申请实施例提供的方法的流程示意图。
图2为本申请实施例提供的装置的结构示意图。
图3为本申请实施例提供的电子设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例标识在附图中。下面的描述涉及附图时,除非另有标识,不同附图中的相同数字标识相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“”和“该”也旨在包括多数形式,除非上下文清楚地标识其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
下面为了使本领域技术人员更好地理解本申请实施例提供的技术方案,并使本申请实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本申请实施例中技术方案作进一步详细的说明。
参见图1,图1为本申请实施例提供的方法的流程示意图。作为一个实施例,该方法应用于电子设备,该电子设备被用于外接至少一个SCSI设备。可选的,该电子设备可为一个服务器,该服务器上安装了Linux操作***。
如图1所示,该流程可包括以下步骤:
S101,在内核态下获得待进行故障模拟的目标SCSI设备的字符设备文件。
在本实施例中,作为一个实施例,在执行上述步骤S101之前,在用户态下,用户会在命令行工具中输入表示进行故障模拟的命令行,该命令行指示了想要在哪个SCSI设备上模拟什么类型的故障,比如在SCSI设备A上模拟I/O延迟30s的延时故障。用户态下的命令行工具对该命令行进行解析并调用预先配置的动态库SO,按照内核态可识别的模式进行封装,并将封装所得到的故障模拟指令通过ioctl通道下发到内核态中。
这里,故障模拟指令会携带进行故障模拟所需要的信息,比如,若故障模拟为延时故障模拟,则该故障模拟指令会携带表示进行延时故障模拟的故障类型标识、目标SCSI设备的标识、以及延时时长。若故障模拟为I/O错误故障模拟,则该故障模拟指令会携带表示进行I/O错误故障模拟的故障类型标识、目标SCSI设备的标识、以及I/O错误码。
当内核态下获得上述故障模拟指令,会解析该故障模拟指令获得目标SCSI设备的标识,从内核态下记录的SCSI设备的标识和字符设备文件地址的对应关系中,查找到与目标SCSI设备的标识对应的字符设备文件地址,将位于该地址上的字符设备文件确定为上述故障模拟的目标SCSI设备的字符设备文件。
需要说明的是,字符设备文件是用户空间程序用来与字符设备进行通信的接口,每一SCSI设备在内核注册时都生成对应的字符设备文件,内核会记录该各SCSI设备的标识和字符设备文件地址之间的对应关系。
还需要说明的是,用户态和内核态是计算机操作***中的两种运行模式,用于区分不同级别的权限和访问方式。在用户态下,应用程序只能访问受限资源和执行受限指令,无法直接访问硬件设备或执行特权操作。在内核态下,操作***内核拥有对***所有资源(包括硬件设备)的完全控制权,并可以执行特权指令。
S102,若故障模拟为延时故障模拟,则在内核态下基于字符设备文件获得用于延时控制的第一初始回调函数,基于第一初始回调函数生成第一目标回调函数,第一目标回调函数相比第一初始回调函数,在内核态下被调用时将目标SCSI设备的I/O任务挂起到内核调度任务队列中,并增加对应的延时。
在本实施例中,本步骤S102中的基于字符设备文件获得用于延时控制的第一初始回调函数在具体实现时实现方式有很多,比如,作为一个实施例,获得字符设备文件对应的结构体,该结构体记录了字符设备文件在注册时所关联的各回调函数的函数指针。从结构体包括的各子结构体中查找到主机shost子结构体;从shost子结构体中记录的各函数指针中获得队列命令queue command函数指针。将获得的queue command函数指针指向的第一queue command回调函数作为第一初始回调函数。
需要说明的是,每一SCSI设备在内核注册时,先创建该设备的结构体,该结构体记录该字符设备的属性信息,之后生成该设备的字符设备文件,内核记录该结构体和字符设备文件之间的对应关系,之后还会将该字符设备文件与需要调用的回调函数进行绑定,并且这些回调函数的函数指针也记录在上述结构体包括的各子结构体中。这里,这些回调函数为内核驱动程序对SCSI设备执行相应操作时需要调用的回调函数。
相应地,本步骤S102中的基于第一初始回调函数生成第一目标回调函数的具体实现方式为:获得已配置的第二queue command回调函数;第二queue command回调函数中配置了定时器,当该第二queue command回调函数在内核态下被调用时,将目标SCSI设备的I/O任务挂起到内核调度任务队列中,并在满足故障模拟指令中携带的延时时长,将该I/O任务调整为就绪状态。
将queue command函数指针的指向由指向第一queue command回调函数修改为指向第二queue command回调函数,以建立queue command函数指针与第二queue command回调函数之间的关联关系,该关联关系是指在queue command函数指针被触发时,第二queuecommand回调函数被调用。将与queue command函数指针关联后的第二queue command回调函数作为第一目标回调函数。
作为一个实施例,将queue command函数指针的指向由指向第一queue command回调函数修改为指向第二queue command回调函数的具体实现方式可为:将queue command函数指针中的地址由第一queue command回调函数的地址修改为第二queue command回调函数的地址。
在本步骤S102中,通过修改queue command回调函数指针方向的方式,将与目标SCSI设备的字符设备文件绑定的第一queue command回调函数替换为第二queue command回调函数,这使得内核驱动程序在对目标SCSI设备执行I/O操作时,调用第二queuecommand回调函数而非第一queue command回调函数。
S103,在内核态下基于第一目标回调函数将目标SCSI设备的I/O任务挂起到内核调度任务队列中,并为I/O任务增加对应的延时,在任一I/O任务对应的延时结束时,在内核态下调用该I/O任务,以模拟目标SCSI设备的I/O任务延时故障。
在本实施例中,为I/O任务增加对应的延时的时长为上述故障模拟指令中携带的延时时长。
S104,若故障模拟为I/O错误故障模拟,则在内核态下基于字符设备文件获得用于I/O控制的第二初始回调函数,基于第二初始回调函数生成第二目标回调函数,第二目标回调函数相比第二初始回调函数,在内核态下被调用时枚举目标SCSI设备的不同读写I/O错误码。
在本实施例中,I/O错误故障和上述延时故障属于两类故障,而在I/O错误故障这类故障下可分为多个I/O错误子故障,这些I/O错误子故障通过错误码表征。比如,ENOENT表示未找到文件或目录。
在本实施例中,本步骤S104中的基于字符设备文件获得用于I/O控制的第二初始回调函数在具体实现时实现方式有很多,比如,作为一个实施例,获得字符设备文件对应的结构体,从结构体包括的各子结构体中查找到shost子结构体,从shost子结构体下查找到设备device子结构体,从device子结构体中记录的各函数指针中获得SCSI软中断完成scsi_softirq_done函数指针,将获得的scsi_softirq_done函数指针对应的第一scsi_softirq_done回调函数作为第二初始回调函数。
相应地,本步骤S102中的基于第二初始回调函数生成第二目标回调函数的具体实现方式为:获得已配置的第二scsi_softirq_done回调函数;这里,第二scsi_softirq_done回调函数配置了校验结果修改功能,以在被调用时将生成的校验结果中的表征校验结果的字段修改为与上述故障子类别对应的错误码的字段;这里的校验结果为校验目标SCSI设备的返回的执行结果与接收的I/O任务是否匹配的结果。
在控制scsi_softirq_done函数指针的指向不变前提下,利用第二scsi_softirq_done回调函数替换第一scsi_softirq_done回调函数,以建立scsi_softirq_done函数指针与第二scsi_softirq_done回调函数之间的关联关系;该关联关系是指在scsi_softirq_done函数指针被触发时,第二scsi_softirq_done回调函数被调用。将与scsi_softirq_done函数指针关联后的第二scsi_softirq_done回调函数作为第二目标回调函数。
作为一个实施例,上述利用第二scsi_softirq_done回调函数替换第一scsi_softirq_done回调函数的具体实现方式可为:已知scsi_softirq_done函数指针类型为const函数指针,这类指针无法修改函数指针内的地址,因此,获得第二scsi_softirq_done回调函数的B地址,获得第一scsi_softirq_done回调函数的A地址,新建B指向A的地址偏移指针,以等同实现利用第二scsi_softirq_done回调函数的内容替换第一scsi_softirq_done回调函数的内容的目的。
在本步骤S104中,通过地址迁移的方式,将与目标SCSI设备的字符设备文件绑定的第一scsi_softirq_done回调函数替换为第二scsi_softirq_done回调函数,这使得内核驱动程序在对目标SCSI设备执行I/O操作时,调用第二scsi_softirq_done回调函数而非第一scsi_softirq_done回调函数。
S105,在内核态下获得基于第二目标回调函数枚举的目标SCSI设备的不同读写I/O错误码,以模拟I/O错误故障。
在本实施例中,枚举的I/O错误码为上述故障模拟指令中携带的I/O错误码。上述第二queue command回调函数在被调用时,其将生成的校验结果中的表征校验结果的字段修改为I/O错误码的字段,从而使该目标SCSI设备出现I/O错误故障。
至此,完成图1所示流程。
通过图1所示流程,在内核态下获得待进行故障模拟的目标SCSI设备的字符设备文件之后,若故障模拟为延时故障模拟,则在内核态下基于该字符设备文件获得用于延时控制的第一初始回调函数,基于该第一初始回调函数生成第一目标回调函数,由于第一目标回调函数在内核态下被调用时,能够将目标SCSI设备的I/O任务挂起到内核调度任务队列中,并增加对应的延时,这实现了模拟目标SCSI设备的I/O任务延时故障。若故障模拟为I/O错误故障模拟,则在内核态下基于字符设备文件获得用于I/O控制的第二初始回调函数,基于第二初始回调函数生成第二目标回调函数,由于第二目标回调函数在内核态下被调用时,能够枚举目标SCSI设备的不同读写I/O错误码,这实现了模拟目标SCSI设备的I/O读写故障。
在本实施例中,无论是模拟目标SCSI设备的I/O任务延时故障,还是模拟目标SCSI设备的I/O错误故障,这都是通过修改对目标SCSI设备操作时调用的回调函数来修改对目标SCSI设备操作的处理逻辑,来模拟出耦合度较高的故障,而非修改I/O任务的指令本身来在目标SCSI设备中真实发生故障,目标SCSI设备中并未发生真实的错误,这避免在故障模拟过程中对目标SCSI设备的损伤。这实现了在不损害SCSI设备的前提下模拟故障,以提高存储***的可靠性的目的。
进一步地,在本实施例中,与现有技术中更改I/O任务的指令本身的方式相比,更加灵活、快捷与便利。
在一个实施例中,上述步骤S101、步骤S102、以及步骤S104由内核中已加载的内核替换模块(记为KO模块)执行。在电子设备执行图1所示步骤之前,先响应于外部使能指令加载KO模块。也就是说,只有在KO模块被加载之后,才执行图1所示步骤。
为了更详细理解本方法,以下述实施例为例对本方法中提及的延时故障模拟进行更详细阐述。
在本实施例,电子设备为服务器,SCSI设备为磁盘,本实施例包括如下步骤:
1、本服务器响应外部使能命令,依据预先下载的内核驱动模块运行fit_common.ko文件,以在内核中加载KO模块。
2、用户在命令行工具中输入进行延时故障模拟的命令行,命令行工具对该命令行进行解析并调用预先配置的动态库SO,按照内核态可识别的模式进行封装,并将封装所得到的故障模拟指令通过ioctl通道下发到内核态中。
3、KO模块通过ioctl通道接收到故障模拟指令之后,解析该指令获得进行延时故障模拟的故障类型标识、目标磁盘的标识、以及延时时长。
4、通过便利SCSI磁盘列表获得目标磁盘标识表示的目标磁盘的字符设备文件,获得该字符设备文件对应的结构体,按照shost->hostt->queue command函数指针的路径,从该结构体中获得queue command函数指针,将该函数指针中的地址从原始地址C(也即,第一queue command回调函数的地址C)修改为新编写的第二queue command回调函数的地址D,将与目标SCSI设备的字符设备文件绑定的第一queue command回调函数替换为第二queuecommand回调函数。
如此,使得内核驱动程序在对目标SCSI设备的I/O任务进行调度时,调用第二queue command回调函数。
5、在内核态下基于第二queue command回调函数将目标SCSI设备的I/O任务挂起到内核调度任务队列中,并为I/O任务增加对应的延时,延时时长与故障模拟指令中的延时时长相等,在任一I/O任务对应的延时结束时,在内核态下调用该I/O任务,以模拟目标SCSI设备的I/O任务延时故障。
需要说明的是,如果想要取消模拟延时故障,也即,从模拟故障状态恢复到正常运行状态时,则需要在将上述shost->hostt->queue command函数指针下的第二queuecommand回调函数的地址D再修改回第一queue command回调函数的地址C(也即,从地址D再修改回地址C),并将该KO模块卸载。
为了更详细理解本方法,以下述实施例为例对本方法中提及的I/O错误故障模拟进行更详细阐述。
本实施例包括如下步骤:
1、本服务器响应外部使能命令,依据预先下载的内核驱动模块运行fit_common.ko文件,以在内核中加载KO模块。
2、用户在命令行工具中输入进行延时故障模拟的命令行,命令行工具对该命令行进行解析并调用预先配置的动态库SO,按照内核态可识别的模式进行封装,并将封装所得到的故障模拟指令通过ioctl通道下发到内核态中。
3、KO模块通过ioctl通道接收到故障模拟指令之后,解析该指令获得进行延时故障模拟的故障类型标识、目标磁盘的标识、以及I/O错误码。
4、通过便利SCSI磁盘列表获得目标磁盘标识表示的目标磁盘的字符设备文件,获得该字符设备文件对应的结构体,按照shost->device->scsi_softirq_done函数指针的路径,获得新编写的第二scsi_softirq_done回调函数的B地址,获得第一scsi_softirq_done回调函数的A地址,新建由B指向A的地址偏移指针。将与目标SCSI设备的字符设备文件绑定的第一scsi_softirq_done回调函数替换为第二scsi_softirq_done回调函数。
如此,内核驱动程序在对目标SCSI设备的执行结果进行校对时,调用第二scsi_softirq_done回调函数。
5、在内核态下基于第二scsi_softirq_done回调函数枚举的目标SCSI设备的不同读写I/O错误码,以模拟I/O错误故障。
要说明的是,如果想要取消模拟I/O错误故障,也即,从模拟故障状态恢复到正常运行状态时,则需要在获得上述shost->device->scsi_softirq_done函数指针,基于该函数指针将上述由B指向A的地址偏移指针删除,并将该KO模块卸载。
以上完成对本申请实施例提供的方法的描述,下面对本申请实施例提供的装置进行详细描述。
参见图2,图2为本申请一实施例提供的装置的结构示意图。该装置应用于电子设备,该电子设备被用于外接至少一个SCSI设备;如图2所示,该装置200:第一获得模块201、第一故障模拟模块202和第二故障模拟模块203。
第一获得模块201,用于在内核态下获得待进行故障模拟的目标SCSI设备的字符设备文件;
第一故障模拟模块202,用于若故障模拟为延时故障模拟,则在内核态下基于字符设备文件获得用于延时控制的第一初始回调函数,基于第一初始回调函数生成第一目标回调函数,第一目标回调函数相比第一初始回调函数,在内核态下被调用时将目标SCSI设备的I/O任务挂起到内核调度任务队列中,并增加对应的延时;
在内核态下基于第一目标回调函数将目标SCSI设备的I/O任务挂起到内核调度任务队列中,并为I/O任务增加对应的延时,在任一I/O任务对应的延时结束时,在内核态下调用该I/O任务,以模拟目标SCSI设备的I/O任务延时故障;
第二故障模拟模块203,用于若故障模拟为I/O错误故障模拟,则在内核态下基于字符设备文件获得用于I/O控制的第二初始回调函数,基于第二初始回调函数生成第二目标回调函数,第二目标回调函数相比第二初始回调函数,在内核态下被调用时枚举目标SCSI设备的不同读写I/O错误码;
在内核态下获得基于第二目标回调函数枚举的目标SCSI设备的不同读写I/O错误码,以模拟I/O错误故障。
作为一个实施例,基于字符设备文件获得用于延时控制的第一初始回调函数包括:
获得字符设备文件对应的结构体;结构体记录了字符设备文件在注册时所关联的各回调函数的函数指针;
从结构体包括的各子结构体中查找到主机shost子结构体;
从shost子结构体中记录的各函数指针中获得队列命令queue command函数指针;
将获得的queue command函数指针指向的第一queue command回调函数作为第一初始回调函数。
作为一个实施例,基于第一初始回调函数生成第一目标回调函数包括:
获得已配置的第二queue command回调函数;第二queue command回调函数具备在内核态下被调用时将目标SCSI设备的I/O任务挂起到内核调度任务队列中,并增加对应的延时的功能;
将queue command函数指针的指向由指向第一queue command回调函数修改为指向第二queue command回调函数,以建立queue command函数指针与第二queue command回调函数之间的关联关系;该关联关系是指在queue command函数指针被触发时,第二queuecommand回调函数被调用;
将与queue command函数指针关联后的第二queue command回调函数作为第一目标回调函数。
作为一个实施例,在内核态下基于字符设备文件获得用于I/O控制的第二初始回调函数包括:
获得字符设备文件对应的结构体;结构体记录了字符设备文件在注册时所关联的各回调函数的函数指针;
从结构体包括的各子结构体中查找到shost子结构体;
从shost子结构体下查找到设备device子结构体;
从device子结构体中记录的各函数指针中获得SCSI软中断完成scsi_softirq_done函数指针;
将获得的scsi_softirq_done函数指针对应的第一scsi_softirq_done回调函数作为第二初始回调函数。
作为一个实施例,基于第二初始回调函数生成第二目标回调函数包括:
获得已配置的第二scsi_softirq_done回调函数;第二scsi_softirq_done回调函数具备在内核态下被调用时枚举目标SCSI设备的不同读写I/O错误码的功能;
在控制scsi_softirq_done函数指针的指向不变前提下,利用第二scsi_softirq_done回调函数替换第一scsi_softirq_done回调函数,以建立scsi_softirq_done函数指针与第二scsi_softirq_done回调函数之间的关联关系;该关联关系是指在scsi_softirq_done函数指针被触发时,第二scsi_softirq_done回调函数被调用;
将与scsi_softirq_done函数指针关联后的第二scsi_softirq_done回调函数作为第二目标回调函数。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。
请参见图3,图3为本申请实施例提供的一种电子设备的硬件结构示意图。该电子设备可以包括处理器301、通信接口302、存储器303和通信总线304。处理器301、通信接口302以及存储器303通过通信总线304完成相互间的通信。其中,存储器303上存放有计算机程序;处理器301可以通过执行存储器303上所存放的程序,执行上述实施例描述的方法的步骤。该电子设备根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。
本说明书中描述的主题及功能操作的实施例可以在以下中实现:数字电子电路、有形体现的计算机软件或固件、包括本说明书中公开的结构及其结构性等同物的计算机硬件、或者它们中的一个或多个的组合。本说明书中描述的主题的实施例可以实现为一个或多个计算机程序,即编码在有形非暂时性程序载体上以被数据处理装置执行或控制数据处理装置的操作的计算机程序指令中的一个或多个模块。可替代地或附加地,程序指令可以被编码在人工生成的传播信号上,例如机器生成的电、光或电磁信号,该信号被生成以将信息编码并传输到合适的接收机装置以由数据处理装置执行。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储器设备、或它们中的一个或多个的组合。
本说明书中描述的处理及逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程计算机执行,以通过根据输入数据进行操作并生成输出来执行相应的功能。处理及逻辑流程还可以由专用逻辑电路—例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)来执行,并且装置也可以实现为专用逻辑电路。
适合用于执行计算机程序的计算机包括,例如通用和/或专用微处理器,或任何其他类型的中央处理单元。通常,中央处理单元将从只读存储器和/或随机存取存储器接收指令和数据。计算机的基本组件包括用于实施或执行指令的中央处理单元以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如磁盘、磁光盘或光盘等,或者计算机将可操作地与此大容量存储设备耦接以从其接收数据或向其传送数据,抑或两种情况兼而有之。然而,计算机不是必须具有这样的设备。此外,计算机可以嵌入在另一设备中,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏操纵台、全球定位***(GPS)接收机、或例如通用串行总线(USB)闪存驱动器的便携式存储设备,仅举几例。
适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、媒介和存储器设备,例如包括半导体存储器设备(例如EPROM、EEPROM和闪存设备)、磁盘(例如内部硬盘或可移动盘)、磁光盘以及CD ROM和DVD-ROM盘。处理器和存储器可由专用逻辑电路补充或并入专用逻辑电路中。
虽然本说明书包含许多具体实施细节,但是这些不应被解释为限制任何发明的范围或所要求保护的范围,而是主要用于描述特定发明的具体实施例的特征。本说明书内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变形。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求这些操作以所示的特定顺序执行或顺次执行、或者要求所有例示的操作被执行,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种***模块和组件的分离不应被理解为在所有实施例中均需要这样的分离,并且应当理解,所描述的程序组件和***通常可以一起集成在单个软件产品中,或者封装成多个软件产品。
由此,主题的特定实施例已被描述。其他实施例在所附权利要求书的范围以内。在某些情况下,权利要求书中记载的动作可以以不同的顺序执行并且仍实现期望的结果。此外,附图中描绘的处理并非必需所示的特定顺序或顺次顺序,以实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。
以上仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

Claims (10)

1.一种在内核态下模拟计算机***接口SCSI设备故障的方法,其特征在于,该方法应用于电子设备,所述电子设备被用于外接至少一个SCSI设备;所述方法包括:
在内核态下获得待进行故障模拟的目标SCSI设备的字符设备文件;
若所述故障模拟为延时故障模拟,则在内核态下基于所述字符设备文件获得用于延时控制的第一初始回调函数,基于修改所述字符设备文件中所述第一初始回调函数所对应的函数指针的指向,获得第一目标回调函数,所述第一目标回调函数相比所述第一初始回调函数,在内核态下被调用时将所述目标SCSI设备的读写I/O任务挂起到内核调度任务队列中,并增加对应的延时;
在内核态下基于所述第一目标回调函数将所述目标SCSI设备的I/O任务挂起到内核调度任务队列中,并为所述I/O任务增加对应的延时,在任一I/O任务对应的延时结束时,在内核态下调用该I/O任务,以模拟目标SCSI设备的I/O任务延时故障;
若所述故障模拟为I/O错误故障模拟,则在内核态下基于所述字符设备文件获得用于I/O控制的第二初始回调函数,在维持所述字符设备文件中所述第二初始回调函数所对应的函数指针的指向不变的前提下,基于更改该函数指针所指向的函数内容,获得第二目标回调函数,所述第二目标回调函数相比所述第二初始回调函数,在内核态下被调用时枚举所述目标SCSI设备的不同读写I/O错误码;
在内核态下获得基于所述第二目标回调函数枚举的所述目标SCSI设备的不同读写I/O错误码,以模拟I/O错误故障。
2.根据权利要求1所述的方法,其特征在于,所述基于所述字符设备文件获得用于延时控制的第一初始回调函数包括:
获得所述字符设备文件对应的结构体;所述结构体记录了所述字符设备文件在注册时所关联的各回调函数的函数指针;
从所述结构体包括的各子结构体中查找到主机shost子结构体;
从所述shost子结构体中记录的各函数指针中获得队列命令queue command函数指针;
将获得的queue command函数指针指向的第一queue command回调函数作为所述第一初始回调函数。
3.根据权利要求2所述的方法,其特征在于,所述基于修改所述字符设备文件中所述第一初始回调函数所对应的函数指针的指向,获得第一目标回调函数包括:
获得已配置的第二queue command回调函数;所述第二queue command回调函数具备在内核态下被调用时将所述目标SCSI设备的I/O任务挂起到内核调度任务队列中,并增加对应的延时的功能;
将所述queue command函数指针的指向由指向所述第一queue command回调函数修改为指向所述第二queue command回调函数,以建立所述queue command函数指针与所述第二queue command回调函数之间的关联关系;该关联关系是指在所述queue command函数指针被触发时,所述第二queue command回调函数被调用;
将与所述queue command函数指针关联后的第二queue command回调函数作为所述第一目标回调函数。
4.根据权利要求1所述的方法,其特征在于,所述在内核态下基于所述字符设备文件获得用于I/O控制的第二初始回调函数包括:
获得所述字符设备文件对应的结构体;所述结构体记录了所述字符设备文件在注册时所关联的各回调函数的函数指针;
从所述结构体包括的各子结构体中查找到shost子结构体;
从所述shost子结构体下查找到设备device子结构体;
从所述device子结构体中记录的各函数指针中获得SCSI软中断完成scsi_softirq_done函数指针;
将获得的scsi_softirq_done函数指针对应的第一scsi_softirq_done回调函数作为所述第二初始回调函数。
5.根据权利要求4所述的方法,其特征在于,所述在维持所述字符设备文件中所述第二初始回调函数所对应的函数指针的指向不变的前提下,基于更改该函数指针所指向的函数内容,获得第二目标回调函数包括:
获得已配置的第二scsi_softirq_done回调函数;所述第二scsi_softirq_done回调函数具备在内核态下被调用时枚举所述目标SCSI设备的不同读写I/O错误码的功能;
在控制所述scsi_softirq_done函数指针的指向不变前提下,利用所述第二scsi_softirq_done回调函数替换所述第一scsi_softirq_done回调函数,以建立所述scsi_softirq_done函数指针与所述第二scsi_softirq_done回调函数之间的关联关系;该关联关系是指在所述scsi_softirq_done函数指针被触发时,所述第二scsi_softirq_done回调函数被调用;
将与所述scsi_softirq_done函数指针关联后的第二scsi_softirq_done回调函数作为所述第二目标回调函数。
6.一种在内核态下模拟SCSI设备故障的装置,其特征在于,该装置应用于电子设备,所述电子设备被用于外接至少一个SCSI设备;所述装置包括:
第一获得模块,用于在内核态下获得待进行故障模拟的目标SCSI设备的字符设备文件;
第一故障模拟模块,用于若所述故障模拟为延时故障模拟,则在内核态下基于所述字符设备文件获得用于延时控制的第一初始回调函数,基于修改所述字符设备文件中所述第一初始回调函数所对应的函数指针的指向,获得第一目标回调函数,所述第一目标回调函数相比所述第一初始回调函数,在内核态下被调用时将所述目标SCSI设备的I/O任务挂起到内核调度任务队列中,并增加对应的延时;
在内核态下基于所述第一目标回调函数将所述目标SCSI设备的I/O任务挂起到内核调度任务队列中,并为所述I/O任务增加对应的延时,在任一I/O任务对应的延时结束时,在内核态下调用该I/O任务,以模拟目标SCSI设备的I/O任务延时故障;
第二故障模拟模块,用于若所述故障模拟为I/O错误故障模拟,则在内核态下基于所述字符设备文件获得用于I/O控制的第二初始回调函数,在维持所述字符设备文件中所述第二初始回调函数所对应的函数指针的指向不变的前提下,基于更改该函数指针所指向的函数内容,获得第二目标回调函数,所述第二目标回调函数相比所述第二初始回调函数,在内核态下被调用时枚举所述目标SCSI设备的不同读写I/O错误码;
在内核态下获得基于所述第二目标回调函数枚举的所述目标SCSI设备的不同读写I/O错误码,以模拟I/O错误故障。
7.根据权利要求6所述的装置,其特征在于,所述基于所述字符设备文件获得用于延时控制的第一初始回调函数包括:
获得所述字符设备文件对应的结构体;所述结构体记录了所述字符设备文件在注册时所关联的各回调函数的函数指针;
从所述结构体包括的各子结构体中查找到主机shost子结构体;
从所述shost子结构体中记录的各函数指针中获得队列命令queue command函数指针;
将获得的queue command函数指针指向的第一queue command回调函数作为所述第一初始回调函数;
和/或,
所述基于修改所述字符设备文件中所述第一初始回调函数所对应的函数指针的指向,获得第一目标回调函数包括:
获得已配置的第二queue command回调函数;所述第二queue command回调函数具备在内核态下被调用时将所述目标SCSI设备的I/O任务挂起到内核调度任务队列中,并增加对应的延时的功能;
将所述queue command函数指针的指向由指向所述第一queue command回调函数修改为指向所述第二queue command回调函数,以建立所述queue command函数指针与所述第二queue command回调函数之间的关联关系;该关联关系是指在所述queue command函数指针被触发时,所述第二queue command回调函数被调用;
将与所述queue command函数指针关联后的第二queue command回调函数作为所述第一目标回调函数。
8.根据权利要求6所述的装置,其特征在于,所述在内核态下基于所述字符设备文件获得用于I/O控制的第二初始回调函数包括:
获得所述字符设备文件对应的结构体;所述结构体记录了所述字符设备文件在注册时所关联的各回调函数的函数指针;
从所述结构体包括的各子结构体中查找到shost子结构体;
从所述shost子结构体下查找到设备device子结构体;
从所述device子结构体中记录的各函数指针中获得SCSI软中断完成scsi_softirq_done函数指针;
将获得的scsi_softirq_done函数指针对应的第一scsi_softirq_done回调函数作为所述第二初始回调函数;
和/或,
所述在维持所述字符设备文件中所述第二初始回调函数所对应的函数指针的指向不变的前提下,基于更改该函数指针所指向的函数内容,获得第二目标回调函数 :
获得已配置的第二scsi_softirq_done回调函数;所述第二scsi_softirq_done回调函数具备在内核态下被调用时枚举所述目标SCSI设备的不同读写I/O错误码的功能;
在控制所述scsi_softirq_done函数指针的指向不变前提下,利用所述第二scsi_softirq_done回调函数替换所述第一scsi_softirq_done回调函数,以建立所述scsi_softirq_done函数指针与所述第二scsi_softirq_done回调函数之间的关联关系;该关联关系是指在所述scsi_softirq_done函数指针被触发时,所述第二scsi_softirq_done回调函数被调用;
将与所述scsi_softirq_done函数指针关联后的第二scsi_softirq_done回调函数作为所述第二目标回调函数。
9.一种电子设备,其特征在于,包括:
处理器;以及
存储器,在所述存储器中存储有计算机程序指令,所述计算机程序指令在被所述处理器运行时使得所述处理器执行如权利要求1至5任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行如权利要求1至5任一项所述的方法。
CN202410338822.4A 2024-03-22 2024-03-22 在内核态下模拟scsi设备故障的方法及装置 Active CN117931555B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410338822.4A CN117931555B (zh) 2024-03-22 2024-03-22 在内核态下模拟scsi设备故障的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410338822.4A CN117931555B (zh) 2024-03-22 2024-03-22 在内核态下模拟scsi设备故障的方法及装置

Publications (2)

Publication Number Publication Date
CN117931555A CN117931555A (zh) 2024-04-26
CN117931555B true CN117931555B (zh) 2024-06-07

Family

ID=90761483

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410338822.4A Active CN117931555B (zh) 2024-03-22 2024-03-22 在内核态下模拟scsi设备故障的方法及装置

Country Status (1)

Country Link
CN (1) CN117931555B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105528284A (zh) * 2014-09-28 2016-04-27 华为技术有限公司 一种内核故障注入方法及电子设备
KR20160080935A (ko) * 2014-12-30 2016-07-08 주식회사 이노피아테크 Tcp 세션을 복원하는 장애조치 시스템 및 방법
US9454539B1 (en) * 2013-03-13 2016-09-27 Ca, Inc. System and method for protecting operating system zones
WO2017166447A1 (zh) * 2016-03-30 2017-10-05 百度在线网络技术(北京)有限公司 内核模块加载方法和装置
CN114090476A (zh) * 2021-10-20 2022-02-25 珠海翔翼航空技术有限公司 Scsi硬盘模拟方法、***及介质
CN114691504A (zh) * 2022-03-28 2022-07-01 北京交通大学 一种基于调用指令替换的故障注入方法
CN115509924A (zh) * 2022-09-29 2022-12-23 深信服科技股份有限公司 一种故障模拟方法、装置及相关设备
CN116560924A (zh) * 2023-04-27 2023-08-08 曙光信息产业股份有限公司 性能测试方法、装置、计算机设备和可读存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101174751B1 (ko) * 2010-09-27 2012-08-17 한국인터넷진흥원 커널 콜백 매커니즘을 이용한 악성코드 자동 분석 방법
US11875198B2 (en) * 2021-03-22 2024-01-16 EMC IP Holding Company LLC Synchronization object issue detection using object type queues and associated monitor threads in a storage system

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9454539B1 (en) * 2013-03-13 2016-09-27 Ca, Inc. System and method for protecting operating system zones
CN105528284A (zh) * 2014-09-28 2016-04-27 华为技术有限公司 一种内核故障注入方法及电子设备
KR20160080935A (ko) * 2014-12-30 2016-07-08 주식회사 이노피아테크 Tcp 세션을 복원하는 장애조치 시스템 및 방법
WO2017166447A1 (zh) * 2016-03-30 2017-10-05 百度在线网络技术(北京)有限公司 内核模块加载方法和装置
CN114090476A (zh) * 2021-10-20 2022-02-25 珠海翔翼航空技术有限公司 Scsi硬盘模拟方法、***及介质
CN114691504A (zh) * 2022-03-28 2022-07-01 北京交通大学 一种基于调用指令替换的故障注入方法
CN115509924A (zh) * 2022-09-29 2022-12-23 深信服科技股份有限公司 一种故障模拟方法、装置及相关设备
CN116560924A (zh) * 2023-04-27 2023-08-08 曙光信息产业股份有限公司 性能测试方法、装置、计算机设备和可读存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Wen Dongxin等.权利要求1的保护范围不清楚,不符合专利法第二十六条第四款的规定。.《2012 International Conference on Computer Distributed Control and Intelligent Environmental Monitoring》.2012,全文. *
董峰,王树武,谭毓安.冗余存储路径在Linux的设计和实现.现代图书情报技术.2004,(第05期),全文. *
谭毓安 ; 朱立谷 ; .一个Linux多路径磁盘过滤驱动程序.计算机工程.2006,(第09期),全文. *

Also Published As

Publication number Publication date
CN117931555A (zh) 2024-04-26

Similar Documents

Publication Publication Date Title
US8429374B2 (en) System and method for read-while-write with NAND memory device
JP7012074B2 (ja) 仮想ディスクの拡張方法及び機器
CN110083399B (zh) 小程序运行方法、计算机设备及存储介质
CN110825419B (zh) 一种固件刷新方法、装置及电子设备和存储介质
CN110716845A (zh) 一种Android***的日志信息读取的方法
CN109597653A (zh) Bios与bmc命令交互的方法、bios及bmc
KR102315102B1 (ko) 가상 머신을 부팅하기 위한 방법, 장치, 기기 및 매체
US10467078B2 (en) Crash dump extraction of guest failure
US20080028141A1 (en) System and Method for Implementing Hard Disk Drive Data Clear and Purge
US8661237B2 (en) System and method for booting a plurality of servers from a shared boot image stored on a USB boot image sharer
CN117931555B (zh) 在内核态下模拟scsi设备故障的方法及装置
US20130097412A1 (en) Performing A Boot Sequence In A Multi-Processor System
CN109154895B (zh) 上下文数据控制
US10552135B1 (en) Reducing a size of an application package
US8694989B1 (en) Virtual installation environment
JP7355876B2 (ja) プログラム起動方法及び機器、記憶媒体
CN110471828B (zh) 一种操作***测试方法、装置及其设备
CN107656702B (zh) 加速硬盘读写的方法及其***、以及电子设备
US10445218B2 (en) Execution of graphic workloads on a simulated hardware environment
JP7522775B2 (ja) 不揮発性記憶区画識別子
CN110633210B (zh) 文件执行方法、装置、存储介质和电子设备
CN113778485A (zh) 电子芯片的***运行方法、装置、电子芯片和存储介质
CN113672260A (zh) 一种处理器cpu初始化方法
CN114153560A (zh) 一种虚拟中断处理方法、装置、设备及介质
CN101819533A (zh) 一种基于linux***下驱动安装的方法

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