适用于 Linux 的 BusLogic MultiMaster 和 FlashPoint SCSI 驱动程序

适用于 Linux 2.0 的 2.0.15 版本

适用于 Linux 2.1 的 2.1.15 版本

生产版本

1998 年 8 月 17 日

Leonard N. Zubkoff

Dandelion Digital

lnz@dandelion.com

Copyright 1995-1998 by Leonard N. Zubkoff <lnz@dandelion.com>

简介

BusLogic, Inc. 设计和制造了各种高性能 SCSI 主机适配器,由于其 MultiMaster ASIC 技术,这些适配器在不同的总线架构之间共享一个通用的编程接口。BusLogic 于 1996 年 2 月被 Mylex Corporation 收购,但此驱动程序支持的产品起源于 BusLogic 的名称,因此该名称保留在源代码和文档中。

此驱动程序支持所有当前的 BusLogic MultiMaster 主机适配器,并且应该在几乎无需修改的情况下支持任何未来的 MultiMaster 设计。最近,BusLogic 推出了 FlashPoint 主机适配器,这些适配器的成本较低,并且依赖于主机 CPU,而不是包含板载处理器。尽管没有板载 CPU,FlashPoint 主机适配器的性能非常好,并且命令延迟非常低。BusLogic 最近向我提供了 FlashPoint 驱动程序开发人员工具包,其中包含 FlashPoint SCCB 管理器的文档和可自由再分发的源代码。SCCB 管理器是在主机 CPU 上运行的代码库,其功能类似于 MultiMaster 主机适配器上的固件。感谢他们提供了 SCCB 管理器,此驱动程序现在也支持 FlashPoint 主机适配器。

我为 Linux 编写这个全新的 BusLogic 驱动程序的主要目标是实现 BusLogic SCSI 主机适配器和现代 SCSI 外围设备所能达到的全部性能,并提供一个高度健壮的驱动程序,该驱动程序可以依靠它来完成高性能关键任务应用程序。所有主要的性能特性都可以从 Linux 内核命令行或模块初始化时进行配置,允许各个安装调整驱动程序性能和错误恢复以满足其特定需求。

有关 Linux 对 BusLogic SCSI 主机适配器的支持的最新信息,以及此驱动程序的最新版本和 BT-948/958/958D 的最新固件,始终可以从我的 Linux 主页 “http://sourceforge.net/projects/dandelion/” 中获得。

错误报告应通过电子邮件发送至 “lnz@dandelion.com”。请在错误报告中包含驱动程序和 SCSI 子系统在启动时报告的完整配置消息,以及任何与 SCSI 操作相关的后续系统消息,以及对系统硬件配置的详细描述。

与 Mylex 合作非常愉快,我强烈向 Linux 社区推荐他们的产品。1995 年 11 月,我获得了成为他们最新 MultiMaster 产品 BT-948 PCI Ultra SCSI 主机适配器的 Beta 测试站点的机会,然后在 1996 年 1 月再次成为 BT-958 PCI Wide Ultra SCSI 主机适配器的 Beta 测试站点。这互惠互利,因为 Mylex 获得了他们自己的测试组无法轻易实现的测试程度和类型,并且 Linux 社区可以使用在上市之前就已经通过 Linux 充分测试过的高性能主机适配器。这种关系也使我有机会直接与他们的技术人员互动,更多地了解他们产品的内部工作原理,并反过来教育他们了解 Linux 社区的需求和潜力。

最近,Mylex 重申了公司对支持 Linux 社区的兴趣,我目前正在为 DAC960 PCI RAID 控制器开发 Linux 驱动程序。非常感谢 Mylex 的兴趣和支持。

与一些其他供应商不同,如果您在运行 Linux 时遇到问题联系 Mylex 技术支持,他们不会告诉您使用其产品不受支持。他们最新的产品营销资料甚至声明“Mylex SCSI 主机适配器与所有主要操作系统兼容,包括:... Linux ...”。

Mylex Corporation 位于美国加利福尼亚州弗里蒙特市阿登伍德大道 34551 号,邮编 94555,可以通过 510/796-6100 联系,也可以通过万维网 http://www.mylex.com 联系。Mylex HBA 技术支持可以通过电子邮件 techsup@mylex.com 联系,也可以通过电话 510/608-2400 或传真 510/745-7715 联系。欧洲和日本办事处的联系信息可在网站上找到。

驱动程序特性

配置报告和测试

在系统初始化期间,驱动程序会详细报告主机适配器的硬件配置,包括与每个目标设备请求和协商的同步传输参数。会为每个目标设备报告同步协商、宽协商和断开/重连的 AutoSCSI 设置,以及标记队列的状态。如果所有目标设备都采用相同的设置,则使用一个词或短语;否则,将为每个目标设备提供一个字母来指示各个状态。以下示例应阐明此报告格式

同步协商:Ultra

为所有目标设备启用同步协商,主机适配器将尝试协商 20.0 兆传输/秒。

同步协商:Fast

为所有目标设备启用同步协商,主机适配器将尝试协商 10.0 兆传输/秒。

同步协商:Slow

为所有目标设备启用同步协商,主机适配器将尝试协商 5.0 兆传输/秒。

同步协商:Disabled

禁用同步协商,所有目标设备都限制为异步操作。

同步协商:UFSNUUU#UUUUUUUU

为目标设备 0 和 4 到 15 启用超高速同步协商,为目标设备 1 启用快速同步协商,为目标设备 2 启用慢速同步协商,并且不允许目标设备 3。主机适配器的 SCSI ID 由“#”表示。

宽协商、断开/重连和标记队列的状态报告为“Enabled”、“Disabled”或“Y”和“N”字母的序列。

性能特性

BusLogic SCSI 主机适配器直接实现 SCSI-2 标记队列,因此驱动程序中包含了对任何报告具有标记队列功能的目标设备使用标记队列的支持。标记队列允许向每个目标设备或逻辑单元发出多个未完成的命令,并且可以显着提高 I/O 性能。此外,BusLogic 的严格循环模式用于优化主机适配器性能,并且分散/聚集 I/O 可以支持 Linux I/O 子系统可以有效利用的尽可能多的段。可以通过内核命令行或模块初始化时提供的驱动程序选项来控制每个目标设备使用标记队列,以及单独选择标记队列深度。默认情况下,队列深度会根据主机适配器的总队列深度以及找到的目标设备的数量、类型、速度和功能自动确定。此外,如果已知主机适配器固件版本未正确实现标记队列,或者选择了标记队列深度 1,则会自动禁用标记队列。如果禁用该设备的断开/重连,也会为各个目标设备禁用标记队列。

健壮性特性

该驱动程序实现了广泛的错误恢复程序。当 SCSI 子系统的高层部分请求重置超时的命令时,会根据 SCSI 子系统的建议,在完全重置主机适配器和 SCSI 总线与向单个目标设备发送总线设备重置消息之间做出选择。错误恢复策略可以通过驱动程序选项为每个目标设备单独选择,并且还包括向与正在重置的命令关联的特定目标设备发送总线设备重置,以及完全抑制错误恢复以避免干扰功能不正常的设备。如果选择了总线设备重置错误恢复策略,并且发送总线设备重置无法恢复正常操作,则下一个被重置的命令将强制进行完全主机适配器硬重置和 SCSI 总线重置。由其他设备引起的并由主机适配器检测到的 SCSI 总线重置也会通过向主机适配器发出软重置并重新初始化来处理。最后,如果标记队列处于活动状态,并且在 10 分钟间隔内发生多次命令重置,或者如果命令重置发生在操作的前 10 分钟内,则将为该目标设备禁用标记队列。这些错误恢复选项通过防止单个错误的设备导致整个系统锁定或崩溃来提高整体系统稳健性,从而允许在移除有问题的组件后进行干净的关闭和重启。

PCI 配置支持

在运行启用 PCI BIOS 支持编译的内核的 PCI 系统上,此驱动程序将查询 PCI 配置空间并使用系统 BIOS 分配的 I/O 端口地址,而不是 ISA 兼容的 I/O 端口地址。然后,驱动程序会禁用 ISA 兼容的 I/O 端口地址。在 PCI 系统上,还建议使用 AutoSCSI 实用程序完全禁用 ISA 兼容的 I/O 端口,因为它是没有必要的。在 BT-948/958/958D 上,默认情况下禁用 ISA 兼容的 I/O 端口。

/proc 文件系统支持

主机适配器配置信息的副本以及更新的数据传输和错误恢复统计信息可通过 /proc/scsi/BusLogic/<N> 接口获得。

共享中断支持

在支持共享中断的系统上,任意数量的 BusLogic 主机适配器可以共享同一中断请求通道。

支持的主机适配器

以下列表包含截至本文档发布之日支持的 BusLogic SCSI 主机适配器。建议购买不在下表中的 BusLogic 主机适配器的任何人事先与作者联系,以验证它是否受支持或将受支持。

FlashPoint 系列 PCI 主机适配器

FlashPoint LT (BT-930)

Ultra SCSI-3

FlashPoint LT (BT-930R)

带有 RAIDPlus 的 Ultra SCSI-3

FlashPoint LT (BT-920)

Ultra SCSI-3(不带 BIOS 的 BT-930)

FlashPoint DL (BT-932)

双通道 Ultra SCSI-3

FlashPoint DL (BT-932R)

带有 RAIDPlus 的双通道 Ultra SCSI-3

FlashPoint LW (BT-950)

Wide Ultra SCSI-3

FlashPoint LW (BT-950R)

带有 RAIDPlus 的 Wide Ultra SCSI-3

FlashPoint DW (BT-952)

双通道 Wide Ultra SCSI-3

FlashPoint DW (BT-952R)

带有 RAIDPlus 的双通道 Wide Ultra SCSI-3

MultiMaster “W” 系列主机适配器

BT-948

PCI

Ultra SCSI-3

BT-958

PCI

Wide Ultra SCSI-3

BT-958D

PCI

Wide 差分 Ultra SCSI-3

MultiMaster “C” 系列主机适配器

BT-946C

PCI

Fast SCSI-2

BT-956C

PCI

Wide Fast SCSI-2

BT-956CD

PCI

Wide 差分 Fast SCSI-2

BT-445C

VLB

Fast SCSI-2

BT-747C

EISA

Fast SCSI-2

BT-757C

EISA

Wide Fast SCSI-2

BT-757CD

EISA

Wide 差分 Fast SCSI-2

MultiMaster “S” 系列主机适配器

BT-445S

VLB

Fast SCSI-2

BT-747S

EISA

Fast SCSI-2

BT-747D

EISA

差分 Fast SCSI-2

BT-757S

EISA

Wide Fast SCSI-2

BT-757D

EISA

Wide 差分 Fast SCSI-2

BT-742A

EISA

SCSI-2(742A 修订版 H)

MultiMaster “A” 系列主机适配器

BT-742A

EISA

SCSI-2(742A 修订版 A - G)

此驱动程序还支持真正的 BusLogic MultiMaster 克隆的 AMI FastDisk 主机适配器。

BusLogic SCSI 主机适配器既可以作为裸板包装,也可以作为零售套件包装。上面的 BT- 型号指的是裸板包装。零售套件的型号是通过将上述列表中的 BT- 替换为 KT- 来找到的。零售套件包括裸板和手册,以及裸板不提供的布线和驱动程序介质和文档。

FlashPoint 安装说明

RAIDPlus 支持

FlashPoint 主机适配器现在包含 RAIDPlus,Mylex 的可引导软件 RAID。Linux 不支持 RAIDPlus,并且没有计划支持它。Linux 2.0 中的 MD 驱动程序提供级联 (LINEAR) 和条带化 (RAID-0),并且可以单独获得镜像 (RAID-1)、固定奇偶校验 (RAID-4) 和分布式奇偶校验 (RAID-5) 的支持。内置的 Linux RAID 支持通常更灵活,并且预计比 RAIDPlus 执行得更好,因此在 BusLogic 驱动程序中包含 RAIDPlus 支持的动力不大。

启用 UltraSCSI 传输

FlashPoint 主机适配器的配置设置为“出厂默认”设置,该设置是保守的,不允许协商 UltraSCSI 速度。当这些主机适配器安装在电缆或终端不足以进行 UltraSCSI 操作的系统,或者现有 SCSI 设备未正确响应 UltraSCSI 速度的同步传输协商时,这会导致问题减少。AutoSCSI 可以用于加载“最佳性能”设置,该设置允许与所有设备协商 UltraSCSI 速度,或者可以单独启用 UltraSCSI 速度。建议在加载“最佳性能”设置后手动禁用 SCAM。

BT-948/958/958D 安装说明

BT-948/958/958D PCI Ultra SCSI 主机适配器具有一些功能,在某些情况下在安装 Linux 时可能需要注意。

PCI I/O 端口分配

当配置为出厂默认设置时,BT-948/958/958D 将仅识别主板 PCI BIOS 所做的 PCI I/O 端口分配。BT-948/958/958D 不会响应以前的 BusLogic SCSI 主机适配器响应的任何 ISA 兼容 I/O 端口。此驱动程序支持 PCI I/O 端口分配,因此这是首选配置。但是,如果由于任何原因必须使用过时的 BusLogic 驱动程序,例如 Linux 发行版尚未在其启动内核中使用此驱动程序,则 BusLogic 提供了一个 AutoSCSI 配置选项来启用旧的 ISA 兼容 I/O 端口。

要启用此向后兼容性选项,请在系统启动时通过 Ctrl-B 调用 AutoSCSI 实用程序,然后选择“Adapter Configuration”、“View/Modify Configuration”,然后将“ISA Compatible Port”设置从“Disable”更改为“Primary”或“Alternate”。安装此驱动程序后,应将“ISA Compatible Port”选项设置回“Disable”,以避免将来可能出现的 I/O 端口冲突。较旧的 BT-946C/956C/956CD 也具有此配置选项,但出厂默认设置为“Primary”。

PCI 插槽扫描顺序

在具有多个 BusLogic PCI 主机适配器的系统中,与 BT-946C/956C/956CD 相比,使用 BT-948/958/958D 扫描 PCI 插槽的顺序可能会颠倒。为了使从 SCSI 磁盘启动正常工作,主机适配器的 BIOS 和内核必须就哪个磁盘是启动设备达成一致,这需要它们以相同的顺序识别 PCI 主机适配器。主板的 PCI BIOS 提供了一种枚举 PCI 主机适配器的标准方法,Linux 内核使用该方法。某些 PCI BIOS 实现按总线号和设备号递增的顺序枚举 PCI 插槽,而另一些则按相反的方向枚举。

不幸的是,Microsoft 决定 Windows 95 将始终按总线号和设备号递增的顺序枚举 PCI 插槽,而不管 PCI BIOS 枚举如何,并要求主机适配器的 BIOS 支持其方案才能获得 Windows 95 认证。因此,BT-948/958/958D 的出厂默认设置按总线号和设备号递增的顺序枚举主机适配器。要禁用此功能,请在系统启动时通过 Ctrl-B 调用 AutoSCSI 实用程序,选择“Adapter Configuration”、“View/Modify Configuration”,按 Ctrl-F10,然后将“Use Bus And Device # For PCI Scanning Seq.”选项更改为 OFF。

此驱动程序将查询 PCI 扫描顺序选项的设置,以便以与主机适配器的 BIOS 枚举的顺序相同的顺序识别主机适配器。

启用 UltraSCSI 传输

BT-948/958/958D 的配置设置为“出厂默认”设置,该设置是保守的,不允许协商 UltraSCSI 速度。当这些主机适配器安装在电缆或终端不足以进行 UltraSCSI 操作的系统,或者现有 SCSI 设备未正确响应 UltraSCSI 速度的同步传输协商时,这会导致问题减少。AutoSCSI 可以用于加载“最佳性能”设置,该设置允许与所有设备协商 UltraSCSI 速度,或者可以单独启用 UltraSCSI 速度。建议在加载“最佳性能”设置后手动禁用 SCAM。

驱动程序选项

BusLogic 驱动程序选项可以通过 Linux 内核命令行或通过可加载内核模块安装工具指定。可以通过用分号分隔选项字符串,或者在命令行上指定多个“BusLogic=”字符串来指定多个主机适配器的驱动程序选项。单个主机适配器的各个选项规范用逗号分隔。探测和调试选项适用于所有主机适配器,而其余选项仅分别适用于选定的主机适配器。

BusLogic 驱动程序探测选项包括以下内容

NoProbe

“NoProbe”选项禁用所有探测,因此不会检测到任何 BusLogic 主机适配器。

NoProbePCI

“NoProbePCI”选项禁用 PCI 配置空间的查询,因此只会检测到 ISA Multimaster 主机适配器,以及将其 ISA 兼容 I/O 端口设置为“Primary”或“Alternate”的 PCI Multimaster 主机适配器。

NoSortPCI

“NoSortPCI”选项强制按 PCI BIOS 提供的顺序枚举 PCI MultiMaster 主机适配器,忽略 AutoSCSI “Use Bus And Device # For PCI Scanning Seq.”选项的任何设置。

MultiMasterFirst

“MultiMasterFirst” 选项强制在 FlashPoint 主机适配器之前探测 MultiMaster 主机适配器。默认情况下,如果同时存在 FlashPoint 和 PCI MultiMaster 主机适配器,则此驱动程序将首先探测 FlashPoint 主机适配器,除非 BIOS 主磁盘由第一个 PCI MultiMaster 主机适配器控制,在这种情况下,将首先探测 MultiMaster 主机适配器。

FlashPointFirst

“FlashPointFirst” 选项强制在 MultiMaster 主机适配器之前探测 FlashPoint 主机适配器。

BusLogic 驱动程序标签队列选项允许显式指定每个目标设备的队列深度以及是否允许标签队列(假设目标设备支持标签队列)。队列深度是允许并发执行(无论是向主机适配器还是目标设备)的 SCSI 命令的数量。请注意,显式启用标签队列可能会导致问题;提供启用或禁用标签队列的选项主要是为了允许在未正确实现标签队列的目标设备上禁用标签队列。以下选项可用:

QueueDepth:<整数>

“QueueDepth:” 或 “QD:” 选项指定用于所有支持标签队列的目标设备的队列深度,以及不支持标签队列的设备的最大队列深度。如果未提供队列深度选项,则将根据主机适配器的总队列深度以及检测到的目标设备的数量、类型、速度和功能自动确定队列深度。不支持标签队列的目标设备的队列深度始终设置为 BusLogic_UntaggedQueueDepth 或 BusLogic_UntaggedQueueDepthBB,除非提供了较低的队列深度选项。队列深度为 1 会自动禁用标签队列。

QueueDepth:[<整数>,<整数>...]

“QueueDepth:[...]” 或 “QD:[...]” 选项分别指定每个目标设备的队列深度。如果省略 <整数>,则将自动选择关联目标设备的队列深度。

TaggedQueuing:Default

“TaggedQueuing:Default” 或 “TQ:Default” 选项允许基于 BusLogic 主机适配器的固件版本以及队列深度是否允许排队多个命令来使用标签队列。

TaggedQueuing:Enable

“TaggedQueuing:Enable” 或 “TQ:Enable” 选项为此主机适配器上的所有目标设备启用标签队列,覆盖任何原本会基于主机适配器固件版本施加的限制。

TaggedQueuing:Disable

“TaggedQueuing:Disable” 或 “TQ:Disable” 选项为此主机适配器上的所有目标设备禁用标签队列。

TaggedQueuing:<Target-Spec>

“TaggedQueuing:<Target-Spec>” 或 “TQ:<Target-Spec>” 选项分别控制每个目标设备的标签队列。<Target-Spec> 是 “Y”、“N” 和 “X” 字符的序列。“Y” 启用标签队列,“N” 禁用标签队列,“X” 接受基于固件版本的默认值。第一个字符指的是目标设备 0,第二个字符指的是目标设备 1,依此类推;如果 “Y”、“N” 和 “X” 字符的序列未涵盖所有目标设备,则未指定的字符假定为 “X”。

BusLogic 驱动程序杂项选项包括以下内容:

BusSettleTime:<秒数>

“BusSettleTime:” 或 “BST:” 选项指定总线稳定时间(以秒为单位)。总线稳定时间是在主机适配器硬复位(启动 SCSI 总线复位)和发出任何 SCSI 命令之间等待的时间量。如果未指定,则默认为 BusLogic_DefaultBusSettleTime。

InhibitTargetInquiry

“InhibitTargetInquiry” 选项禁止在 MultiMaster 主机适配器上执行“查询目标设备”或“查询已安装设备”命令。这对于一些旧的目标设备可能是必要的,因为这些设备在寻址高于 0 的逻辑单元时无法正确响应。

BusLogic 驱动程序调试选项包括以下内容:

TraceProbe

“TraceProbe” 选项启用主机适配器探测的跟踪。

TraceHardwareReset

“TraceHardwareReset” 选项启用主机适配器硬件复位的跟踪。

TraceConfiguration

“TraceConfiguration” 选项启用主机适配器配置的跟踪。

TraceErrors

“TraceErrors” 选项启用从目标设备返回错误的 SCSI 命令的跟踪。将打印每个失败的 SCSI 命令的 CDB 和 Sense 数据。

Debug

“Debug” 选项启用所有调试选项。

以下示例演示如何将第一个主机适配器上的目标设备 1 和 2 的队列深度设置为 7 和 15,将第二个主机适配器上所有目标设备的队列深度设置为 31,以及将第二个主机适配器的总线稳定时间设置为 30 秒。

Linux 内核命令行

linux BusLogic=QueueDepth:[,7,15];QueueDepth:31,BusSettleTime:30

LILO Linux 引导加载程序(在 /etc/lilo.conf 中)

append = "BusLogic=QueueDepth:[,7,15];QueueDepth:31,BusSettleTime:30"

INSMOD 可加载内核模块安装工具

insmod BusLogic.o \
    'BusLogic="QueueDepth:[,7,15];QueueDepth:31,BusSettleTime:30"'

注意

需要 2.1.71 或更高版本的模块实用程序才能正确解析包含逗号的驱动程序选项。

驱动程序安装

此发行版是为 Linux 内核版本 2.0.35 准备的,但应与 2.0.4 或任何更高版本的 2.0 系列内核兼容。

要安装新的 BusLogic SCSI 驱动程序,您可以使用以下命令,将“/usr/src”替换为 Linux 内核源代码树的保存位置:

cd /usr/src
tar -xvzf BusLogic-2.0.15.tar.gz
mv README.* LICENSE.* BusLogic.[ch] FlashPoint.c linux/drivers/scsi
patch -p0 < BusLogic.patch (only for 2.0.33 and below)
cd linux
make config
make zImage

然后安装“arch/x86/boot/zImage”作为您的标准内核,如果适用,运行 lilo,然后重新启动。

BusLogic 公告邮件列表

BusLogic 公告邮件列表提供了一个论坛,用于向 Linux 用户通告新的驱动程序版本以及有关 BusLogic SCSI 主机适配器 Linux 支持的其他公告。要加入邮件列表,请向 “buslogic-announce-request@dandelion.com” 发送消息,并在消息正文中包含 “subscribe” 行。