![了解 Linux SCSI 队列深度](https://linux22.com/image/508822/%E4%BA%86%E8%A7%A3%20Linux%20SCSI%20%E9%98%9F%E5%88%97%E6%B7%B1%E5%BA%A6.png)
我正在试验运行 CentOS Linux 5.4(x86_64)的戴尔服务器上不同 SCSI 队列深度值的影响。
服务器有两个 QLogic QLE2560 FC HBA,通过多路径连接到存储系统。存储系统已为服务器分配两个 LUN,每个 LUN 通过四条路径以主动-主动-主动-主动循环配置连接。总而言之,这两个 LUN 以八个/dev/sdX设备,由两个设备表示/dev/mpath。
我目前调整队列深度值/etc/modprobe.conf并通过查看第七列来检查结果(重新启动后)/proc/scsi/sg/设备。
与此相关的两个问题:
有没有办法调整队列深度而无需重新启动或卸载 qla2xxx 内核模块?例如,我可以将新的队列深度值回显到某些/进程或者/系统类似文件来更新队列深度?
如果我将队列深度设置为 128,那么
- qla2xxx 模块处理的所有设备总共有 128 个?或者
- 每个 HBA 128 个?(总共 256 个),或者
- 八个 /dev/sdX 设备各 128 个(总共 1024 个)?或者
- 两个 /dev/mpath/... 设备各 128 个(总共 256 个)?
了解这一点对我来说很重要,这样我的服务器就不会淹没存储系统,影响与其连接的其他服务器。
答案1
在 rr 多路径配置中,队列深度通常按 LUN/路径计算。它非常依赖于多路径驱动程序的实现,您必须查看多路径驱动程序的文档,在您的情况下,它是设备映射器的多路径,据我所知,它使用与 ESX 相同的概念,其中所有路径的队列深度是任何路径的最小队列深度,请参见此处的 ESX 示例:
ESX 的本机多路径将 rr 多路径配置中的队列深度配置为所有相关队列的最小公共深度。即,每个 LUN/路径的深度为 32,4 条路径的总队列深度仅为 32!这就是一些供应商提供自己的驱动程序(如 EMC 的 powerpath)的原因。从性能角度来看,循环负载分配 ESX 不会在每个 IO 的任何给定路径上循环,默认情况下,前 1000 个 IO 会通过第一条路径,接下来的 1000 个 IO 会根据每个 VM 进行下一条路径的调度,这应该会平滑所有路径上的整体负载,因为每个单个 IO 路径切换都会对每个 IO 产生延迟惩罚。
答案2
我对此的理解来自 ESX 环境,其中路径队列深度Luns 将是 1024。如果 CentOS 有所不同,我会感到非常惊讶。