CN105183568B - 一种存储双控制器间scsi命令同步方法 - Google Patents

一种存储双控制器间scsi命令同步方法 Download PDF

Info

Publication number
CN105183568B
CN105183568B CN201510509850.9A CN201510509850A CN105183568B CN 105183568 B CN105183568 B CN 105183568B CN 201510509850 A CN201510509850 A CN 201510509850A CN 105183568 B CN105183568 B CN 105183568B
Authority
CN
China
Prior art keywords
scsi
orders
order
command
controller
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
CN201510509850.9A
Other languages
English (en)
Other versions
CN105183568A (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.)
Shandong Chaoyue Digital Control Electronic Co Ltd
Original Assignee
Shandong Chaoyue Digital Control Electronic 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 Shandong Chaoyue Digital Control Electronic Co Ltd filed Critical Shandong Chaoyue Digital Control Electronic Co Ltd
Priority to CN201510509850.9A priority Critical patent/CN105183568B/zh
Publication of CN105183568A publication Critical patent/CN105183568A/zh
Application granted granted Critical
Publication of CN105183568B publication Critical patent/CN105183568B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种存储双控制器间scsi命令同步方法,通过在控制器收到scsi命令及执行scsi命令之前,对scsi命令进行重排序,保证对同一lun的scsi命令的有序执行。其实现分为scsi命令预处理及scsi命令执行两部分:scsi命令预处理部分根据多路径软件的io队列对scsi命令进行编号,然后将该编号封装至scsi命令的第一个数据包传输至target端,从而保证了由scsi initiator端发出的io请求统一编号和有效传输。控制器收到scsi命令之后进行scsi命令的同步并记录相关scsi命令供scsi命令执行使用;scsi命令执行部分:在执行scsi命令之前,先查找相关的scsi命令是否完成,如果未完成则触发相关命令执行并阻塞,等待相关命令执行完成后再执行当前命令。本发明解决了对双控制器对称式双活方案中的scsi命令同步问题。

Description

一种存储双控制器间scsi命令同步方法
技术领域
本发明涉及网络存储技术领域,具体涉及一种存储双控制器间scsi命令同步方法。
背景技术
双控制器io处理流程为scsi initiator发起scsi命令,经过多路径软件进行io分发后,到达两个控制器端的scsi target。
iSCSI传输协议提供了双控存储中scsi命令的有效传输,该协议的命令、状态和数据传送都是有序号的。对命令的编号是以会话为单位的,不管这个会话上包含有多少个连接(MC/S),其上的命令都被统一编号。在iSCSI中数据可以与命令分开传送。为了让一个命令传送的较大的数据量,iSCSI设计为一个命令中的多个数据可以分多次传送。因为对多次传送的数据也有一个编号,这个编号是以命令为单位的。
命令序号是一个32位的无符号序号,在iSCSI的请求PDU中,命令序号记录在CmdSN(Command Sequence Number)域中,命令序号开始于第一个连接的第一个Login请求,此后每发送一个命令其序号就加1,但立即命令除外。立即命令 (Immediate)是一种紧急命令,是要求iSCSI服务立即响应的命令,这个命令不编号,除立即命令外,iSCSI 层必须按命令序号的顺序向它的下层SCSI层传送命令。而立即命令是接收到后,不排队就马上发送到SCSI层。在iSCSI协议的原理上通过命令序号可实现命令的流量控制和命令传送的有序性。
此过程中多路径软件对双控制器映射到initiator端的设备进行了重新映射,将通过不同路径映射的lun识别为同一个物理设备。除此之外,多路径软件本质功能是根据映射关系和target driver描述的IO处理规则,将IO请求从逻辑设备转发至相应的targetdevice上。其处理所有从内核中块一级IO子系统的generic_make_request和submit_bio接口中定向到逻辑设备的所有块读写IO请求。IO请求在逻辑设备树中通过请求转发从上到下地进行处理。当一个bio请求在设备树中的逻辑设备向下层转发时,一个或者多个bio的克隆被创建并发送给下层target device。target driver结束某个bio请求后,将表示结束该bio请求的事件上报给它上层的逻辑设备,该过程在各个层次上进行直到该事件最终上传到根逻辑设备为止,然后device mapper结束根逻辑设备上原始bio请求,结束整个IO请求过程。
基于设备映射的多路径技术实现方案建立了一个有效的、可配置的路径管理方法,其核心是引入了一个管理对象:路径组(Path Group)。通过负载均衡方式访问“多路径”设备,把所有相关路径组合为一个路径组。按照规则MPIO调度策略(缺省使用round-robin轮换算法)只会运用到这唯一的路径组, I/O流量分配到所有的相关路径并统一进行IO队列排序。
发明内容
本发明要解决的技术问题是:不同于单控制器,对于同一个lun的scsi命令可顺序到达target端。双控制器对于同一个lun的io命令,需要经过两条路径传输至target端,此过程会出现网络时延不同导致的最终到达两个控制器的scsi命令乱序的问题。此问题会出现诸如针对同一文件的两次写入操作颠倒,从而先写入的数据成为最新数据的错误。
本发明所采用的技术方案为:
一种存储双控制器间scsi命令同步方法,所述同步方法在双控制器间加入scsi命令同步模块,该模块在控制器收到scsi命令及执行scsi命令之前,对scsi命令进行重排序以保证对同一lun的scsi命令的有序执行。
所述同步方法的实现分为scsi命令预处理及scsi命令执行两部分,其中:
scsi命令预处理部分:根据多路径软件的io队列对scsi命令进行编号,然后将该编号封装至scsi命令的第一个数据包传输至target端,通过该方式保证由scsi initiator端发出的io请求统一编号;
控制器收到scsi命令之后首先发送至对端一份,并接收对端scsi命令,接收后加入到本地scsi命令链表并标记为对端命令;控制器获取总的scsi命令链表后,检查总命令链表中是否有未到达的scsi命令,如果有未到达的scsi命令需阻塞等待,此处必须等到所有scsi命令到达,否则无法确认未到达命令是否与当前scsi命令有次序问题;
控制器获取到总的scsi命令后,比较当前scsi命令与之前的scsi命令的lun号是否一致,然后由LBA号及length计算当前及之前scsi命令操作的扇区范围,比较当前与之前scsi命令操作的扇区是否有重叠,通过此方式找出相关scsi命令并记录供scsi命令执行使用;
scsi命令执行部分:在执行scsi命令之前,先查找相关的scsi命令是否完成,如果未完成则触发相关命令执行并阻塞,等待相关命令执行完成后再执行当前命令,从而保证对同一lun的scsi命令的有序执行的处理方式。
所述scsi命令预处理部分负责交互控制器间scsi命令、找到scsi命令的相关scsi命令从而完成控制器端总命令链表的创建工作,详细工作流程如下:
1)控制器收到来自initiator端的命令后,解析出scsi命令并存入命令链表;
2)控制器之间交互各自命令链表,得出总命令链表,找到中间未收到的命令的scsiid并等待;
3)其中一个控制器收到未收到scsiid的命令后更新其命令链表、总命令链表并传输至对端;
4)对端控制器更新完总命令链表后发送确认信号;
5)找出命令队列中各个命令的关系,填充链表中Relation_scsiid。
所述scsi命令执行部分根据总命令链表,负责控制器间scsi命令的有序执行,详细工作流程如下:
1)控制器处理自己的命令队列之前,判断Relation_scsiid是否为空;
对于Relation_scsiid为空的命令,直接执行;
对于Relation_scsiid非空的命令,查找总链表中relation_scsiid编号的命令是否执行完成,如果执行完成,直接执行该命令,否则阻塞并进入步骤2;
2)执行relation_scsiid编号的命令并更新finishFlag,如果relation_scsiid编号的命令执行失败,要求客户端重新发送该相关命令并执行当前命令,并把其从总命令链表中删除。
本发明的有益效果为:
本发明对双控制器对称式双活方案中的scsi命令同步问题提出了解决方案,该方案通过在控制器收到scsi命令及执行scsi命令之前,对scsi命令进行重排序,保证对同一lun的scsi命令的有序执行。
附图说明
图1为scsi命令预处理流程图;
图2为相关scsi命令查找流程图;
图3为scsi命令执行流程图。
具体实施方式
下面参照附图所示,通过具体实施方式对本发明进一步说明:
实施例1:
一种存储双控制器间scsi命令同步方法,所述同步方法在双控制器间加入scsi命令同步模块,该模块在控制器收到scsi命令及执行scsi命令之前,对scsi命令进行重排序以保证对同一lun的scsi命令的有序执行。
实施例2:
在实施例1的基础上,本实施例所述同步方法的实现分为scsi命令预处理及scsi命令执行两部分,其中:
如图1所示,scsi命令预处理部分:根据多路径软件的io队列对scsi命令进行编号,然后将该编号封装至scsi命令的第一个数据包传输至target端,通过该方式保证由scsi initiator端发出的io请求统一编号;
控制器收到scsi命令之后首先发送至对端一份,并接收对端scsi命令,接收后加入到本地scsi命令链表并标记为对端命令;控制器获取总的scsi命令链表后,检查总命令链表中是否有未到达的scsi命令,如果有未到达的scsi命令需阻塞等待,此处必须等到所有scsi命令到达,否则无法确认未到达命令是否与当前scsi命令有次序问题;
如图2所示,控制器获取到总的scsi命令后,比较当前scsi命令与之前的scsi命令的lun号是否一致,然后由LBA号及length计算当前及之前scsi命令操作的扇区范围,比较当前与之前scsi命令操作的扇区是否有重叠,通过此方式找出相关scsi命令并记录供scsi命令执行使用;
scsi命令执行部分:在执行scsi命令之前,先查找相关的scsi命令是否完成,如果未完成则触发相关命令执行并阻塞,等待相关命令执行完成后再执行当前命令,从而保证对同一lun的scsi命令的有序执行的处理方式。
实施例3:
在实施例2的基础上,本实施例所述scsi命令预处理部分负责交互控制器间scsi命令、找到scsi命令的相关scsi命令从而完成控制器端总命令链表的创建工作,详细工作流程如下:
1)控制器收到来自initiator端的命令后,解析出scsi命令并存入命令链表;
2)控制器之间交互各自命令链表,得出总命令链表,找到中间未收到的命令的scsiid并等待;
3)其中一个控制器收到未收到scsiid的命令后更新其命令链表、总命令链表并传输至对端;
4)对端控制器更新完总命令链表后发送确认信号;
5)找出命令队列中各个命令的关系,填充链表中Relation_scsiid。
实施例4:
如图3所示,在实施例3的基础上,本实施例所述scsi命令执行部分根据总命令链表,负责控制器间scsi命令的有序执行,详细工作流程如下:
1)控制器处理自己的命令队列之前,判断Relation_scsiid是否为空;
对于Relation_scsiid为空的命令,直接执行;
对于Relation_scsiid非空的命令,查找总链表中relation_scsiid编号的命令是否执行完成,如果执行完成,直接执行该命令,否则阻塞并进入步骤2;
2)执行relation_scsiid编号的命令并更新finishFlag,如果relation_scsiid编号的命令执行失败,要求客户端重新发送该相关命令并执行当前命令,并把其从总命令链表中删除。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。

Claims (3)

1.一种存储双控制器间scsi命令同步方法,其特征在于:所述同步方法在双控制器间加入scsi命令同步模块,该模块在控制器收到scsi命令及执行scsi命令之前,对scsi命令进行重排序以保证对同一lun的scsi命令的有序执行;
所述同步方法的实现分为scsi命令预处理及scsi命令执行两部分,其中:
scsi命令预处理部分:根据多路径软件的io队列对scsi命令进行编号,然后将该编号封装至scsi命令的第一个数据包传输至target端,通过该方式保证由scsi initiator端发出的io请求统一编号;
控制器收到scsi命令之后首先发送至对端一份,并接收对端scsi命令,接收后加入到本地scsi命令链表并标记为对端命令;控制器获取总的scsi命令链表后,检查总命令链表中是否有未到达的scsi命令,如果有未到达的scsi命令需阻塞等待,此处必须等到所有scsi命令到达,否则无法确认未到达命令是否与当前scsi命令有次序问题;
控制器获取到总的scsi命令后,比较当前scsi命令与之前的scsi命令的lun号是否一致,然后由LBA号及length计算当前及之前scsi命令操作的扇区范围,比较当前与之前scsi命令操作的扇区是否有重叠,通过此方式找出相关scsi命令并记录供scsi命令执行使用;
scsi命令执行部分:在执行scsi命令之前,先查找相关的scsi命令是否完成,如果未完成则触发相关命令执行并阻塞,等待相关命令执行完成后再执行当前命令,从而保证对同一lun的scsi命令的有序执行的处理方式。
2.根据权利要求1所述的一种存储双控制器间scsi命令同步方法,其特征在于:所述scsi命令预处理部分负责交互控制器间scsi命令、找到scsi命令的相关scsi命令从而完成控制器端总命令链表的创建工作,详细工作流程如下:
1)控制器收到来自initiator端的命令后,解析出scsi命令并存入命令链表;
2)控制器之间交互各自命令链表,得出总命令链表,找到中间未收到的命令的scsiid并等待;
3)其中一个控制器收到未收到scsiid的命令后更新其命令链表、总命令链表并传输至对端;
4)对端控制器更新完总命令链表后发送确认信号;
5)找出命令队列中各个命令的关系,填充链表中Relation_scsiid。
3.根据权利要求2所述的一种存储双控制器间scsi命令同步方法,其特征在于:所述scsi命令执行部分根据总命令链表,负责控制器间scsi命令的有序执行,详细工作流程如下:
1)控制器处理自己的命令队列之前,判断Relation_scsiid是否为空;
对于Relation_scsiid为空的命令,直接执行;
对于Relation_scsiid非空的命令,查找总链表中relation_scsiid编号的命令是否执行完成,如果执行完成,直接执行该命令,否则阻塞并进入步骤2;
2)执行relation_scsiid编号的命令并更新finishFlag,如果relation_scsiid编号的命令执行失败,要求客户端重新发送该相关命令并执行当前命令,并把其从总命令链表中删除。
CN201510509850.9A 2015-08-19 2015-08-19 一种存储双控制器间scsi命令同步方法 Active CN105183568B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510509850.9A CN105183568B (zh) 2015-08-19 2015-08-19 一种存储双控制器间scsi命令同步方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510509850.9A CN105183568B (zh) 2015-08-19 2015-08-19 一种存储双控制器间scsi命令同步方法

Publications (2)

Publication Number Publication Date
CN105183568A CN105183568A (zh) 2015-12-23
CN105183568B true CN105183568B (zh) 2018-08-07

Family

ID=54905663

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510509850.9A Active CN105183568B (zh) 2015-08-19 2015-08-19 一种存储双控制器间scsi命令同步方法

Country Status (1)

Country Link
CN (1) CN105183568B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106445849B (zh) * 2016-10-21 2019-05-28 郑州云海信息技术有限公司 一种多控制器中处理有序命令的方法
CN106533808B (zh) * 2016-12-28 2020-02-07 苏州浪潮智能科技有限公司 基于mcs的链路聚合方法及装置
CN108200177A (zh) * 2018-01-04 2018-06-22 郑州云海信息技术有限公司 一种非阻塞同步模式数据库中间件网络通信的方法及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1949203A (zh) * 2006-10-27 2007-04-18 华为技术有限公司 小型计算机系统接口目标器的架构和数据传输方法
CN101208675A (zh) * 2005-06-29 2008-06-25 英特尔公司 帧序处理装置、系统和方法
US7450588B2 (en) * 2006-08-24 2008-11-11 Intel Corporation Storage network out of order packet reordering mechanism
WO2015099746A1 (en) * 2013-12-26 2015-07-02 Intel Corporation Data reorder during memory access

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101208675A (zh) * 2005-06-29 2008-06-25 英特尔公司 帧序处理装置、系统和方法
US7450588B2 (en) * 2006-08-24 2008-11-11 Intel Corporation Storage network out of order packet reordering mechanism
CN1949203A (zh) * 2006-10-27 2007-04-18 华为技术有限公司 小型计算机系统接口目标器的架构和数据传输方法
WO2015099746A1 (en) * 2013-12-26 2015-07-02 Intel Corporation Data reorder during memory access

Also Published As

Publication number Publication date
CN105183568A (zh) 2015-12-23

Similar Documents

Publication Publication Date Title
CN104641344B (zh) 组织分布式存储系统中的数据
CN100396065C (zh) 一种iSCSI存储系统的实现方法
US7484058B2 (en) Reactive deadlock management in storage area networks
US8732340B2 (en) Transport agnostic SCSI I/O referrals
US8015303B2 (en) High data rate stateful protocol processing
CN105183568B (zh) 一种存储双控制器间scsi命令同步方法
US8793432B2 (en) Consistent distributed storage communication protocol semantics in a clustered storage system
US20100011091A1 (en) Network Storage
EP2216955B1 (en) Network interface device
US20060010299A1 (en) Systems and methods to avoid deadlock and guarantee mirror consistency during online mirror synchronization and verification
US8219715B2 (en) Multi-pathing with SCSI I/O referrals
JP2008529167A (ja) 協調的共用ストレージアーキテクチャ
JP2008542887A5 (zh)
Zhang et al. Smarth: Enabling multi-pipeline data transfer in hdfs
US10061519B2 (en) Storage system, method, and apparatus for processing multi-layer protocol encapsulation or decapsulation operation requests
US20050262309A1 (en) Proactive transfer ready resource management in storage area networks
US9612756B1 (en) Data storage system with parallel handling of sub-I/O requests for individual host I/O requests
US9256521B1 (en) Methods and apparatus for SAS controllers with link list based target queues
CN104811431A (zh) 基于并行协议栈实例的数据包处理方法和装置
US20100153767A1 (en) Small computer system interface input output (SCSI IO) referral
CN110188256A (zh) 存储设备中的分布式查找方法和采用该方法的系统
US8417858B2 (en) System and method for enabling multiple processors to share multiple SAS wide ports
CN109413142A (zh) 一种Linux下的iSCSI虚拟代理实现方法
CN102118389B (zh) 一种通过iSCSI多路径访问存储设备的方法和一种存储设备
CN103399949B (zh) 一种数据库存储块状态控制方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant