什么是 HBA 队列深度以及如何检查当前队列深度值以及如何更改它

什么是光纤通道 HBA 队列深度

队列深度指示在与 SAN 存储通信时已请求但尚未确认已完成的“进行中”I/O 请求的数量。
这些请求可以根据访问的或者基于 HBA 的单个逻辑单元号 (LUN) 进行配置。
最大队列深度描述了最大允许在飞行中的请求值。
最大队列深度设置可以显着影响存储性能。

应谨慎选择最大队列深度。
低值会导致 I/O 性能不佳。
高值还可能导致性能不佳,因为 SAN 目标未以最佳方式使用缓存/调度。
不仅单个 HBA 的队列深度,而且连接到 SAN 目标上的存储端口的所有 HBA 的队列深度都会影响彼此的性能。
SAN 目标的供应商可能对要使用的最大队列深度有建议。
进一步的相关因素是:

  • 连接到目标的 HBA 端口数
  • 由系统上运行的应用程序生成的 I/O 模式

更改 Emulex HBA 的队列深度

对于 Emulex HBA,当前无法动态修改最大队列深度,需要使用新参数卸载/加载模块,或者重新启动整个系统。
Emulex HBA 支持以下选项来影响队列深度:

# modinfo lpfc|grep queue_depth 
parm: lpfc_lun_queue_depth:Max number of FCP commands we can queue to a specific LUN (uint) 
parm: lpfc_hba_queue_depth:Max number of FCP commands we can queue to a lpfc HBA (uint)

这些选项可以在 /etc/modprobe.conf 或者目录 /etc/modprobe.d 中的文件和重建的 initrd 镜像中使用。

lpfc 的默认值也可以从 /sys/module/lpfc/parameters/ 中检查。
但请注意,这些值无法修改(没有“w”权限)

# ls -lrt /sys/module/lpfc/parameters/ 
-r--r--r--. 1 root root 4096 Jan 19 13:55 lpfc_hba_queue_depth
-r--r--r--. 1 root root 4096 Jan 19 13:55 lpfc_lun_queue_depth
-r--r--r--. 1 root root 4096 Jan 19 13:55 lpfc_tgt_queue_depth
www. On IT Road .com

更改 Qlogic HBA 的队列深度

要知道当前队列深度值 qdepth,请运行以下命令:

# cat /sys/module/qla2xxx/parameters/ql2xmaxqdepth
32

上面的例子返回“32”。

要设置/更改 qdepth 值,可以使用 sysfs,不需要卸载/加载模块。
以下更改 ql2xmaxqdepth:

# echo 16 > /sys/module/qla2xxx/parameters/ql2xmaxqdepth

要以某种方式设置 qdepth 值,以便在系统重新启动后也配置它们,请更改 qla2xxx 驱动程序中 ql2xmaxqdepth 选项的值:

# modinfo qla2xxx | grep ql2xmaxqdepth
parm: ql2xmaxqdepth:Maximum queue depth to set for each LUN. Default is 32. (int)

需要将以下条目添加到 /etc/modprobe.conf 或者目录 /etc/modprobe.d 中的文件中,并重建 initrd 镜像以使更改永久生效:

# vi /etc/modprobe.conf
alias scsi_hostadapter1 qla2xxx
options qla2xxx ql2xmaxqdepth=16
日期:2020-09-17 00:11:04 来源:oir作者:oir