Linux 的 BusLogic MultiMaster 和 FlashPoint SCSI 驱动程序¶
Linux 2.0 的 2.0.15 版本
Linux 2.1 的 2.1.15 版本
生产版本
版权所有 1995-1998 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/”。
Bug 报告应通过电子邮件发送至“lnz@dandelion.com”。请在 bug 报告中包含驱动程序和 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 Ardenwood Blvd., Fremont, California 94555, USA,可以通过 510/796-6100 或在万维网上访问 http://www.mylex.com。可以通过电子邮件 techsup@mylex.com、语音 510/608-2400 或传真 510/745-7715 联系 Mylex HBA 技术支持。欧洲和日本办事处的联系信息可在网站上找到。
驱动程序功能¶
配置报告和测试¶
在系统初始化期间,驱动程序会广泛报告主机适配器硬件配置,包括请求的同步传输参数以及与每个目标设备协商的参数。报告每个目标设备的自动 SCSI 设置(同步协商、宽协商和断开/重新连接),以及标记排队的状态。如果所有目标设备都使用相同的设置,则使用单个单词或短语;否则,为每个目标设备提供一个字母,以指示各个状态。以下示例应阐明此报告格式
同步协商:Ultra
已为所有目标设备启用同步协商,并且主机适配器将尝试协商 20.0 mega-transfers/second。
同步协商:Fast
已为所有目标设备启用同步协商,并且主机适配器将尝试协商 10.0 mega-transfers/second。
同步协商:Slow
已为所有目标设备启用同步协商,并且主机适配器将尝试协商 5.0 mega-transfers/second。
同步协商:Disabled
已禁用同步协商,并且所有目标设备都限制为异步操作。
同步协商:UFSNUUU#UUUUUUUU
已为目标设备 0 和 4 到 15 启用 Ultra 速度的同步协商,为目标设备 1 启用 Fast 速度的同步协商,为目标设备 2 启用 Slow 速度的同步协商,并且不允许目标设备 3 进行同步协商。主机适配器的 SCSI ID 由“#”表示。
宽协商、断开/重新连接和标记排队的状态报告为“Enabled”、“Disabled”或“Y”和“N”字母的序列。
性能特性¶
BusLogic SCSI 主机适配器直接实现 SCSI-2 标记排队,因此驱动程序中包含了支持,以便将标记排队用于报告具有标记排队能力的任何目标设备。标记排队允许向每个目标设备或逻辑单元发出多个未完成的命令,并且可以显着提高 I/O 性能。此外,BusLogic 的严格循环模式用于优化主机适配器性能,并且 scatter/gather 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 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 Differential Ultra SCSI-3 |
MultiMaster “C” 系列主机适配器
BT-946C |
PCI |
Fast SCSI-2 |
BT-956C |
PCI |
Wide Fast SCSI-2 |
BT-956CD |
PCI |
Wide Differential 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 Differential Fast SCSI-2 |
MultiMaster “S” 系列主机适配器
BT-445S |
VLB |
Fast SCSI-2 |
BT-747S |
EISA |
Fast SCSI-2 |
BT-747D |
EISA |
Differential Fast SCSI-2 |
BT-757S |
EISA |
Wide Fast SCSI-2 |
BT-757D |
EISA |
Wide Differential Fast SCSI-2 |
BT-742A |
EISA |
SCSI-2 (742A 修订版 H) |
MultiMaster “A” 系列主机适配器
BT-742A |
EISA |
SCSI-2(742A 修订版 A - G) |
此驱动程序还支持 AMI FastDisk 主机适配器,它们是真正的 BusLogic MultiMaster 克隆。
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 表现更好,因此没有太大的动力将 RAIDPlus 支持包含在 BusLogic 驱动程序中。
启用 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 实用程序,然后选择“适配器配置”、“查看/修改配置”,然后将“ISA 兼容端口”设置从“禁用”更改为“主”或“备用”。安装此驱动程序后,应将“ISA 兼容端口”选项设置回“禁用”,以避免将来可能发生的 I/O 端口冲突。较旧的 BT-946C/956C/956CD 也具有此配置选项,但出厂默认设置为“主”。
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 实用程序,然后选择“适配器配置”、“查看/修改配置”,按 Ctrl-F10,然后将“使用总线和设备 # 作为 PCI 扫描顺序”选项更改为 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 端口设置为“主”或“备用”的 PCI Multimaster 主机适配器。
NoSortPCI
“NoSortPCI”选项强制 PCI MultiMaster 主机适配器按 PCI BIOS 提供的顺序枚举,忽略 AutoSCSI “使用总线和设备 # 作为 PCI 扫描顺序”选项的任何设置。
MultiMasterFirst
“MultiMasterFirst”选项强制在 FlashPoint 主机适配器之前探测 MultiMaster 主机适配器。默认情况下,如果同时存在 FlashPoint 和 PCI MultiMaster 主机适配器,则此驱动程序将首先探测 FlashPoint 主机适配器,除非 BIOS 主磁盘由第一个 PCI MultiMaster 主机适配器控制,在这种情况下,将首先探测 MultiMaster 主机适配器。
FlashPointFirst
“FlashPointFirst”选项强制在 MultiMaster 主机适配器之前探测 FlashPoint 主机适配器。
BusLogic 驱动程序标记排队选项允许显式指定队列深度以及是否允许每个目标设备进行标记排队(假设目标设备支持标记排队)。队列深度是允许同时呈现以供执行(无论是对主机适配器还是目标设备)的 SCSI 命令数。请注意,显式启用标记排队可能会导致问题;提供启用或禁用标记排队的选项主要是为了允许在未正确实现标记排队的目标设备上禁用标记排队。以下选项可用
QueueDepth:<integer>
“QueueDepth:”或 QD:”选项指定要用于支持标记排队的所有目标设备的队列深度,以及不支持标记排队的设备的最大队列深度。如果未提供队列深度选项,则将根据主机适配器的总队列深度以及检测到的目标设备的数量、类型、速度和功能自动确定队列深度。不支持标记排队的目标设备的队列深度始终设置为 BusLogic_UntaggedQueueDepth 或 BusLogic_UntaggedQueueDepthBB,除非提供了较低的队列深度选项。队列深度为 1 会自动禁用标记排队。
QueueDepth:[<integer>,<integer>...]
“QueueDepth:[...]”或“QD:[...]”选项单独为每个目标设备指定队列深度。如果省略 <integer>,则将自动选择关联的目标设备的队列深度。
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:<seconds>
“BusSettleTime:”或“BST:”选项指定总线稳定时间,以秒为单位。总线稳定时间是在启动 SCSI 总线重置的主机适配器硬重置与发出任何 SCSI 命令之间等待的时间。如果未指定,则默认为 BusLogic_DefaultBusSettleTime。
InhibitTargetInquiry
“InhibitTargetInquiry”选项禁止在 MultiMaster 主机适配器上执行“查询目标设备”或“查询已安装设备”命令。对于某些较旧的目标设备,当寻址高于 0 的逻辑单元时,这可能是必需的,因为这些设备无法正确响应。
BusLogic 驱动程序调试选项包括以下内容
TraceProbe
“TraceProbe”选项启用主机适配器探测的跟踪。
TraceHardwareReset
“TraceHardwareReset”选项启用主机适配器硬件重置的跟踪。
TraceConfiguration
“TraceConfiguration”选项启用主机适配器配置的跟踪。
TraceErrors
“TraceErrors”选项启用从目标设备返回错误的 SCSI 命令的跟踪。CDB 和 Sense Data 将为每个失败的 SCSI 命令打印。
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”一行。