CN103645865A - 一种命令超时的处理方法 - Google Patents
一种命令超时的处理方法 Download PDFInfo
- Publication number
- CN103645865A CN103645865A CN201310733531.7A CN201310733531A CN103645865A CN 103645865 A CN103645865 A CN 103645865A CN 201310733531 A CN201310733531 A CN 201310733531A CN 103645865 A CN103645865 A CN 103645865A
- Authority
- CN
- China
- Prior art keywords
- order
- scsi
- lower levels
- disposal route
- command
- 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.)
- Granted
Links
Images
Landscapes
- Computer And Data Communications (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种命令超时的处理方法,其包括以下步骤:S1,接收上层的下发命令,对下发命令计数统计序列加一,为所述下发命令申请一个Scsi命令,将所述Scsi命令下发驱动,并且设置一个计时器,开始计时;S2,在所述Scsi命令返回时,判断是否超时,是则执行步骤S3,否则执行步骤S4;S3,提示所述下发命令执行超时并返回;S4,返回所述Scsi命令的结果。采用上述方案,本发明简化了处理步骤,提高了处理效率,提高了系统的可移植性,提升了对计算机系统内部资源的管理效率,具有很高的实际应用价值。
Description
技术领域
本发明涉及系统命令管理,尤其涉及的是,一种命令超时的处理方法。
背景技术
在存储系统开发的过程中,以linux内核版本2.6.32为例,调用queuecommand交给驱动处理的命令可能出现超时的情况,此时将由触发错误处理流程Scsi_error_handle进行恢复处理。
当有命令错误时,将这些错误的命令挂到错误处理队列中,启动错误处理线程,进行修复;然后进行命令重试,采用总线复位、device复位、host复位等操作进行恢复。
这样,沿用linux内核的中层超时处理方式,不仅比较繁复,而且等待时间长、执行效率低。
发明内容
本发明所要解决的技术问题是提供一种新的命令超时的处理方法。
本发明的技术方案如下:一种命令超时的处理方法,其包括以下步骤:S1,接收上层的下发命令,对下发命令计数统计序列加一,为所述下发命令申请一个Scsi命令,将所述Scsi命令下发驱动,并且设置一个计时器,开始计时;S2,在所述Scsi命令返回时,判断是否超时,是则执行步骤S3,否则执行步骤S4;S3,提示所述下发命令执行超时并返回;S4,返回所述Scsi命令的结果。
优选的,所述处理方法中,步骤S3中,将所述下发命令赋值超时并且回复上层。
优选的,所述处理方法中,步骤S3中,还执行以下步骤S31:当所述Scsi命令返回时,根据所述计数统计序列的计数信息,判断是否继续处理。
优选的,所述处理方法中,步骤S31中,根据所述下发命令的计数统计序列和原子变量标志信息的状态,判断是否继续处理。
优选的,所述处理方法中,步骤S1中,所述计数统计序列加一之后,还将原子变量a赋值为零;步骤S3中,还执行以下步骤S32:判断原子变量a是否为零,是则将原子变量a赋值为一,标记下发命令为超时并返回;步骤S4中,还执行以下步骤S42:判断原子变量a是否为零,是则将原子变量a赋值为一,返回所述Scsi命令的结果,并释放所述Scsi命令。
优选的,所述处理方法中,步骤S32之后,还执行以下步骤S33:当所述Scsi命令返回时,释放所述Scsi命令。
优选的,所述处理方法中,步骤S32或步骤S42中,判断原子变量a不为零,则不处理。
优选的,所述处理方法中,步骤S1中,优先处理先到达下发命令。
优选的,所述处理方法中,所述下发命令的执行对象是存储系统。
优选的,所述处理方法中,步骤S2中,根据所述下发命令设置其超时的时限。
采用上述方案,本发明简化了处理步骤,提高了处理效率,提高了系统的可移植性,提升了对计算机系统内部资源的管理效率,具有很高的实际应用价值。
附图说明
图1为本发明的一个实施例的示意图。
具体实施方式
为了便于理解本发明,下面结合附图和具体实施例,对本发明进行更详细的说明。附图中给出了本发明的较佳的实施例。但是,本发明可以以许多不同的形式来实现,并不限于本说明书所描述的实施例。相反地,提供这些实施例的目的是使对本发明的公开内容的理解更加透彻全面。
需要说明的是,当元件被称为“固定于”另一个元件,它可以直接在另一个元件上或者也可以存在居中的元件。当一个元件被认为是“连接”另一个元件,它可以是直接连接到另一个元件或者可能同时存在居中元件。本说明书所使用的术语“垂直的”、“水平的”、“左”、“右”以及类似的表述只是为了说明的目的。
除非另有定义,本说明书所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本说明书中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是用于限制本发明。本说明书所使用的术语“和/或”包括一个或多个相关的所列项目的任意的和所有的组合。
LINUX内核中SCSI子系统由SCSI上层,中间层和底层驱动模块三部分组成,主要负责管理SCSI资源和处理其他子系统,如文件系统,提交到SCSI子系统中的IO请求。SCSI设备访问请求的提交分为两个步骤:用户空间提交访问请求到通用块层以及通用块层提交块访问请求到SCSI子系统。当SCSI子系统的请求队列处理函数被通用块层调用后,SCSI中间层会根据块访问请求的内容,生成、初始并提交SCSI命令(struct scsi_cmd)到SCSI TARGET端。SCSI命令记录了命令描述块(CDB)、感测数据缓存(SENSE BUFFER)、IO超时时间等SCSI相关的信息和SCSI子系统处理命令需要的一些其他信息,如回调函数等。本发明针对命令超时处理的复杂步骤,提供了一种相对简易的处理方式。例如,本发明的一个实施例是,一种命令超时的处理方法,其包括以下步骤。
S1,接收上层的下发命令,对下发命令计数统计序列加一,为所述下发命令申请一个Scsi命令(Scsi_cmd),将所述Scsi_cmd下发驱动,对上层的每一个下发命令,在下发命令下发时,对下发命令的计数统计序列加一,获取一个Scsi_cmd,并且设置一个计时器,开始计时;优选的,步骤S1中,优先处理先到达下发命令;例如,按到达顺序依次处理。这样,实现了先到先处理,后到不处理,大大提高了命令的处理效率。优选的,所述下发命令的执行对象是存储系统,例如硬盘存储系统、网络存储系统等。优选的,所述下发命令的执行对象是SCSI磁盘存储系统。例如,将上层下发的命令,用Sbuf代替,这个Sbuf只是为了和下面的命令进行区分,仅仅是作为表述的一个代号,例如,某一下发命令Sbuf。对于这个下发命令Sbuf,不仅有一个计数统计序列seq,而且由于下发命令Sbuf会反复使用,因此增加这个计数统计序列seq的统计,来标识该Sbuf是否有效;优选的,还设置一个原子类型的变量,例如原子变量a,用于区分该下发命令Sbuf是否超时。
S2,在所述Scsi_cmd返回时,判断是否超时,是则执行步骤S3,否则执行步骤S4;优选的,步骤S2中,根据所述下发命令设置其超时的时限,这样,不同的下发命令有不同的执行期限,复杂的下发命令有较长的执行期限;优选的,预设置若干组下发命令及其相应的执行期限;又如,根据之前预设次数的同一下发命令的平均执行期限,设置该下发命令相应的执行期限,例如平均执行期限增加10%至20%作为该下发命令相应的执行期限;又如,滚动更新之前预设次数的同一下发命令的平均执行期限。
S3,提示所述下发命令执行超时并返回;优选的,步骤S3中,将下发命令赋值超时并且回复上层。又如,直接返回所述Scsi_cmd执行超时。
S4,返回所述Scsi_cmd的结果。
例如,步骤S3中,还执行以下步骤S31:当所述Scsi_cmd返回时,根据所述计数统计序列的计数信息,判断是否继续处理。优选的,步骤S31中,根据记录的下发命令中的计数统计序列和原子变量标志信息的状态,判断是否继续处理。例如,步骤S1中,所述下发命令的计数统计序列加一之后,还将原子变量a赋值为零;步骤S3中,还执行以下步骤S32:判断原子变量a是否为零,是则将原子变量a赋值为一,标记所述下发命令为超时并返回;步骤S4中,还执行以下步骤S42:判断原子变量a是否为零,是则将原子变量a赋值为一,返回所述Scsi_cmd的结果,并释放所述Scsi_cmd。优选的,步骤S32之后,还执行以下步骤S33:当所述Scsi_cmd返回时,释放所述Scsi_cmd。优选的,所述处理方法中,步骤S32或步骤S42中,判断原子变量a不为零,则不处理。
例如,一种命令超时的处理方法,包括以下步骤:1、在每一个下发的命令Sbuf(数据标记)上,申请一个Scsi_cmd(内核驱动下发命令的数据结构)命令,并且起一个timer(计时器),来做时间判定;2、判断命令回来时是否超时;3、对于超时的命令,直接将Sbuf赋值超时并且回复上层,当Scsi_cmd返回时,判断Scsi_cmd统计的Sbuf计数统计,来决定处理与否;4、当命令没有超时的时候,将Scsi_cmd的结果done(返回)上层。
例如,对于串行数据缓冲器,串行口中有两个缓冲寄存器Sbuf,一个是发送寄存器,一个是接收寄存器,在物理结构上是完全独立的。它们都是字节寻址的寄存器,字节地址均为99H。这个重叠的地址靠读/写指令区分:串行发送时,CPU向Sbuf写入数据,此时99H表示发送Sbuf;串行接收时,CPU从Sbuf读出数据,此时99H表示接收Sbuf。例如,串行口的发送和接收都是以Sbuf的名义进行读或写的,当向Sbuf发“写”命令时,即是向发送缓冲区Sbuf装载并开始向外发送一帧数据,发送完便使发送中断标志位TI=1。在满足串行口接收中断标志位RI=0的条件下,置允许接收位REN(专用寄存器SCON控制字的第四位)=1就会接收一帧数据进入移位寄存器,并装载到接收Sbuf中,同时使RI=1。若要再次接收时,必须用软件将RI清零。例如,执行一条以Sbuf为目的操作数的命令,在每一个下发的命令Sbuf上,申请一个Scsi_cmd。其中,Sbuf只是标记一个命令,例如,Sbuf可以是a,也可以是b,或者其它标记等。
例如,每当产生一个从SCSI磁盘分区中读写数据块的请求时,都会创建一个新的请求结构,并将其添加到blk_dev数组的current_request链表中。如果请求链表正在处理,那么缓冲区则不需要做任何事情,否则它将通知SCSI处理请求队列。
系统中的每一个SCSI硬盘都由一个Scsi_Disk数据结构来代表。Scsi_Disk数据结构保存在rScsi_disks数组中,并且使用SCSI硬盘分区的从设备号作为索引。例如,/dev/sdb1的主设备号是8,从设备号是17,那么它的索引是17。每一个Scsi_Disk数据结构都包括一个指向代表此设备的Scsi_Device结构的指针,Scsi_Device结构又指向拥有此设备的SCSI主机的Scsi_Host结构。来自缓冲区的请求数据结构将会被翻译成描述SCSI命令的Scsi_Cmd结构。以SCSI磁盘为例,最初SCSI这边发送的是Scsi_Cmd,从Block层走就变成了request,然而到了USB-storage又变回了Scsi_Cmd。
例如,Linux内核维护了两个链表,分别存储了系统中所有时钟源的信息和时钟事件设备的信息。这两个链表的表头在内核中分别是clocksource_list和clockevent_devices。在Linux内核中,各个子系统之间有很强的相互关系,一些被一个子系统生成或者被探测到的事件,很可能是另一个或者多个子系统感兴趣的,也就是说这个事件的获取者必须能够通知所有对该事件感兴趣的子系统,并且还需要这种通知机制具有一定的通用性。因此,Linux内核引入了通知链(notification chain)技术。
例如,以下是一种通知链的类型:原子通知链(Atomic notifier chains),其通知链元素的回调函数(当事件发生时要执行的函数)只能在中断上下文中运行,不允许阻塞;又如,可阻塞通知链(Blocking notifier chains),其通知链元素的回调函数在进程上下文中运行,允许阻塞;又如,原始通知链(Raw notifier chains),其对通知链元素的回调函数没有任何限制,所有锁和保护机制都由调用者维护。本发明各实施例优选原子通知链方式来执行,还可以采用其他通知链技术。
例如,如图1所示,一种命令超时的处理方法,包括以下步骤:
1、存储系统中在每一个命令Sbuf结构体中取一个原子类型的变量a来标识命令处理与否,0表示未处理,1表示已处理;
2、还在Sbuf结构体中取一个原子变量seq作为计数统计;
3、每个命令下发时,申请一个Scsi_cmd,并且为Scsi_cmd起一个timer,并将命令通过SCSI命令队列处理函数queuecommand交给驱动处理;计数统计seq(序列)加一;将Sbuf的计数信息等记录到Scsi_cmd中;
4、当Scsi_cmd超时,则进入超时流程:
4.1、判断Sbuf中的标志a是否为1已处理:
如果为未处理,赋值1,并且命令Sbuf直接返回超时,需上层进行重试操作;当Scsi_cmd返回时,根据记录的Sbuf信息判断当前的Sbuf是否有效;
4.2、如果a为1,跳出当前流程,不做处理;
5、当Scsi_cmd没有超时回来时,流程如下:
5.1、判断a是否为1,如果为0,赋值1;
5.2、如果a为1,跳出当前流程,不做处理。
下面结合图1继续说明一个实施例,一种命令超时的处理方法,包括以下步骤。
上层下发命令,所述下发命令的计数统计序列加一,将原子变量a赋值为零;
为下发命令上获取一个Scsi_cmd,并且设置一个计时器,开始计时;
获取Scsi_cmd后,记录下发命令信息;
然后将该Scsi_cmd下发驱动;
在所述Scsi_cmd返回时,判断是否发生超时;
如果发生超时,判断原子变量a是否为零,是则将原子变量a赋值为一,标记所述下发命令为超时,并返回上层;判断原子变量a不为零,则不处理;
在所述Scsi_cmd返回时,如果未超时,判断原子变量a是否为零,是则将原子变量a赋值为一,返回所述Scsi_cmd的结果,并释放所述Scsi_cmd;判断原子变量a不为零,则不处理。
进一步地,本发明的实施例还包括,上述各实施例的各技术特征,相互组合形成的命令超时的处理方法,例如,采用先到先处理的方式避免时间窗;对于超时的命令,直接提示错误并返回;对于超时后返回的Scsi_cmd,根据记录的Sbuf中的seq和原子变量等标志信息的状态判断决定处理与否,这样,能够提升系统的移植性、兼容性。
综上所述,该处理方法是一种改进计算系统命令超时的处理方法,解决的是如何提升计算机系统尤其是存储系统的超时处理方式和处理效率的技术问题,该方法通过执行计算机程序实现对计算机系统内部运行性能的改进,反映的是利用下发命令的计数统计序列和计时器优化处理超时命令,利用的是遵循自然规律的技术手段,获得计算机系统对下发命令的执行效率提高、系统移植性提升的技术效果。因此,本发明专利申请是一种通过执行计算机程序实现计算机系统内部性能改进的解决方案,属于专利法第二条第二款规定的技术方案,属于专利保护的客体。
需要说明的是,上述各技术特征继续相互组合,形成未在上面列举的各种实施例,均视为本发明说明书记载的范围;并且,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (10)
1.一种命令超时的处理方法,其特征在于,包括以下步骤:
S1,接收上层的下发命令,对下发命令计数统计序列加一,为所述下发命令申请一个Scsi命令,将所述Scsi命令下发驱动,并且设置一个计时器,开始计时;
S2,在所述Scsi命令返回时,判断是否超时,是则执行步骤S3,否则执行步骤S4;
S3,提示所述下发命令执行超时并返回;
S4,返回所述Scsi命令的结果。
2.根据权利要求1所述处理方法,其特征在于,步骤S3中,将所述下发命令赋值超时并且回复上层。
3.根据权利要求2所述处理方法,其特征在于,步骤S3中,还执行以下步骤S31:当所述Scsi命令返回时,根据所述计数统计序列的计数信息,判断是否继续处理。
4.根据权利要求3所述处理方法,其特征在于,步骤S31中,根据所述下发命令的计数统计序列和原子变量标志信息的状态,判断是否继续处理。
5.根据权利要求4所述处理方法,其特征在于,步骤S1中,所述计数统计序列加一之后,还将原子变量a赋值为零;
步骤S3中,还执行以下步骤S32:判断原子变量a是否为零,是则将原子变量a赋值为一,标记所述下发命令为超时并返回;
步骤S4中,还执行以下步骤S42:判断原子变量a是否为零,是则将原子变量a赋值为一,返回所述Scsi命令的结果,并释放所述Scsi命令。
6.根据权利要求5所述处理方法,其特征在于,步骤S32之后,还执行以下步骤S33:当所述Scsi命令返回时,释放所述Scsi命令。
7.根据权利要求6所述处理方法,其特征在于,步骤S32或步骤S42中,判断原子变量a不为零,则不处理。
8.根据权利要求1至7任一所述处理方法,其特征在于,步骤S1中,优先处理先到达下发命令。
9.根据权利要求8所述处理方法,其特征在于,所述下发命令的执行对象是存储系统。
10.根据权利要求9所述处理方法,其特征在于,步骤S2中,根据所述下发命令设置其超时的时限。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310733531.7A CN103645865B (zh) | 2013-12-26 | 2013-12-26 | 一种命令超时的处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310733531.7A CN103645865B (zh) | 2013-12-26 | 2013-12-26 | 一种命令超时的处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103645865A true CN103645865A (zh) | 2014-03-19 |
CN103645865B CN103645865B (zh) | 2016-08-24 |
Family
ID=50251092
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310733531.7A Active CN103645865B (zh) | 2013-12-26 | 2013-12-26 | 一种命令超时的处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103645865B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106341488A (zh) * | 2016-10-08 | 2017-01-18 | 深圳市云舒网络技术有限公司 | 一种基于tcmu虚拟块设备的网络存储后端超时处理方法 |
CN107024984A (zh) * | 2017-01-12 | 2017-08-08 | 瑞声科技(新加坡)有限公司 | 一种按键的反馈响应方法及终端 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060064419A1 (en) * | 2004-09-21 | 2006-03-23 | Weimin Pan | System and method for virtual media command filtering |
JP2006268707A (ja) * | 2005-03-25 | 2006-10-05 | Nec Corp | ストレージ装置 |
CN101923442A (zh) * | 2009-06-09 | 2010-12-22 | 英业达集团(天津)电子技术有限公司 | iSCSI存储设备访问过程中的缓存数据同步系统及方法 |
CN102270173A (zh) * | 2011-07-21 | 2011-12-07 | 哈尔滨工业大学 | 基于scsi驱动层的故障注入工具 |
CN103176751A (zh) * | 2013-03-04 | 2013-06-26 | 浪潮电子信息产业股份有限公司 | 一种多种存储协议下的统一服务系统 |
-
2013
- 2013-12-26 CN CN201310733531.7A patent/CN103645865B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060064419A1 (en) * | 2004-09-21 | 2006-03-23 | Weimin Pan | System and method for virtual media command filtering |
JP2006268707A (ja) * | 2005-03-25 | 2006-10-05 | Nec Corp | ストレージ装置 |
CN101923442A (zh) * | 2009-06-09 | 2010-12-22 | 英业达集团(天津)电子技术有限公司 | iSCSI存储设备访问过程中的缓存数据同步系统及方法 |
CN102270173A (zh) * | 2011-07-21 | 2011-12-07 | 哈尔滨工业大学 | 基于scsi驱动层的故障注入工具 |
CN103176751A (zh) * | 2013-03-04 | 2013-06-26 | 浪潮电子信息产业股份有限公司 | 一种多种存储协议下的统一服务系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106341488A (zh) * | 2016-10-08 | 2017-01-18 | 深圳市云舒网络技术有限公司 | 一种基于tcmu虚拟块设备的网络存储后端超时处理方法 |
CN107024984A (zh) * | 2017-01-12 | 2017-08-08 | 瑞声科技(新加坡)有限公司 | 一种按键的反馈响应方法及终端 |
Also Published As
Publication number | Publication date |
---|---|
CN103645865B (zh) | 2016-08-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102403489B1 (ko) | 비휘발성 메모리 익스프레스 컨트롤러에 의한 입출력 큐 관리 방법 | |
CN100538737C (zh) | 图形处理单元管线多阶同步控制处理器及其方法 | |
CN102103483B (zh) | 汇聚和散布多个数据元素 | |
CN100543709C (zh) | 迁移数据页面的方法和装置 | |
CN103562878B (zh) | 在镜像虚拟机系统中的存储器检查点设置 | |
US20150193250A1 (en) | Virtual computer system, management computer, and virtual computer management method | |
CN108153482B (zh) | Io命令处理方法与介质接口控制器 | |
CN103999060A (zh) | 固态存储管理 | |
CN101243396B (zh) | 用于在虚拟化环境中支持通用串行总线装置的方法和设备 | |
EP2225650B1 (en) | Efficient interrupt message definition | |
CN103597457A (zh) | 避免设备中的非公布请求死锁 | |
CN101154202B (zh) | 管理多处理器计算机系统中的系统管理中断的系统和方法 | |
CN111399750B (zh) | 闪存数据写入方法及计算机可读取存储介质 | |
CN103559087A (zh) | 一种虚拟处理器之间的中断的实现方法、相关装置和系统 | |
CN104991736A (zh) | 写数据方法、装置以及存储设备 | |
CN108153582B (zh) | Io命令处理方法与介质接口控制器 | |
CN104461730A (zh) | 一种虚拟资源分配方法及装置 | |
CN111290836A (zh) | 虚拟机快照创建方法、装置、存储介质及计算机设备 | |
CN113196225A (zh) | 开放信道矢量命令执行 | |
CN103645865A (zh) | 一种命令超时的处理方法 | |
CN109656479A (zh) | 一种构建存储器命令序列的方法及装置 | |
US11809353B2 (en) | Component firmware interaction using hardware registers | |
CN112445412B (zh) | 一种数据存储方法及装置 | |
CN108958903A (zh) | 嵌入式多核中央处理器任务调度方法与装置 | |
US11360702B2 (en) | Controller event queues |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
DD01 | Delivery of document by public notice | ||
DD01 | Delivery of document by public notice |
Addressee: Shenzhen Huaqi CIGNA patent agency (special general partnership) Qu Weitao Document name: Notification of Approving Refund |