如果 ESXi 主机对 LUN 生成的命令超过 LUN 队列深度所允许的数量,则超出的命令会在 VMkernel 中排队。
这会增加滞后时间,或是完成 I/O 请求所需的时间。
问题
主机完成 I/O 请求所需的时间更长,且虚拟机会显示性能不佳。
原因
这个问题可能是由于 LUN 队列深度不够而引起的。SCSI 设备驱动程序有一个名为 LUN 队列深度的可配置参数,可确定向给定 LUN 发出的命令中同时处于活动状态的数量。如果主机对 LUN 生成过多的命令,则超出的命令会在 VMkernel 中排队。
解决方案
1 如果所有虚拟机中活动命令的总和总是超出 LUN 深度,则会增加队列深度。
用于增加队列深度的过程取决于主机使用的存储适配器类型。
2 调整
Disk.SchedNumReqOutstanding 参数,使其与队列深度值匹配。
调整 QLogic 和 Emulex HBA 的队列深度
如果您对主机的性能不满意,请更改 QLogic 或 Emulex HBA 的最大队列深度。
要调整最大队列深度参数,请使用 vCLI 命令。
在此过程中,--server=server_name 指定目标服务器。指定的目标服务器会提示您输入用户名和密码。支持其他连接选项,如配置文件或会话文件。有关连接选项的列表,请参见 vSphere 命令行界面入门.
前提条件
安装 vCLI 或部署 vSphere Management Assistant (vMA) 虚拟机。请参见 vSphere 命令行界面入门。要进行故障排除,请在 ESXi Shell 中运行 esxcli 命令。
步骤
1 通过输入以下命令之一确认当前正在加载的 HBA 模块:
对于 QLogic:esxcli --server=server_name system module list |grep qla
对于 Emulex:esxcli --server=server_name system module list |grep lpfc
2 调整相应模块的队列深度。
注意 这些示例显示了 QLogic qla2xxx 和 Emulex lpfc820 模块。请使用与上一步骤的输出相对应的模块。
对于 QLogic:
esxcli --server=server_name system module parameters set -m qla2xxx -p ql2xmaxqdepth=value
对于 Emulex:
esxcli --server=server_name system module parameters set -m lpfc820 -p
lpfc0_lun_queue_depth=value
3 重新引导主机。
4 通过运行以下命令确认更改:
esxcli --server=server_name system module parameters list -m=module。
module 为 QLogic 或 Emulex 模块,如 lpfc820 或 qla2xxx。
调整软件 iSCSI 的最大队列深度
如果发现软件 iSCSI LUN 的性能不佳,请通过运行 esxcli 命令来更改其最大队列深度。
前提条件
安装 vCLI 或部署 vSphere Management Assistant (vMA) 虚拟机。请参见 vSphere 命令行界面入门。要进
行故障排除,可以在 ESXi Shell 中运行 esxcli 命令。
在此过程中,--server=server_name 连接选项指定目标服务器。准备好在目标服务器提示您时输入用户名和密码。有关其他可能的连接选项的列表,请参见 vSphere 命令行界面入门。
步骤
1 运行下列命令:
esxcli --server=server_name system module parameters set -m iscsi_vmk -p
iscsivmk_LunQDepth=value
iscsivmk_LunQDepth 参数用于为通过软件 iSCSI 适配器访问的每个 LUN 设置最大未完成命令数或队列深
度。默认值为 128。
2 重新引导系统。
3 通过运行 esxcli --server=server_name system module parameters list -m iscsi_vmk 命令来确认所做的更改。
小心 将队列深度设置为高于默认值的值,可减少受支持 LUN 的总数。
更改虚拟机未完成磁盘请求的最大数目
如果调整了 LUN 队列深度,请更改
Disk.SchedNumReqOutstanding 参数,以便其值与队列深度匹配。该参数控制每个虚拟机可以向 LUN 发出的未完成请求的最大数目。
仅当有多个虚拟机在 LUN 上处于活动状态时才更改此参数。此参数不适用于 LUN 上只有一个虚拟机处于活动状态的情况。在这种情况下,带宽由存储适配器的队列深度限制。
步骤
1 在 vSphere Client 清单面板中选择主机。
2 单击配置选项卡,然后单击“软件”下的高级设置。
3 在左侧面板中单击磁盘,并向下滚动至
Disk.SchedNumReqOutstanding。
4 将参数值更改为所选的数字并单击确定。
此更改可对磁盘带宽调度产生影响,但是实验结果证明此更改对磁盘密集型工作负载有改善作用。