了解Linux SCSI队列深度

我正在试验运行CentOS Linux 5.4(x86_64)的戴尔服务器上的不同SCSI队列深度值的效果。

服务器有两个通过多path连接到存储系统的QLogic QLE2560 FC HBA。 存储系统已经为服务器分配了两个LUN,每个通过四条path以主动 – 主动 – 主动 – 主动轮询configuration连接。 总而言之,这两个LUN以8个/ dev / sdX设备的forms存在,由/ dev / mpath中的两个设备表示。

我目前正在调整/etc/modprobe.conf中的队列深度值,并通过查看/ proc / scsi / sg / devices的第七列来检查结果(重启后)。

有两个相关的问题:

  • 有没有办法调整队列的深度,而无需重新启动或卸载qla2xxx内核模块? 例如,我可以在/ proc/ sys- like文件中回应一个新的队列深度值来更新队列深度吗?

  • 如果我将队列深度设置为128,那是

    • 所有由qla2xxx模块处理的设备总共128个,或者
    • 每个HBA 128个? (共256个),或者
    • 八个/ dev / sdX设备中的每一个(1024通用)?或者128个
    • 128个用于两个/ dev / mpath / …设备(总共256个)?

    这对我来说很重要,以便我的服务器不会淹没存储系统,影响与其连接的其他服务器。

通常情况下,队列深度是每个LUN /path,在rr多pathconfiguration中。 这是非常依赖于多path驱动程序的实现,你将不得不检查你的多path驱动程序的文档,你的情况是设备映射器的多path至less,AFAIR使用与ESX相同的概念,其中所有path的队列深度任何path的最小队列深度在这里看到我的例子从ESX:

ESX的本地多path将rr多pathconfiguration中的队列深度configuration为任何相关队列的最小公共深度。 即每个LUN /path的深度为32,4个path,总的队列深度只有32! 这就是为什么有些厂商提供自己的驱动程序(如EMC的powerpath)。 从性能angular度来看,全局robing负载分配ESX不会在每个IO的任何给定path上循环,默认情况下,前1000个IO将在第一个path上运行,下一个1000个IO将在每个VM基础上平滑作为单个IOpath交换机的所有path上的总负载将对每个IO产生延迟惩罚。

我的理解是在一个ESX环境下,Paths Queue Depth Luns是1024.如果CentOS不同,我会感到非常惊讶。