vmw_pvscsi.cmd_per_lun=254
vmw_pvscsi.ring_pages=32
具有密集型 I/O 模式的大规模工作负载需要比准虚拟 SCSI (PVSCSI) 默认值更大的适配器队列深度。当前的 PVSCSI 队列深度默认值分别是 64(用于设备)和 254(用于适配器)。在 Windows 虚拟机或 Linux 虚拟机中,您可以将 PVSCSI 队列深度分别增加到 256(用于设备)和 1024(用于适配器)。 null
Solution
将 PVSCSI 适配器用于请求环的页数从默认值(8 页)增加到 32 页,并将 PVSCSI 设备的队列深度设置为 254。
步骤 1:调整 Windows 虚拟机在其上运行的 ESXi 主机上 HBA 的队列深度。为虚拟机迁移到的每个主机完成以下步骤:
- 通过在服务控制台上运行相应命令,验证当前加载的 HBA 模块:
- 对于 QLogic:
# esxcli system module list | grep qla
- 对于 Emulex:
# esxcli system module list | grep lpfc
- 对于 QLogic:
- 通过运行以下命令之一将队列深度设置为 128:
- 对于 QLogic:
# esxcli system module parameters set -p ql2xmaxqdepth=128 -m qla2xxx
- 对于 Emulex:
如果主机上的所有 Emulex 卡都需要更新,则应用全局参数 lpfc_lun_queue_depth。
# esxcli system module parameters set -p lpfc0_lun_queue_depth=128 -m lpfc820
注意:以上示例显示了 QLogic qla2xxx 和 Emulex lpfc820 模块。根据上一步的结果使用相应的模块。
另请注意以下事项:
- 在以上命令中,ql2xmaxqdepth 和 lpfc0 都使用小写字母 L,而不是数字 1。
- 由 ql2x 和 lpfc0 表示的 HBA 的 LUN 队列深度设置为 128。
- 对于 QLogic:
- 重新引导主机。
- 运行以下命令验证所做更改:
# esxcli system module parameters list -m driver
其中 driver表示 QLogic 或 Emulex 适配器驱动程序模块,例如 lpfc820 或 qla2xxx。
您会看到类似于以下内容的输出:
Name Type Value Description
-------------------------- ---- ----- --------------------------------------------------
.....
ql2xmaxqdepth int 128 Maximum queue depth to report for target devices.
.....
步骤 2:在 Windows 虚拟机或 Linux 虚拟机中增加 PVSCSI 队列深度,如以下各节所述。此修改不但会将 PVSCSI 适配器用于请求环的页数增加到 32,而且会将附加到 PVSCSI 适配器的设备的队列深度增加到 254。
注意:环的默认页数是 8,并且每页的大小为 4 KB。已排队的 I/O 需要一个大小为 128 字节的条目,这意味着在大小为 4096 字节的单个页面上具有 32 个条目,因而总共有 256 个条目 (8x32)。在以前版本中,Windows PVSCSI 驱动程序适配器队列是硬编码的,但从 ESXi 5.5、5.1 U1 和 5.0 U3 中随 VMware Tools 一起提供的版本起,该队列最多可以调整到 32 页。Linux PVSCSI 驱动程序的环页数可以随 Windows 版本之前的版本一起调整。
对于 Windows 虚拟机:
- 从 Windows 虚拟机的命令行中,运行以下命令:
REG ADD HKLM\SYSTEM\CurrentControlSet\services\pvscsi\Parameters\Device /v DriverParameter /t REG_SZ /d "RequestRingPages=32,MaxQueueDepth=254"
- 重新引导虚拟机
- 验证注册表项是否创建成功:
- 通过在命令行中运行 REGEDIT 命令来打开注册表编辑器。
- 浏览到 HKLM\SYSTEM\CurrentControlSet\services\pvscsi\Parameters\Device。
- 验证 DriverParameter 项是否存在,并验证此项的值是否为 RequestRingPages=32、MaxQueueDepth=254。
对于 Linux 虚拟机:
- 在 /etc/modprobe.d/ 目录中创建包含以下行的任意名称文件:
options vmw_pvscsi cmd_per_lun=254 ring_pages=32
注意:对于 RHEL5,请使用相同的行来编辑 /etc/modprobe.conf。创建新的 initrd,以使设置生效。您可以通过使用 mkinitrd 或重新运行 vmware-config-tools.pl 来执行此操作。自版本 6 起,RHEL 使用 modprobe.d。
- 或者,您也可以将以下行附加到内核引导参数(例如,在 Red Hat Enterprise Linux 上编辑 /etc/grub.conf,或在 Ubuntu 上编辑 /boot/grub/grub.cfg)。
vmw_pvscsi.cmd_per_lun=254
vmw_pvscsi.ring_pages=32
- 重新引导虚拟机。
- 通过对以下文件使用 cat 命令来验证更改后的队列深度:
$ cat /sys/module/vmw_pvscsi/parameters/cmd_per_lun
$ cat /sys/module/vmw_pvscsi/parameters/ring_pages