SCSI PRs命令研究总结2 - PRs命令规范

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Persistent Reservations(PRs)概述

  • PRs包含“PERSISTENT RESERVE IN”和“PERSISTENT RESERVE OUT”两个命令;
  • PRs操作的最基本单位是I_T连接,即一个启动器和目标器连接;
  • PRs配置不会因为启动器失效、硬件复位、逻辑单元复位或者I_T连接丢失而重置(跟配置相关,详见5.14.5小结);
  • 一个获取的PRs只会因“释放”、“抢占”或者“清除”命令而释放,即便是目标器设备电源被断开,PRs依旧会被保留(跟配置相关,5.14.5小结)。

SCSI PRs命令研究总结2 - PRs命令规范_第1张图片

(来源:SPC-5第136页)

“Persistent Reservation”范围(命令参数中的“SCOPE”域)

PRs必须针对整个LUN,使用“PERSISTENT RESERVE OUT”命令进行设置时需要设置为“LU_SCOPE”。

SCSI PRs命令研究总结2 - PRs命令规范_第2张图片

(来源:SPC-5第330页)

“Persistent Reservation”类型(命令参数中的“TYPE”域)

可用的“Persistent Reservation”类型:

  • 独占写入(Write Exclusive) 只有PRs持有者才能进行写入相关操作,且只有一个PRs持有者;
  • 独占存取(Exclusive Access) 只有PRs持有者才能进行存取相关操作,且只有一个PRs持有者;
  • 独占写入-仅注册者(Write Exclusive-Registrants Only) 所有注册者均可进行写入操作,且只有一个PRs持有者;
  • 独占存取-仅注册者(Exclusive Access-Registrants Only) 所有注册者均可进行存取操作,且只有一个PRs持有者;
  • 独占写入-所有注册者(Write Exclusive-All Registrants) 所有注册者均可进行写入操作,同时所有的已注册I_T连接均是持有者;
  • 独占存取-所有注册这(Exclusive Access-All Registrants) 所有注册者均可进行存取操作,同时所有的已注册I_T连接均是持有者。

SCSI PRs命令研究总结2 - PRs命令规范_第3张图片

(来源:SPC-5第330页)

SPC-4命令在不同类型的“Persistent Reservation”中的“允许”与“冲突”对照表:

SCSI PRs命令研究总结2 - PRs命令规范_第4张图片

(来源:SPC-5第138页)

SCSI PRs命令研究总结2 - PRs命令规范_第5张图片

(来源:SPC-5第139页)

SCSI PRs命令研究总结2 - PRs命令规范_第6张图片

“PERSISTENT RESERVE OUT”命令的“SERVICE ACTION”在不同类型的“Persistent Reservation”中的“允许”与“冲突”对照表:

SCSI PRs命令研究总结2 - PRs命令规范_第7张图片

(来源:SPC-5第141页)

“Reservation Key”

应用客户端需要在建立PRs之前为每个I_T连接注册一个“Reservation Key”,“Reservation Key”提供一种协议无关的识别I_T连接的方法,可以使用“Reservation Key”通过“PERSISTENT RESERVE IN”命令来查询关联的I_T状态。“Reservation Key”也可用于在“PERSISTENT RESERVE OUT”命令中注册和验证I_T连接。

一个“Reservation Key”可以对应多个I_T连接,一个I_T连接也可以注册多个“Reservation Key”(但是SG工具包中只支持一个),所以可以使用一个“Reservation Key”同时操作一组I_T连接!

“Persistent Reservation Holder”

“Persistent Reservation Holder”就是获取“Persistent Reservation”权限的持有者,成为持有者的情况如下:

  • 对于“Write Exclusive – All Registrants” 或者 “Exclusive Access – All Registrants”类型的PRs来说,所有的已注册I_T连接均为“Persistent Reservation”持有者。

  • 使用“RESERVE”、“PREEMPT”、 “PREEMPT AND ABORT”、“REPLACE LOST RESERVATION”、或者“REGISTER AND MOVE”这些“PERSISTENT RESERVE OUT”命令的“Server Action”的I_T连接就是“Persistent Reservation”持有者。

  • 使用“REGISTER AND MOVE”的“Server Action”的目标I_T连接就是“Persistent Reservation”持有者。

“PERSISTENT RESERVE OUT”命令

基本格式

SCSI PRs命令研究总结2 - PRs命令规范_第8张图片

(来源:SPC-5第337页)

“SERVICE ACTION”域

“PERSISTENT RESERVE OUT”命令支持的服务动作:

  • REGISTER - 注册活者反注册一个“Reservation Key”;
  • RESERVE - 根据指定的“SCOPE”和“Type”创建一个“Persistent Reservation”;
  • RELEASE - 释放选定的“Persistent Reservation”;
  • CLEAR - 清除所有的“Reservation Key”和“Persistent Reservation”;
  • PREEMPT - 抢占一个“Persistent Reservation”或移除注册;
  • PREEMPT AND ABORT - 抢占一个“Persistent Reservation”或移除注册,同时忽略所有之前的抢占;
  • REGISTER AND IGNORE EXISTING KEY - 注册活者反注册一个“Reservation Key”,同时忽略已经注册的“Reservation Key”;
  • REGISTER AND MOVE - 为另外一个I_T连接注册一个“Reservation Key”,并移动一个已经存在的“Persistent Reservation”到这个I_T连接;
  • REPLACE LOST RESERVATION - 恢复丢失的“Persistent Reservation”。

SCSI PRs命令研究总结2 - PRs命令规范_第9张图片

(来源:SPC-5第339页)

“PERSISTENT RESERVE OUT”命令服务动作的有效参数:

SCSI PRs命令研究总结2 - PRs命令规范_第10张图片

(来源:SPC-5第340页)

SCSI PRs命令研究总结2 - PRs命令规范_第11张图片

(来源:SPC-5第341页)

“PARAMETER LIST LENGTH”域

“PARAMETER LIST LENGTH”用于指定该命令所包含的参数列表长度。

  • 当参数列表中的“SPEC_I_PT”位为0,且“Service Action”不是“REGISTER AND MOVE”时,这个值必须为24,否则会返回“PARAMETER LIST LENGTH ERROR”错误。

  • 当这个值大于“Device Server”可以处理的参数列表的最大长度时,也会返回“PARAMETER LIST LENGTH ERROR”错误。

基本的“PARAMETER LIST”域

参数列表格式:

SCSI PRs命令研究总结2 - PRs命令规范_第12张图片

(来源:SPC-5第342页)

“RESERVATION KEY”参数

  • 是一个8字节长的值,用于标示发送“PERSISTENT RESERVE OUT”命令的I_T连接。
  • 如果“Service Action”是“REGISTER AND IGNORE EXISTING KEY”,则会忽略这个值。
  • 如果“Service Action”是“REGISTER”或者“REPLACE LOST RESERVATION”,此处应该填0。
  • 除此之外,“Device Server”会对把这个值与已经注册“RESERVATION KEY”的I_T连接进行比较,如果不一致,则会返回“RESERVATION CONFLICT”。

“SERVICE ACTION RESERVATION KEY”参数

如下“Service Action”需要提供“SERVICE ACTION RESERVATION KEY”:

a) REGISTER; b) REGISTER AND IGNORE EXISTING KEY; c) PREEMPT; d) PREEMPT AND ABORT; e) REPLACE LOST RESERVATION。

如下“Service Action”需要忽略“SERVICE ACTION RESERVATION KEY”:

a) RESERVE; b) RELEASE; c) CLEAR。

  • 当“Service Action”是“REGISTER”或者“REGISTER AND IGNORE EXISTING KEY”时,“SERVICE ACTION RESERVATION KEY”用于指定新的“RESERVATION KEY”,或者是0用于取消“RESERVATION KEY”的注册;
  • 当“Service Action”是“PREEMPT”或者“PREEMPT AND ABORT”时,“SERVICE ACTION RESERVATION KEY”指明将要被抢占的“RESERVATION KEY”;
  • 当“Service Action”是“REPLACE LOST RESERVATION”时,“SERVICE ACTION RESERVATION KEY”包含一个新的要被注册的“RESERVATION KEY”。

“SPEC_I_PT”参数

“SPEC_I_PT”参数用于确定是否指定启动器端口(Specify Initiator Ports)。

  • 当“SPEC_I_PT”被设置为0时,“Device Server”只处理已经注册的I_T连接发送的“PERSISTENT RESERVE OUT”命令;
  • 当“SPEC_I_PT”被设置为1,且“Service Action”不是“REGISTER”时,“Device Server”将会返回“INVALID FIELD IN PARAMETER LIST”错误;
  • 当“SPEC_I_PT”被设置为1,且“Service Action”是“REGISTER”时,“Additional Parameter Data”域必须包含“Transport IDs”列表,其格式如下:

SCSI PRs命令研究总结2 - PRs命令规范_第13张图片

(来源:SPC-5第344页)

其中“TRANSPORTID PARAMETER DATA LENGTH”指定下面的“TransportIDs”列表的字节数,如果“PARAMETER LIST LENGTH”未包含“TRANSPORTID PARAMETER DATA LENGTH”的长度,或者“TRANSPORTID PARAMETER DATA LENGTH”比实际的“TransportIDs”列表字节数不一致,“Device Server”会返回“PARAMETER LIST LENGTH ERROR”错误。

“TransportID”参数

每个“TransportID”参数长度至少24字节,且必须是4的倍数,格式如下:

SCSI PRs命令研究总结2 - PRs命令规范_第14张图片

(来源:SPC-5第619页)

  • TPID FORMAT - “TransportID”的格式类型,可用的格式如下:

SCSI PRs命令研究总结2 - PRs命令规范_第15张图片

(来源:SPC-5第619页)

  • PROTOCOL IDENTIFIER - 协议标识符,可用的标识符如下:

SCSI PRs命令研究总结2 - PRs命令规范_第16张图片

(来源:SPC-5第597页)

  • SCSI Transport Protocol Specific Data - 传输协议特定数据,每种协议的描述方法都不一样,具体的请参考SPC-5的7.6.4中的内容,这里只粗略说明一下iSCSI的格式,其格式如下:

SCSI PRs命令研究总结2 - PRs命令规范_第17张图片

(来源:SPC-5第621页)

可见iSCSI中的“TransportID”有两种格式,在使用sg_persist命令时,通过“−−transport−id=file=transport_ids.txt”参数指定的“TransportID”参数描述文件中,只需加入类似“iqn.5886.com.acme.diskarrays-sn-a8675309”这样的参数指明启动器接口即可。

“ALL_TG_PT”参数

“ALL_TG_PT”参数只针对“REGISTER”和“ REGISTER AND IGNORE EXISTING KEY”这两个“Service Action”,其他的“Service Action”应该忽略该参数,用于指明是否注册所有目标端口(All Target Ports)。

  • 如果“ALL_TG_PT”参数为0,则只注册发送“PERSISTENT RESERVE OUT”命令的I_T连接;
  • 如果“ALL_TG_PT”参数为1,则注册全部的“Device Server”已知的目标端口(SG工具包没有实现该功能)。

“APTPL”参数

“APTPL”(Activate Persist Through Power Loss)参数用于指定注册时是否激活掉电前已获取的“Persist”。

  • 只对“REGISTER”和“REGISTER AND IGNORE EXISTING KEY”有效,其他的“Service Action”应该忽略此参数;
  • 同时如果“Device Server”不支持“APTPL”被置位1,则会返回“INVALID FIELD IN PARAMETER LIST”错误;
  • 如果“APTPL”被置位0,“Device Server”将会释放掉电之前的“Persistent Reversvation”以及已注册的“Reservation Key”;
  • 如果“APTPL”被置位1,“Device Server”将会保留掉电之前的“Persistent Reversvation”以及已注册的“Reservation Key”。

针对“REGISTER AND MOVE”的“PARAMETER LIST”域

当“Service Action”是“REGISTER AND MOVE”时的“PARAMETER LIST”域格式如下:

SCSI PRs命令研究总结2 - PRs命令规范_第18张图片

(来源:SPC-5第345页)

此处不再详述,具体的请参看SPC-5第6.17.4小节。

“PERSISTENT RESERVE IN”命令

基本格式

“PERSISTENT RESERVE IN”命令的格式定义如下:

SCSI PRs命令研究总结2 - PRs命令规范_第19张图片

(来源:SPC-5第326页)

“SERVICE ACTION”域

“PERSISTENT RESERVE IN”命令支持的“SERVICE ACTION”如下:

  • READ KEYS - 获取所有已注册的“Reservation Keys”;
  • READ RESERVATION - 获取当前存在的“Persistent Reservation”;
  • REPORT CAPABILITIES - 获取功能描述信息;
  • READ FULL STATUS - 获取完整的状态信息,包括“Reservation Keys”和“Persistent Reservation”。

SCSI PRs命令研究总结2 - PRs命令规范_第20张图片

(来源:SPC-5第326页)

“ALLOCATION LENGTH”域

指定客户端接收数据缓冲区(用于保存返回的参数列表)的最大大小(以字节为单位),详见SPC-5的第4.2.5.6小节。

READ KEYS

读取设备上已经注册的“Reservation Key”,如果有多个I_T连接注册了相同的Key,则会重复出现多次。返回的参数列表个输入下:

SCSI PRs命令研究总结2 - PRs命令规范_第21张图片

(来源:SPC-5第327页)

“PRGENERATION”参数

“PRGENERATION”是一个32位的会重绕的计数器,每次处理“PERSISTENT RESERVE OUT”命令后可能被更新(具体的说明请参考SPC-5的6.17.2小节),该数值不会被“PERSISTENT RESERVE IN”命令或者失败和被拒绝的“PERSISTENT RESERVE OUT”命令更新。无论是否设置“APTPL”位,每次上电后,“PRGENERATION”都会被重置为0。

“ADDITIONAL LENGTH”参数

指明“Reservation Key List”的字节数。

“Reservation Key List”参数

每个“Reservation Key”占用8字节。

READ RESERVATION

获取持有的“Reservation Key”状态,当没有持有者时的返回格式如下:

SCSI PRs命令研究总结2 - PRs命令规范_第22张图片

(来源:SPC-5第328页)

当含有持有者时的返回格式如下:

SCSI PRs命令研究总结2 - PRs命令规范_第23张图片

(来源:SPC-5第329页)

REPORT CAPABILITIES

查询当前设备的“Persistent Reservations”功能和特性信息,返回个数如下:

SCSI PRs命令研究总结2 - PRs命令规范_第24张图片

(来源:SPC-5第332页)

  • RLR_C(Replace Lost Reservation Capable) - 置一则表明可以使用“REPLACE LOST RESERVATION”这个“Server Action”。

  • CRH(Compatible Reservation Handling) - 置一则表明按照5.14.3小节所描述的方式处理,否则按照SPC-2标准处理。

  • SIP_C(Specify Initiator Ports Capable) - 置一则表明支持指定启动器端口功能(PRs OUT时可以设置SPEC_I_PT标志)。

  • ATP_C(All Target Ports Capable) - 置一则表明支持指定目标器端口功能(PRs OUT时可以设置ALL_TG_PT标志)。

  • PTPL_C(Persist Through Power Loss Capable) - 置一则表明支持掉电保持功能(PRs OUT时可以设置APTPL标志)。

  • TMV(Type Mask Valid) - 置一则表明“PERSISTENT RESERVATION TYPE MASK”参数有效,否则忽略掉即可。

  • ALLOW COMMANDS - 指明某一类“Persistent Reservation”是否支持某一个命令,详细描述见下表:

SCSI PRs命令研究总结2 - PRs命令规范_第25张图片

(来源:SPC-5第333页)

SCSI PRs命令研究总结2 - PRs命令规范_第26张图片

(来源:SPC-5第334页)

  • PTPL_A(Persist Through Power Loss Active) - 置一则表明掉电保持功能被激活,否则是未激活。

  • PERSISTENT RESERVATION TYPE MASK - 包含一个位图,指明“Device Server”支持哪些类型的“Persistent Reservations”,详见下表:

SCSI PRs命令研究总结2 - PRs命令规范_第27张图片

(来源:SPC-5第334页)

a) WR_EX_AR - 置一表明支持“Write Exclusive – All Registrants”类型; b) EX_AC_RO - 置一表明支持“Exclusive Access – Registrants Only”类型; c) WR_EX_RO - 置一表明支持“Write Exclusive – Registrants Only”类型; d) EX_AC - 置一表明支持“Exclusive Access”类型; e) WR_EX - 置一表明支持“Write Exclusive”类型; f) EX_AC_AR - 置一表明支持“ Exclusive Access – All Registrants”类型。

READ FULL STATUS

读取完整的设备状态信息,其返回数据格式如下:

SCSI PRs命令研究总结2 - PRs命令规范_第28张图片

(来源:SPC-5第335页)

“PRGENERATION”参数

与“PERSISTENT RESERVE IN”命令的“READ KEYS” “Server Action”描述相同,请参考6.16.2小结。

“ADDITIONAL LENGTH”参数

说明“Full Status Descriptors”部分所包含的字节数。

“Full Status Descriptors”参数

“Full Status Descriptors”的格式如下:

SCSI PRs命令研究总结2 - PRs命令规范_第29张图片

(来源:SPC-5第336页)

  • RESERVATION KEY - 已注册的“Reservation Key”。
  • R_HOLDER(Reservation Holde) - 置一说明此“Reservation Key”是“Persistent Reservation”持有者。
  • ALL_TG_PT(All Target Ports) - 置零说明此“Reservation Key”只对应一个“Target Port”,否则对应所有“Target Port”。

后面的参数根据上述参数的取值不同而不同,详见6.16.5小结。

转载于:https://my.oschina.net/LastRitter/blog/1541361

你可能感兴趣的:(SCSI PRs命令研究总结2 - PRs命令规范)