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

版權所有 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 主機介面卡都可以共享同一個中斷請求通道。

支援的主機介面卡

以下列表包含截至本文件釋出之日支援的 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”一行。