一种存储双控制器间scsi命令同步机制的制作方法

文档序号:9432390阅读:441来源:国知局
一种存储双控制器间scsi命令同步机制的制作方法
【技术领域】
[0001]本发明涉及网络存储技术领域,具体涉及一种存储双控制器间SCSi命令同步机制。
【背景技术】
[0002]双控制器1处理流程为scsi initiator发起scsi命令,经过多路径软件进行1分发后,到达两个控制器端的scsi target ο
[0003]iSCSI传输协议提供了双控存储中scsi命令的有效传输,该协议的命令、状态和数据传送都是有序号的。对命令的编号是以会话为单位的,不管这个会话上包含有多少个连接(MC/S),其上的命令都被统一编号。在iSCSI中数据可以与命令分开传送。为了让一个命令传送的较大的数据量,iSCSI设计为一个命令中的多个数据可以分多次传送。因为对多次传送的数据也有一个编号,这个编号是以命令为单位的。
[0004]命令序号是一个32位的无符号序号,在iSCSI的请求rou中,命令序号记录在CmdSN(Command Sequence Number)域中,命令序号开始于第一个连接的第一个Login请求,此后每发送一个命令其序号就加1,但立即命令除外。立即命令(Immediate)是一种紧急命令,是要求iSCSI服务立即响应的命令,这个命令不编号,除立即命令外,iSCSI层必须按命令序号的顺序向它的下层SCSI层传送命令。而立即命令是接收到后,不排队就马上发送到SCSI层。在iSCSI协议的原理上通过命令序号可实现命令的流量控制和命令传送的有序性。
[0005]此过程中多路径软件对双控制器映射到initiator端的设备进行了重新映射,将通过不同路径映射的Iun识别为同一个物理设备。除此之外,多路径软件本质功能是根据映射关系和target driver描述的1处理规则,将1请求从逻辑设备转发至相应的targetdevice上。其处理所有从内核中块一级10子系统的generic_make_request和submit_b1接口中定向到逻辑设备的所有块读写10请求。10请求在逻辑设备树中通过请求转发从上到下地进行处理。当一个b1请求在设备树中的逻辑设备向下层转发时,一个或者多个b1的克隆被创建并发送给下层target device。target driver结束某个b1请求后,将表示结束该b1请求的事件上报给它上层的逻辑设备,该过程在各个层次上进行直到该事件最终上传到根逻辑设备为止,然后device mapper结束根逻辑设备上原始b1请求,结束整个10请求过程。
[0006]基于设备映射的多路径技术实现方案建立了一个有效的、可配置的路径管理机制,其核心是引入了一个管理对象:路径组(Path Group)。通过负载均衡方式访问“多路径”设备,把所有相关路径组合为一个路径组。按照规则MP1调度策略(缺省使用round-robin轮换算法)只会运用到这唯一的路径组,1/0流量分配到所有的相关路径并统一进行10队列排序。

【发明内容】

[0007]本发明要解决的技术问题是:不同于单控制器,对于同一个Iun的scsi命令可顺序到达target端。双控制器对于同一个Iun的1命令,需要经过两条路径传输至target端,此过程会出现网络时延不同导致的最终到达两个控制器的scsi命令乱序的问题。此问题会出现诸如针对同一文件的两次写入操作颠倒,从而先写入的数据成为最新数据的错误。
[0008]本发明所采用的技术方案为:
一种存储双控制器间scsi命令同步机制,所述同步机制在双控制器间加入scsi命令同步模块,该模块在控制器收到scsi命令及执行scsi命令之前,对scsi命令进行重排序以保证对同一 Iun的scsi命令的有序执行。
[0009]所述同步机制的实现分为scsi命令预处理及scsi命令执行两部分,其中: scsi命令预处理部分:根据多路径软件的1队列对scsi命令进行编号,然后将该编号封装至scsi命令的第一个数据包传输至target端,通过该方式保证由scsi initiator端发出的1请求统一编号;
控制器收到scsi命令之后首先发送至对端一份,并接收对端scsi命令,接收后加入到本地scsi命令链表并标记为对端命令;控制器获取总的scsi命令链表后,检查总命令链表中是否有未到达的scsi命令,如果有未到达的scsi命令需阻塞等待,此处必须等到所有scsi命令到达,否则无法确认未到达命令是否与当前scsi命令有次序问题;
控制器获取到总的SCSi命令后,比较当前SCSi命令与之前的SCSi命令的Iun号是否一致,然后由LBA号及length计算当前及之前scsi命令操作的扇区范围,比较当前与之前scsi命令操作的扇区是否有重叠,通过此方式找出相关scsi命令并记录供scsi命令执行使用;
scsi命令执行部分:在执行scsi命令之前,先查找相关的scsi命令是否完成,如果未完成则触发相关命令执行并阻塞,等待相关命令执行完成后再执行当前命令,从而保证对同一 Iun的scsi命令的有序执行的处理方式。
[0010]所述scsi命令预处理部分负责交互控制器间SCSi命令、找到SCSi命令的相关SCSi命令从而完成控制器端总命令链表的创建工作,详细工作流程如下:
1)控制器收到来自initiator端的命令后,解析出scsi命令并存入命令链表;
2)控制器之间交互各自命令链表,得出总命令链表,找到中间未收到的命令的scsiid并等待;
3)其中一个控制器收到未收到scsiid的命令后更新其命令链表、总命令链表并传输至对端;
4)对端控制器更新完总命令链表后发送确认信号;
5)找出命令队列中各个命令的关系,填充链表中Relat1n_SCSiid。
[0011]所述scsi命令执行部分根据总命令链表,负责控制器间scsi命令的有序执行,详细工作流程如下:
I)控制器处理自己的命令队列之前,判断Relat1n_scsiid是否为空;
对于Relat1n_scsiid为空的命令,直接执行;
对于Relat1n_scsiid非空的命令,查找总链表中relat1n_scsiid编号的命令是否执行完成,如果执行完成,直接执行该命令,否则阻塞并进入步骤2 ; 2)执行 relat1n_scsiid 编号的命令并更新 finishFlag,如果 relat1n_scsiid 编号的命令执行失败,要求客户端重新发送该相关命令并执行当前命令,并把其从总命令链表中删除。
[0012]本发明的有益效果为:
本发明对双控制器对称式双活方案中的scsi命令同步问题提出了解决方案,该方案通过在控制器收到scsi命令及执行scsi命令之前,对scsi命令进行重排序,保证对同一Iun的scsi命令的有序执行。
【附图说明】
[0013]图1为scsi命令预处理流程图;
图2为相关scsi命令查找流程图
图3为scsi命令执行流程图。
【具体实施方式】
[0014]下面参照附图所示,通过【具体实施方式】对本发明进一步说明:
实施例1:
一种存储双控制器间SCSi命令同步机制,所述同步机制在双控制器间加入scsi命令同步模块,该模块在控制器收到scsi命令及执行scsi命令之前,对scsi命令进行重排序以保证对同一 Iun的scsi命令的有序执行。
[0015]实施例2:
在实施例1的基础上,本实施例所述同步机制的实现分为scsi命令预处理及scsi命令执行两部分,其中:
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1