网络工作组 M. Chadalapaka
RFC 3783
类别:信息性
发布者:Hewlett-Pard Co.
2004年5月
小型计算机系统接口(SCSI)
在 iSCSI 中的命令顺序考虑
本备忘录的状态
本备忘录为互联网社区提供信息。它并未指定任何类型的互联网标准。本备忘录的分发不受限制。
版权声明
版权所有(C)互联网协会(2004)。保留所有权利。
摘要
互联网小型计算机系统接口(iSCSI)是一种运行在 TCP 之上的 SCSI 传输协议。iSCSI 会话抽象等同于经典的 SCSI “I_T nexus”,它代表了启动器与目标之间通过 SCSI 协议族进行通信所需的逻辑关系。iSCSI 会话提供从 SCSI 启动器到 SCSI 目标的有序命令传递。本文档深入探讨了导致当前定义的 iSCSI 会话模型的设计考虑,将 T10 规范中定义的 SCSI 命令顺序特性与 iSCSI 概念联系起来,并为系统设计者提供了如何基于 iSCSI 构建真正的命令顺序解决方案的指导。
目录
-
引言
-
定义与缩写
2.1 定义
2.2 缩写 -
iSCSI 协议概述
3.1 协议映射描述
3.2 I_T Nexus 模型
3.3 有序命令传递
3.3.1 问题
3.3.2 会话保证
3.3.3 顺序责任
3.3.4 设计意图 -
命令顺序场景
4.1 SCSI 层
4.1.1 命令参考编号(CRN)
4.1.2 任务属性
4.1.3 自动相关忠诚(ACA)
4.1.4 UA 互锁
4.2 iSCSI 层 -
连接故障考虑
-
命令顺序系统考虑
-
保留考虑
-
安全考虑
-
参考文献
9.1 规范性引用
9.2 信息性引用 -
致谢
-
作者地址
-
完整版权声明
1. 引言
iSCSI 是一种 SCSI 传输协议([iSCSI]),旨在使 SCSI 应用协议能够在 TCP/IP 网络上运行,包括互联网。鉴于互联网的规模和范围,iSCSI 因此启用了一些令人兴奋的新 SCSI 应用程序。潜在的新应用领域包括:
a) 比以往可能更大的(直径)存储区域网络(SAN)
b) 异步远程镜像
c) 远程磁带存储
每个应用都利用了 iSCSI 所实现的 SCSI 启动器与目标之间几乎无限的地理距离。在这些情况下,由于延迟较长,启动器非常倾向于在不等待先前命令的 SCSI 状态的情况下连续发送 SCSI 命令。命令流可能主要由两类应用程序使用——其中一类可能并不特别关心有序命令执行,而另一类则依赖有序命令执行(即应用程序级别对 SCSI 命令之间的顺序有依赖)。
例如,上述 b) 和 c) 情况显然需要有序命令执行。镜像应用程序不希望写入在远程 SCSI 目标上乱序提交,以保持该目标上数据的事务完整性。总之,SCSI 命令流与 SCSI 目标上有序命令执行的保证相结合,在长延迟网络中对于关键应用程序非常有价值。
本文档回顾了在设计采用 SCSI 命令顺序的存储解决方案时的各种协议考虑。本文档还分析并解释了 [iSCSI] 在命令顺序方面的设计意图。
2. 定义与缩写
2.1 定义
-
I_T nexus:[SAM2] 将 I_T nexus 定义为 SCSI 启动器端口与 SCSI 目标端口之间的关系。[iSCSI] 将 iSCSI 会话定义为 I_T nexus 的 iSCSI 表示。在 iSCSI 上下文中,I_T nexus(即 iSCSI 会话)是 iSCSI 启动器会话端(SCSI 启动器端口)与 iSCSI 目标门户组(SCSI 目标端口)之间的关系。
-
PDU(协议数据单元):iSCSI 启动器与 iSCSI 目标使用 iSCSI 协议消息进行通信。这些消息称为“iSCSI 协议数据单元”(iSCSI PDU)。
-
SCSI 设备:SCSI 设备是包含一个或多个连接到服务交付子系统并支持 SCSI 应用协议的 SCSI 端口的实体。在 iSCSI 上下文中,SCSI 设备是 iSCSI 节点内提供 SCSI 功能的组件。SCSI 设备名称定义为节点的 iSCSI 名称。
-
会话:将启动器与目标连接起来的一组逻辑相关的 iSCSI 连接形成一个会话(相当于 SCSI I_T nexus)。iSCSI 会话中参与的 iSCSI 连接数量可能随时间变化。iSCSI 级别的多重连接对 SCSI 层完全隐藏——每个 I_T nexus 中的 SCSI 端口在整个会话的所有连接中仅看到一个对等 SCSI 端口。
2.2 缩写
| 缩写 | 定义 |
|---|---|
| ACA | 自动相关忠诚 |
| ASC | 附加感知代码 |
| ASCQ | 附加感知代码限定符 |
| CRN | 命令参考编号 |
| IETF | 互联网工程任务组 |
| ISID | 启动器会话标识符 |
| ITT | 启动器任务标签 |
| LU | 逻辑单元 |
| LUN | 逻辑单元号 |
| NIC | 网络接口卡 |
| PDU | 协议数据单元 |
| TMF | 任务管理功能 |
| TSIH | 目标会话标识句柄 |
| SAN | 存储区域网络 |
| SCSI | 小型计算机系统接口 |
| TCP | 传输控制协议 |
| UA | 单元注意 |
| WG | 工作组 |
3. iSCSI 协议概述
3.1 协议映射描述
iSCSI 协议是 SCSI 远程过程调用模型(参见 [SAM2])在 TCP 协议上的映射。
SCSI 的任务概念映射到 iSCSI 任务。每个 iSCSI 任务在该 I_T nexus 内由称为启动器任务标签(ITT)的 32 位唯一标识符唯一标识。ITT 既是任务的 iSCSI 标识符,也是经典的 SCSI 任务标签。
从启动器到目标的 SCSI 命令携带在称为 SCSI 命令 PDU 的 iSCSI 请求中。返回启动器的 SCSI 状态携带在称为 SCSI 响应 PDU 的 iSCSI 响应中。从启动器到目标的 SCSI Data-out 携带在 SCSI Data-Out PDU 中,返回启动器的 SCSI Data-in 携带在 SCSI Data-in PDU 中。
3.2 I_T Nexus 模型
在 iSCSI 模型中,SCSI I_T nexus 直接映射到 iSCSI 会话,这是一个跨越一个或多个 TCP 连接的 iSCSI 协议抽象。iSCSI 协议定义了在 I_T nexus 上实现一个逻辑双向通信流的语义,可能跨越多个 TCP 连接(最多 2^16 个)。因此,iSCSI 连接的多重性完全包含在 iSCSI 层,而 SCSI 层则呈现为一个单一的 I_T nexus,即使在多连接会话中也是如此。一对给定 iSCSI 节点之间的会话由会话标识符(SSID)标识,并且给定会话内的每个连接在 iSCSI 中由连接标识符(CID)唯一标识。SSID 本身有两个组件——启动器会话标识符(ISID)和目标会话标识句柄(TSIH)——每个标识同一会话的一端。
iSCSI 有四个关键功能方面,它们共同向 SCSI 层呈现这个单一的逻辑流抽象,即使 iSCSI 会话跨越多个 iSCSI 连接。
a) 有序命令传递:跨越会话中所有连接条带化的 SCSI 命令序列由目标 iSCSI 层基于会话中唯一的命令序列号(CmdSN)“重新排序”为相同的序列。目标是实现来自多个 TCP 连接的带宽聚合,但使目标 SCSI 层看起来好像所有命令都在一个流中传输。
b) 连接忠诚:SCSI 命令的所有 PDU 交换,直到并包括该命令的 SCSI 响应 PDU,都必须在任何给定时间在同一 iSCSI 连接上流动。这再次旨在隐藏会话的多连接性质,因为任一侧的 SCSI 层都不会看到 PDU 内容乱序(例如,状态不能绕过启动器的读取数据)。
c) 任务集管理功能处理:[iSCSI] 指定了 SCSI 目标上的 iSCSI 层处理两个管理 SCSI 任务集的任务管理功能(TMF)的有序步骤序列。这两个 TMF 是中止会话中所有活动任务的 ABORT TASK SET 和清除任务集中任务的 CLEAR TASK SET。步骤序列的目标是保证启动器在所有未受影响任务的 SCSI 响应 PDU 之前收到 TMF 响应本身,无论 iSCSI 会话中的连接数量如何。此操作模型再次旨在保留 SCSI 层的单一流抽象。
d) 立即任务管理功能处理:即使 TMF 请求被标记为“立即”(即仅在命令流中有一个位置,但不消耗 CmdSN),[iSCSI] 也定义了要求目标 iSCSI 层确保 TMF 请求被执行,就好像命令和 TMF 请求都在单一逻辑通道上流动一样。这确保 TMF 请求将作用于它要管理的任务。
以下部分将更详细地分析“有序命令传递”方面,因为命令顺序是本文档的重点。
3.3 有序命令传递
3.3.1 问题
在 iSCSI 协议设计的早期,考虑了与 iSCSI 命令顺序相关的一些重要问题。问题是:
a) 在存在传输错误的情况下,iSCSI 实现应要求什么样的命令顺序行为,例如错误以 TCP 校验和未检测到的方式损坏数据(例如,同一比特位置的两个偏移位翻转),但被 iSCSI CRC 摘要检测到?
b) [iSCSI] 是否应要求启动器和目标都使用有序命令传递?
由于这些问题的答案对于理解 iSCSI 协议所要求的顺序行为至关重要,以下子节更详细地考虑了它们。
3.3.2 会话保证
部分 3.3.1 中问题 a) 的最终处理反映在 [RFC3347] 中,“iSCSI 必须在存在传输错误的情况下,指定在启动器/目标对之间的 iSCSI 会话上严格有序地传递 SCSI 命令。”换句话说,iSCSI 摘要失败或 iSCSI 连接终止不得导致目标上的 iSCSI 层允许以不同于启动器意图(由 CmdSN 顺序指示)的顺序执行命令。此设计选择对于构建存储系统和解决方案非常有帮助,现在它们可以始终假设命令顺序是 iSCSI 底层的服务特性。
请注意,通过采取 iSCSI 会话始终保证命令顺序的立场,[iSCSI] 间接暗示多连接 iSCSI 会话抽象的主要原因是允许 I_T nexus 的有序带宽聚合。在认为 [iSCSI] 要求的跨连接顺序昂贵的部署模型中,应认真考虑部署多个单连接会话。
3.3.3 顺序责任
iSCSI 协议设计者对部分 3.3.1 中问题 b) 的最终解决是不总是要求启动器使用命令顺序。此解决反映在放弃对启动器的强制 ACA 使用要求,并允许 ABORT TASK TMF 填补命令漏洞等,因为这些是启动器有意选择不使用有序命令传递。仔细阅读 [iSCSI] 的读者可以辨别出净结果——确保有序命令传递的责任始终在 iSCSI 目标上,而启动器可能使用也可能不使用命令顺序。iSCSI 目标作为客户端 服务器模型中的服务器,并不真正尝试确定客户端(启动器)是否打算利用命令顺序服务,而是始终简单地提供保证传递服务。这里的理由是,在构建命令顺序解决方案时,存在固有的 SCSI 和应用程序级别的依赖关系,这些超出了 [iSCSI] 的范围,无法强制或甚至辨别关于命令顺序使用的意图。
3.3.4 设计意图
总结 [iSCSI] 的设计意图:
由 iSCSI 会话提供的服务交付子系统(参见 [SAM2])抽象被保证具有在所有条件下向目标 SCSI 层有序传递命令的内在属性。因此,有序命令传递的保证跨越整个 I_T nexus,涵盖该 nexus 被授权访问的所有 LU。启动器自行决定是否使用此属性。
4. 命令顺序场景
使用 SCSI 和 iSCSI 的存储系统设计者必须考虑 SCSI 和 iSCSI 层中的以下协议特性,每个特性在实现命令顺序目标中都发挥作用。
4.1 SCSI 层
SCSI 应用层有几种工具来强制顺序。
4.1.1 命令参考编号(CRN)
CRN 是一个有序序列号,当为设备服务器启用时,为每个 I_T_L nexus(参见 [SAM2])递增一。CRN 的一个显著缺点是没有 SCSI 通用方式(例如通过模式页)来启用或禁用 CRN 功能。[SAM2] 还将 CRN 的使用语义留给 SCSI 传输协议(如 iSCSI)指定。[iSCSI] 由于各种原因选择不支持 CRN 功能。
4.1.2 任务属性
[SAM2] 定义了以下四个任务属性——SIMPLE、ORDERED、HEAD OF QUEUE 和 ACA。每个到 LU 的任务可能被分配一个属性。[SAM2] 定义了每个属性向服务任务的设备服务器传达的顺序约束。特别是,对流水线命令流的 ORDERED 和 SIMPLE 属性的明智使用可以传达启动器发出的命令的精确执行模式,前提是命令在目标上以相同顺序接收。
4.1.3 自动相关忠诚(ACA)
ACA 是 LU 级别的条件,当命令(NACA 位设置为 1)以 CHECK CONDITION 完成时触发。当 ACA 触发时,它防止除具有 ACA 属性之外的所有命令执行,直到执行 CLEAR ACA 任务管理功能,同时阻止任务集中所有其他任务。有关 ACA 的详细语义,请参见 [SAM2]。由于 ACA 与任务集的概念密切相关,理想情况下,必须选择任务集的范围(通过将 LU 的控制模式页中的 TST 位设置为 1)为每个启动器,以防止一个 I_T_L nexus 中的命令失败通过 ACA 影响其他 I_T_L nexuses。
4.1.4 UA 互锁
当 UA 互锁启用时,逻辑单元不清除任何报告有自动感知的标准单元注意条件,此外,当任务以 BUSY、TASK SET FULL 或 RESERVATION CONFLICT 状态之一终止时,建立单元注意条件。这个所谓的“互锁 UA”仅在设备服务器执行来自同一启动器的显式 REQUEST SENSE([SPC3])命令时清除。从功能角度来看,UA 互锁的范围今天与 ACA 略有不同,因为它对除 CHECK CONDITION 之外的完成状态强制顺序行为,但在概念上具有与 ACA 相同的设计意图。另一方面,ACA 更为复杂,因为它允许特殊的“清理”任务(具有 ACA 属性的任务)在 ACA 活动时执行。UA 互锁出现的主要原因之一是 SCSI 设计者想要一个命令顺序功能,而没有使用上述控制模式页中的 TST 位的副作用。
4.2 iSCSI 层
如部分 3.2 和 3.3 所述,iSCSI 协议使用 CmdSN 强制执行并保证每个 iSCSI 会话的有序命令传递,这是 SCSI 传输层的一个属性。进一步注意,任何寻求实现从启动器 SCSI 层到目标 SCSI 层顺序的命令顺序解决方案,只有在 SCSI 传输层保证命令顺序时才有实用价值。换句话说,相关的 SCSI 应用层协议特性(如 ACA 等)基于有序 SCSI 传输的前提。因此,iSCSI 的命令顺序是通过提供关键保证来完成依赖有序命令执行的解决方案的拼图的最后一块,即所有交给启动器 iSCSI 层的命令将以相同顺序传输并交给目标 SCSI 层。
5. 连接故障考虑
[iSCSI] 要求当 iSCSI 连接失败时,该连接上的活动任务必须在一定的协商时间限制内终止(如果未恢复)。当 iSCSI 目标由于 iSCSI 连接动态终止某些任务子集时,存在 SCSI 层将简单地继续处理等待处理的下一个任务并在启动器 SCSI 层不知情的情况下乱序执行它们的危险。为防止此危险,[iSCSI] 进一步要求以下内容:
a) 由于连接失败而终止的任务必须由 iSCSI 目标内部终止“就好像”由于 CHECK CONDITION。虽然此特定完成状态从未传达回启动器,但“就好像”仍然有意义且必要,因为如果启动器使用 ACA 作为首选的命令顺序机制,则由于此强制 CHECK CONDITION 将触发 SCSI 级别的 ACA。这解决了上述危险。
b) 在由于连接失败终止任务后,iSCSI 目标必须在该会话的每个受影响的 I_T_L nexus 上,在下一条在任何连接上处理的命令上报告单元注意条件。这是必要的,因为如果启动器使用 UA 互锁作为首选的命令顺序机制,SCSI 级别的 UA 将触发 UA 互锁。这再次解决了上述危险。iSCSI 目标必须报告此 UA,状态为 CHECK CONDITION,ASC/ASCQ 值为 47h/7Fh(“某些命令被 iSCSI 协议事件清除”)。
6. 命令顺序系统考虑
通常,如果目标和启动器符合 iSCSI 规范,则自动强制执行命令顺序。然而,以下列出了 iSCSI 启动器和目标需要注意的某些额外相关实现考虑。
a) 即使应用了本文档先前注意到的所有 iSCSI 和 SCSI 命令顺序考虑,iSCSI 启动器主动避免导致乱序命令执行的场景也是有益的。这仅仅是因为 SCSI 命令顺序特性(如 UA 互锁)在允许触发时可能在性能上更昂贵。[iSCSI] 提供了关于如何实现此主动 PDU 顺序错误检测的足够指导。
b) 整个命令流的概念当然假设所讨论的目标支持命令排队。希望支持命令顺序解决方案的 iSCSI 目标应确保目标上的 SCSI 层支持命令排队。iSCSI 启用的远程备份(磁带存储)应用程序特别引人注目,磁带设备应非常认真地考虑支持命令排队,至少在与 iSCSI 结合使用时。
c) 希望支持涉及指定执行模式描述的高性能命令顺序解决方案的 iSCSI 目标应确保目标上的 SCSI 层确实支持 ORDERED 和 SIMPLE 任务属性。
d) 正在考虑扩大 UA 互锁的范围以包含 CHECK CONDITION 状态,从而使其成为构建命令顺序解决方案的实现所需的唯一命令顺序功能。在 T10 解决此问题之前,当前定义的 UA 互锁和 ACA 语义要求希望支持命令顺序解决方案的 iSCSI 目标实现这两个功能。
7. 保留考虑
[iSCSI] 描述了一个“保守重用原则”,鼓励 iSCSI 启动器重用相同的 ISID(参见部分 3.2)到各种 SCSI 目标端口,以向这些目标端口呈现相同的 SCSI 启动器端口名称。这实际上是一个非常关键的实现考虑,必须遵守。[SPC3] 要求 SCSI 目标在需要时,将持久保留和相关的注册与 SCSI 启动器端口名称关联。由于 [iSCSI] 要求基于 ISID 的强制 SCSI 启动器端口名称,iSCSI 目标需要基于 SCSI 启动器端口名称,从而间接基于 ISID 来强制执行持久保留。
这一事实对实现有以下影响:
a) 如果持久保留/注册旨在跨 SCSI 设备的多个 SCSI 端口使用,则启动器 iSCSI 实现必须在连接到 SCSI 设备的不同 iSCSI 目标门户组的关联 iSCSI 会话中使用相同的 ISID。
b) 如果持久保留/注册旨在跨 SCSI 目标电源丢失使用,则启动器 iSCSI 实现必须在随后的重新启动时使用与之前相同的 ISID 重新建立关联的 iSCSI 会话,以便依赖断电持续能力。
8. 安全考虑
有关使用 iSCSI 协议的安全考虑,请参阅 [iSCSI] 中的安全考虑部分。本文档未引入除 [iSCSI] 中已讨论之外的其他安全考虑。
9. 参考文献
9.1 规范性引用
[iSCSI] Satran, J., Meth, K., Sapuntzakis, C., Chadalapaka, M. 和 E. Zeidner, "互联网小型计算机系统接口(iSCSI)", RFC 3720, 2004年5月。
[SAM2] ANSI INCITS.366:2003 SCSI 体系结构模型 - 2(SAM-2)。
9.2 信息性引用
[RFC793] Postel, J., "传输控制协议", STD 7, RFC 793, 1981年9月。
[RFC2119] Bradner, S., "在 RFC 中表示需求水平的关键词", BCP 14, RFC 2119, 1997年3月。
[RFC3347] Krueger, M. 和 R. Haagens, "iSCSI 要求与设计考虑", RFC 3347, 2002年7月。
[SPC3] INCITS T10/1416-D, SCSI 主要命令-3(SPC-3)。
1849

被折叠的 条评论
为什么被折叠?



