iSCSI 主机中的队列深度

在 iSCSI 网络中,队列深度是可在某一设备上并行运行的 I/O 操作数。

配置服务器以限制包含许多服务器或卷的配置中卷的所有路径上的队列深度。

如果配置中的若干服务器处于空闲状态或未启动所计算数量的 I/O 操作,那么可能无需限制队列深度。

iSCSI 网络中的队列深度限制

队列深度是可在某一设备上并行运行的 I/O 操作数。 如果要为 iSCSI 网络设计一个配置,那么必须估算每个节点的队列深度以避免应用程序故障。

如果节点达到已排队命令的最大数量,那么它将向主机返回错误代码,例如 Resource unavailable。 许多操作系统在该情况持续超过 15 秒的情况下无法恢复。 无法恢复可能会导致一台或多台服务器向应用程序显示错误,并在服务器上显示应用程序故障。

队列深度计算公式考虑以下因素:
  • 最大已排队命令数对于每个节点进行计算。 一个 I/O 组包含两个节点。 I/O 组中的一个节点不可用时,系统必须继续运行。
  • 如果卷被映射为让多个服务器都可以看到,那么这些服务器中的每一个都可以向其发送命令。
  • 如果设备驱动程序在执行命令时超时,那么它会立即重新发出该命令。 这些命令存储在命令队列中。

计算队列深度限制后,必须应用该限制。 每个操作系统都有特定方法来对每个卷都限制队列深度;请参阅您的主机操作系统文档来更改队列深度。

iSCSI 主机中的均匀队列深度计算

将同构队列深度设置为 iSCSI 主机中的计算值。

使用计算来设置服务器上每个卷的队列深度:

  • q = (n/(v * c)) * 0.75
其中
  • n = 每个 I/O 组的所允许命令池;此值固定为 4000
  • v = 所考虑特定 I/O 组的每个服务器卷数
  • c = I/O 组中的服务器数

因此,q = (4000/(v * c)) * 0.75

示例

假设系统具有 20 个主机服务器 (c = 20),每个服务器映射了 20 个卷 (v = 20)。 对于此配置,队列深度的值为 q = (4000/(20 * 20)) * 0.75 = 7.5 (或 7 的下限)。

如果派生队列深度的值超过特定主机操作系统上允许的最大值,请使用最小值 2。

表 1概述了一些常见的主机服务器配置,其中考虑了映射到每个主机服务器的 20 个卷。

表 1. 常用队列深度配置
每个 I/O 组的 iSCSI 主机数 <20 20-40 6400
建议的队列深度 七(或者主机操作系统允许的最大值,取两者中的较小值) 三至四(或者主机操作系统允许的最大值,取两者中的较小值)

iSCSI 主机中的非均匀队列深度计算

了解非均匀队列的特定标准之后,您可以在 iSCSI 主机中计算其队列深度。

非均匀队列满足以下条件之一:
  • 必须向一个或多个服务器分配更多资源,使这些服务器可对更多命令进行排队。
  • 卷不得在集群系统中的 I/O 组之间均匀分布。

对于每个卷,均考虑 I/O 组中该卷所映射到的每个服务器。 此映射将生成一组服务器/卷对。 如果全部这些对的服务器和卷队列深度之和小于 4000,那么服务器不会遇到由队列已满导致的问题。