CN105183568B - 一种存储双控制器间scsi命令同步方法 - Google Patents
一种存储双控制器间scsi命令同步方法 Download PDFInfo
- 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
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命令同步方法。
背景技术
双控制器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编号的命令执行失败,要求客户端重新发送该相关命令并执行当前命令,并把其从总命令链表中删除。
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)
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)
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 |
-
2015
- 2015-08-19 CN CN201510509850.9A patent/CN105183568B/zh active Active
Patent Citations (4)
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 |