iSCSI 性能分析和调优

对于在连接到系统时以及在连接到网络交换机时出现的因特网小型计算机系统接口 (iSCSI) 主机性能问题,此过程提供了解决方案。

可能影响 iSCSI 性能的一些属性和主机参数:
  • 传输控制协议 (TCP) 延迟 ACK
  • 以太网巨型帧
  • 网络瓶颈或超额预订
  • iSCSI 会话登录均衡
  • 网络上 iSCSI 的优先级流量控制 (PFC) 设置和带宽分配
  1. 禁用 TCP 延迟应答功能。
    要禁用此功能,请参阅 OS/平台文档。

    该问题的主要特征是:读性能明显低于写性能。 传输控制协议 (TCP) 延迟应答是为提高网络性能而实施 TCP 时所使用的一种方法。 但是,在此场景中,未完成 I/O 的数量为 1,此方法会明显降低 I/O 性能。

    实际上,可以将多个 ACK 响应组合到单个响应中,以降低协议开销。 如 RFC 1122 中所述,主机可以将 ACK 响应最多延迟 500 毫秒发送。 此外,如果使用完整大小的入局段流,必须每隔一个段发送一个 ACK 响应。

    Important: 必须重新引导主机以使这些设置生效。 一些平台(例如,标准 Linux 分发版)未提供用于禁用此功能的方法。 但是,V7.1 发行版已解决此问题,而且无需更改主机配置即可管理 TcpDelayedAck 行为。
  2. 为 iSCSI 启用巨型帧。

    巨型帧是指大小超过 1500 字节的以太网帧。 最大传输单元 (MTU) 参数用于度量巨型帧的大小。

    系统支持 9000 字节的 MTU。请参阅 CLI 命令 cfgportip,以启用巨型帧。当链路翻转并且通过该端口执行的 I/O 操作暂停时,该命令将中断。

    网络必须完全支持巨型帧才有效。 通过发送 ping 包(将在不分段的情况下进行传送)来验证网络是否支持巨型帧。 例如:
    • Windows:
      ping -t <iscsi target ip> -S <iscsi initiator ip> -f -l <new mtu size - packet overhead (usually 36, might differ)>
      以下命令是用于检查是否在 Windows 7 系统上正确设置了 9000 字节 MTU 的命令示例:
      ping -t -S 192.168.1.117 192.168.1.217 -f -l 8964
      以下输出是成功回复的示例:
      192.168.1.217: bytes=8964 time=1ms TTL=52
    • Linux:
      ping -l <source iscsi initatior ip> -s <new mtu size> -M do <iscsi target ip> 
    • ESXi:
      ping <iscsi target ip> -I <source iscsi initiator ip> -s <new mtu size - 28> -d
  3. 验证交换机的端口统计信息(连接了发起程序/目标端口),以确保较低的丢包率。

    查看网络体系结构以避免发生任何瓶颈和超额预订。 需要均衡网络以避免出现丢包情况;丢包会明显降低存储性能。 必须联网才能纠正此类问题。

  4. 优化并利用所有 iSCSI 端口。
    要优化系统资源利用率,必须使用所有 iSCSI 端口。
    • 将每个端口分配给一个 CPU,并且通过均衡登录,可以最大化 CPU 利用率并实现更佳性能。 理想情况下,配置与系统节点上 iSCSI 端口数量相等的子网。 使用不同子网上的 IP 配置节点的各个端口,并对其他节点执行同样的操作。 以下示例显示了理想配置:

      Node 1
      Port 1: 192.168.1.11
      Port 2: 192.168.2.21
      Port 3: 192.168.3.31

      Node 2:
      Port 1: 192.168.1.12
      Port 2: 192.168.2.22
      Port 3: 192.168.3.33

    • 请避免以下情况:有 50 台主机登录到端口 1,而只有 5 台主机登录到端口 2。
    • 使用适用的子网划分功能在会话数与冗余性之间取得平衡。
  5. 对 PFC 设置问题进行故障诊断。

    无需在系统上启用 PFC。 系统将读取数据中心桥接交换 (DCBx) 包,并且如果已在交换机上启用 PFC,那么将自动为 iSCSI 启用 PFC。 在 lsportip 命令的输出中,lossless_iscsilossless_iscsi6 字段显示 [on/off],这取决于是否为系统上的 iSCSI 启用了 PFC。

    如果 lossless_iscsilossless_iscsi6 字段显示 off,那么可能是以下某个原因:
    1. 没有为该 IP 设置 VLAN。 验证以下检查:
      • 对于 IP 地址类型 IPv4,请检查 lsportip 输出中的 vlan 字段。 该值不得为空白。
      • 对于 IP 地址类型 IPv6,请检查 lsportip 输出中的 vlan_6 字段。 该值不得为空白。
      • 如果 vlanvlan_6 字段为空白,请使用为 iSCSI 配置 VLAN 来为 IP 类型设置 VLAN。
    2. 没有为该 IP 设置主机标志。 验证以下检查:
      • 对于 IP 地址类型 IPv4,请检查 lsportip 输出中的 host 字段。 它必须是 yes
      • 对于 IP 地址类型 IPv6,请检查 lsportip 输出中的 host_6 字段。 它必须是 yes
      • 如果 hosthost_6 字段不是 yes,请使用 cfgportip CLI 命令为 IP 类型设置主机标志。
    3. 未在交换机上正确设置 PFC。

      如果已正确设置 VLAN 并且也设置了主机标志,但 lossless_iscsilossless_iscsi6 字段仍显示 off,那么某些交换机设置可能缺失或不正确。

      验证交换机中的以下设置:

      • 为 iSCSI 流量设置了优先级标记。
      • 为分配给 iSCSI CoS 的优先级标记启用了 PFC。
      • 在交换机上启用了 DCBx。
      查看相应文档:
      • 请参考文档,以在特定交换机上启用 PFC。
      • 请参考文档,以在特定于您配置的 Red Hat Enterprise Linux (RHEL) 和 Windows 主机上启用 PFC。
  6. 确保在网络上为 iSCSI 分配合适的带宽。

    可以在各种类型的流量之间划分带宽。 分配合适的带宽以获得良好性能,这一点很重要。 要为 iSCSI 流量分配带宽,必须先为 iSCSI 启用优先级流量控制。