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

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

Persistent Reservations(PRs)概述

PRs包含“PERSISTENT RESERVE IN”和“PERSISTENT RESERVE OUT”两个命令;

PRs操作的最基本单位是I_T连接,即一个启动器和目标器连接;

PRs配置不会因为启动器失效、硬件复位、逻辑单元复位或者I_T连接丢失而重置(跟配置相关,详见5.14.5小结);

一个获取的PRs只会因“释放”、“抢占”或者“清除”命令而释放,即便是目标器设备电源被断开,PRs依旧会被保留(跟配置相关,5.14.5小结)。

(来源:SPC-5第136页)

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

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

(来源: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连接均是持有者。

(来源:SPC-5第330页)

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

(来源:SPC-5第138页)

(来源:SPC-5第139页)

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

(来源: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”命令

基本格式

(来源: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”。

(来源:SPC-5第339页)

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

(来源:SPC-5第340页)

(来源: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”域

参数列表格式:

(来源: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”列表,其格式如下:

(来源: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的倍数,格式如下:

(来源:SPC-5第619页)

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

(来源:SPC-5第619页)

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

(来源:SPC-5第597页)

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

(来源: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”域格式如下:

(来源:SPC-5第345页)

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

“PERSISTENT RESERVE IN”命令

基本格式

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

(来源: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”。

(来源:SPC-5第326页)

“ALLOCATION LENGTH”域

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

READ KEYS

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

(来源: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”状态,当没有持有者时的返回格式如下:

(来源:SPC-5第328页)

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

(来源:SPC-5第329页)

REPORT CAPABILITIES

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

(来源: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”是否支持某一个命令,详细描述见下表:

(来源:SPC-5第333页)

(来源:SPC-5第334页)

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

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

(来源: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

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

(来源: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”的格式如下:

(来源: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小结。

相关推荐

大宅门酒价格 奎屯人家50度酒怎么样
mobile123365sb

大宅门酒价格 奎屯人家50度酒怎么样

📅 07-23 👁️ 6385
草榴社区或永久关闭,原因及影响分析
beat365最新版

草榴社区或永久关闭,原因及影响分析

📅 07-19 👁️ 1348
Ickb SO8 六代声卡好不好?可以选择吗?
mobile123365sb

Ickb SO8 六代声卡好不好?可以选择吗?

📅 07-23 👁️ 3694
北欧神话中你需要了解的10位女神
mobile123365sb

北欧神话中你需要了解的10位女神

📅 07-27 👁️ 386
c语言中if什么意思?
mobile123365sb

c语言中if什么意思?

📅 07-02 👁️ 8642
小米5手機價格走勢深度分析:多久會降價及影響因素