專利名稱:檢測(cè)和清除i/o架構(gòu)鎖定情況以恢復(fù)錯(cuò)誤的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及主機(jī)和輸入/輸出(I/O)適配器之間通過1/0架 構(gòu)進(jìn)行的通信。更特別地,本發(fā)明解決由于I/0架構(gòu)上某一點(diǎn)發(fā)生故障 而導(dǎo)致I/O架構(gòu)擁塞或死鎖的情況。特別地,本發(fā)明涉及PCI Express 協(xié)議,其中PCI Express架構(gòu)上某一點(diǎn)未能返回信用值(credit),致使架 構(gòu)鎖定或死鎖并且不能再通過該架構(gòu)進(jìn)行I/O操作。
背景技術(shù):
PCI Express規(guī)范(根據(jù)俄勒岡州比弗頓PCI-SIG的定義)詳細(xì)規(guī)定 了向鏈路另一端發(fā)送與空援沖區(qū)相關(guān)的信用值的鏈路行為。如果所述鏈 路另 一端未能返回信用值,例如由于緩沖區(qū)沒有清空而未能返回信用 值,那么由于對(duì)操作的排序要求,直至根聯(lián)合體(root complex)的所 有組件中的緩沖區(qū)都將填滿,使得根聯(lián)合體不能再訪問其I/O子系統(tǒng)。 PCI Express規(guī)范沒有詳述此種情況下硬件應(yīng)如何反應(yīng)。在此情況下,可 以預(yù)期,所述架構(gòu)和連接到所述架構(gòu)的根聯(lián)合體需要關(guān)閉電源并且重啟 電源以清除錯(cuò)誤。
示例性實(shí)施例詳述了無須關(guān)閉I/O架構(gòu)或任何連接到該架構(gòu)的根 聯(lián)合體的電源即可恢復(fù)1/0架構(gòu)的計(jì)算機(jī)實(shí)施方法和機(jī)制。特別地,該 示例性實(shí)施例涉及PCI Express I/O架構(gòu),但是本領(lǐng)域的普通技術(shù)人員 將能夠理解,本發(fā)明可以應(yīng)用于其他類似的I/O架構(gòu)。
發(fā)明內(nèi)容
提供了一種通過計(jì)算機(jī)實(shí)施的恢復(fù)1/0架構(gòu)的方法、裝置和機(jī)制, 所述I/O架構(gòu)由于故障而終端擁塞或死鎖,該故障造成緩沖區(qū)/隊(duì)列填
充,并因此造成根聯(lián)合體無法訪問其I/0子系統(tǒng)。在檢測(cè)到終端擁塞或 死鎖的傳輸隊(duì)列時(shí),暫停其他根聯(lián)合體對(duì)該隊(duì)列的訪問,同時(shí)檢查隊(duì)列
中的每個(gè)項(xiàng)目并進(jìn)行相應(yīng)處理。丟棄隊(duì)列中的存儲(chǔ)請(qǐng)求和DMA讀取應(yīng)
答分組,并且通過返回一個(gè)特殊完成分組而對(duì)隊(duì)列中的加載請(qǐng)求進(jìn)行處 理。隨后恢復(fù)根聯(lián)合體對(duì)該隊(duì)列的訪問。
所附權(quán)利要求書中提出了相信為示例性實(shí)施例所特有的新穎'性特 征。然而需要根據(jù)下文參照附圖對(duì)示例性實(shí)施例的詳述,才能更好地理 解所述示例性實(shí)施例、優(yōu)選使用方法、進(jìn)一步的目的及其優(yōu)點(diǎn),其中附
圖如下
圖1是根據(jù)示例性實(shí)施例描繪的分布式計(jì)算機(jī)系統(tǒng)的示圖; 圖2是一個(gè)方框圖,示出了其中可以實(shí)施示例性實(shí)施例的示例性邏 輯分區(qū)平臺(tái);圖3是示出了 一個(gè)根聯(lián)合體與若干I/O適配器之間以及若干根聯(lián)合 體與一個(gè)I/O適配器之間的通信的高級(jí)示圖,其中將根據(jù)示例性實(shí)施例 解決緩沖區(qū)阻塞;
圖4示出了隊(duì)列控制,在其中實(shí)施各示例性方面; 圖5是一個(gè)流程圖,示出了根據(jù)示例性實(shí)施例如何檢測(cè)鎖定情況; 圖6是一個(gè)流程圖,示出了根據(jù)示例性實(shí)施例的硬件對(duì)架構(gòu)鎖定的 處理;
圖7是一個(gè)流程圖,示出了根據(jù)示例性實(shí)施例硬件如何防止架構(gòu)再 次鎖定,暫停固件或軟件對(duì)錯(cuò)誤進(jìn)行的處理;
圖8是一個(gè)流程圖,示出了根據(jù)示例性實(shí)施例,當(dāng)I/O架構(gòu)在恢復(fù) 過程中時(shí)對(duì)DMA的處理;以及
圖9是根據(jù)示例性實(shí)施例,根聯(lián)合體處理架構(gòu)鎖定錯(cuò)誤的高級(jí)流程圖。
具體實(shí)施例方式
本文所述的示例性實(shí)施例適用于任何通用或?qū)S玫挠?jì)算機(jī)系統(tǒng),其 中I/O架構(gòu)使用諸如信用值之類的消息表明鏈路另一端的資源可用性。
更特別地,下文描述的優(yōu)選實(shí)施例提供了使用PCI Express I/O鏈路的實(shí) 施方法。
現(xiàn)在參照附圖,特別是參照?qǐng)D1,該圖根據(jù)示例性實(shí)施例描繪了分 布式計(jì)算機(jī)系統(tǒng)100。圖1中所示的分布式計(jì)算機(jī)系統(tǒng)采取如下形式 一個(gè)或多個(gè)根聯(lián)合體(RQ108、 118、 128、 138和139通過1/0鏈路110、 120、 130、 142和143連接到I/O架構(gòu)144,并且連接到根節(jié)點(diǎn)(RN) 160-163的存儲(chǔ)器控制器104、 114、 124和134。所述I/O架構(gòu)通過鏈 路151-158連接到I/O適配器(IOA)145-150。所述IOA可以是單一功能 的IOA如145-146和149,或者是多功能IOA如147-148和150。并且, IOA可以通過單一鏈^各連接到所述I/O架構(gòu),如145-148,或者可以具 有多個(gè)鏈^各以實(shí)現(xiàn)冗余,如149-150。
RC 108、 118、 128、 138和139中每一個(gè)均為相應(yīng)的RN 160-163 的組成部分。每個(gè)RN可以有多個(gè)RC,例如在RN163中那樣。除RC 外,每個(gè)RN還包括一個(gè)或多個(gè)中央處理單元(CPU) 101-102、 111-112、 121-122、 131-132,存儲(chǔ)器103、 113、 123和133以及存儲(chǔ)器控制器 104、 114、 124和134,所述存儲(chǔ)控制器連接CPU、存儲(chǔ)器和I/ORC并 執(zhí)行諸如管理存儲(chǔ)器相干業(yè)務(wù)之類的功能。
多個(gè)RN可以通過各自的存儲(chǔ)器控制器104和114在159處連接到 一起,以構(gòu)成一個(gè)相干域,其可以作為單個(gè)對(duì)稱性多處理(SMP)系統(tǒng) 工作,或者多個(gè)RN可以作為具有單獨(dú)相干域的獨(dú)立節(jié)點(diǎn),如RN 162-163。
配置管理器164可以單獨(dú)連接到I/O架構(gòu)144 (如圖1所示)或 作為RN 160-163之一的組成部分。配置管理器配置1/0架構(gòu)的共享資 源并將資源分配給RN。
分布式計(jì)算機(jī)系統(tǒng)100可以使用各種商業(yè)可得的計(jì)算機(jī)系統(tǒng)實(shí)施。 例如,分布式計(jì)算機(jī)系統(tǒng)100可以使用國際商業(yè)機(jī)器公司的IBMeServer iSeries Model 840系統(tǒng)實(shí)施。這樣的系統(tǒng)可以支持使用國際商業(yè)沖幾器公
司提供的OS/400操作系統(tǒng)進(jìn)行邏輯分區(qū)。
本領(lǐng)域的普通技術(shù)人員將可以理解圖1示出的硬件可能有所不同。 例如,其他外圍設(shè)備如光盤驅(qū)動(dòng)器等,也可以作為對(duì)所示出的硬件的補(bǔ) 充或代替來使用。所示出的例子并不意味著對(duì)示例性實(shí)施例的體系結(jié)構(gòu) 限制。
現(xiàn)在參考圖2,圖2是示例性邏輯分區(qū)平臺(tái)的方框圖,所述示例性 實(shí)施例可以在所述平臺(tái)上實(shí)施。所述邏輯分區(qū)平臺(tái)200上的硬件可以實(shí) 施為例如圖1中的分布式計(jì)算機(jī)系統(tǒng)100。所述邏輯分區(qū)平臺(tái)200包括 分區(qū)硬件230,操作系統(tǒng)(OS)202、 204、 206、 208,以及平臺(tái)固件210。 所述操作系統(tǒng)202、 204、 206和208可以是一個(gè)才喿作系統(tǒng)的多個(gè)副本或 同時(shí)在所述邏輯分區(qū)平臺(tái)200上運(yùn)行的多個(gè)不同的操作系統(tǒng)。所述操作 系統(tǒng)可以使用OS/400⑧操作系統(tǒng)實(shí)施,該系統(tǒng)設(shè)計(jì)為與平臺(tái)或分區(qū)管理 固件例如Hypervisor接口連接。在這些示例性實(shí)施例中OS/400操作系 統(tǒng)的使用僅作為例子。根據(jù)特定的實(shí)施方法,也可以使用其他類型的操 作系統(tǒng)例如AIX⑧和Linux⑧操作系統(tǒng)(AIX是國際商業(yè)機(jī)器公司在美國 和其他國家的注冊(cè)商標(biāo),Linux是Linus Torvalds在美國和其他國家的 注冊(cè)商標(biāo))。操作系統(tǒng)202、 204、 206和208分別位于分區(qū)203、 205、 207和209上。Hypervisor軟件是可以用于實(shí)施平臺(tái)固件210的軟件的 例子,并且可從國際商業(yè)機(jī)器公司獲得。固件是存儲(chǔ)在無需電源也能夠 保持其內(nèi)容的存儲(chǔ)器芯片中的"軟件",其中存儲(chǔ)器例如是只讀存儲(chǔ)器
(ROM),可編程只讀存儲(chǔ)器(PROM),可擦除可編程只讀存儲(chǔ)器 (EPROM),電可擦除可編程只讀存儲(chǔ)器(EEPROM),以及非易失性隨 機(jī)存取存儲(chǔ)器(非易失性RAM )。
另外,分區(qū)203、 205、 207和209還分別包括分區(qū)固件211、 213、 215和217。所述分區(qū)固件211、 213、 215和217可以4吏用初始引導(dǎo)程 序代碼、IEEE-1275標(biāo)準(zhǔn)開放固件和運(yùn)行時(shí)抽象軟件(RTAS)實(shí)施,這些 均可從國際商業(yè)機(jī)器公司獲得。在對(duì)分區(qū)203、 205、 207和209進(jìn)行例 示時(shí),平臺(tái)固件210將初始引導(dǎo)程序代碼的副本上栽到分區(qū)203、 205、 207和209。隨后控制轉(zhuǎn)移給引導(dǎo)程序代碼,由所述引導(dǎo)程序代碼加載
開放固件和RTAS。隨后與分區(qū)相關(guān)聯(lián)或分配給分區(qū)的處理器被調(diào)派給 分區(qū)的存儲(chǔ)器以執(zhí)行分區(qū)固件。
分區(qū)硬件230包括多個(gè)處理器232-238,多個(gè)系統(tǒng)存儲(chǔ)器單元 240-246,多個(gè)10A248-262, NVRAM存儲(chǔ)裝置298,以及存儲(chǔ)單元270。 每個(gè)處理器232-238,存儲(chǔ)器單元240-246, NVRAM存儲(chǔ)裝置298和IOA 248-262,或其部分,都可以分配給所述邏輯分區(qū)平臺(tái)200的多個(gè)分區(qū) 之一,其中每個(gè)分區(qū)對(duì)應(yīng)于操作系統(tǒng)202、 204、 206和208之一。
平臺(tái)固件210為分區(qū)203、 205、 207和209執(zhí)行多個(gè)功能和服務(wù), 以創(chuàng)建和實(shí)施對(duì)所述邏輯分區(qū)平臺(tái)200的分區(qū)。平臺(tái)固件210是通過固 件實(shí)施的虛擬機(jī),等同于基礎(chǔ)硬件。這樣,平臺(tái)固件210通過將所述邏 輯分區(qū)平臺(tái)200的硬件資源虛擬化,允許同時(shí)執(zhí)行獨(dú)立的OS映像202、 204、 206和208。
服務(wù)處理器290可用于提供多種服務(wù),例如處理分區(qū)中的平臺(tái)錯(cuò)誤。 這些服務(wù)可以作為服務(wù)代理,向供應(yīng)商例如國際商業(yè)機(jī)器公司報(bào)告錯(cuò) 誤??梢酝ㄟ^硬件管理控制臺(tái),如硬件管理控制臺(tái)280,來控制不同分 區(qū)的操作。硬件管理控制臺(tái)280是一個(gè)獨(dú)立分布式計(jì)算機(jī)系統(tǒng),系統(tǒng)管 理員可以通過該系統(tǒng)執(zhí)行各種功能,包括向不同分區(qū)重新分配資源。
在邏輯分區(qū)(LPAR)環(huán)境下,不允許一個(gè)分區(qū)中的資源或程序影 響另一個(gè)分區(qū)中的操作。并且,資源分配需要非常細(xì)致才能有用。例如, 將一個(gè)特定PCI主橋(PHB )下的所有IOA分配給同 一個(gè)分區(qū)往往是不 能接受的,因?yàn)檫@將會(huì)限制系統(tǒng)的可配置性,包括在分區(qū)之間動(dòng)態(tài)轉(zhuǎn)移 資源的能力。相應(yīng)地,在I/0架構(gòu)和將IOA連接到根節(jié)點(diǎn)的根聯(lián)合體中 需要某些功能性以便能夠向獨(dú)立的分區(qū)分配資源,例如獨(dú)立的IOA或 IOA的部分;并且同時(shí)防止所分配的資源影響其他分區(qū),例如通過獲得 對(duì)其他分區(qū)資源的訪問而影響其他分區(qū)。
圖3示出了兩個(gè)RC 302-304,每個(gè)RC分別具有其自己的傳輸隊(duì)列 306和308,用于將I/0分組傳輸?shù)絀/O架構(gòu)314上。如圖所示,RC 302 通過實(shí)線328和330以及虛線332 (實(shí)線表示初始通信集,虛線表示后 續(xù)通信)與I/O適配器324和326通信;并且圖中RC 304通過虛線334
與I/O適配器326通信。如果I/O適配器324停止從傳輸隊(duì)列316接收 分組(也就是說所述適配器停止向傳輸隊(duì)列316的控制邏輯返回信用 值),則傳輸隊(duì)列316將會(huì)填充,造成傳輸隊(duì)列306填充并阻止到I/O 適配器326的通信330。這樣I/O適配器324的中斷可能使I/O適配器 326也對(duì)于RC 302不可用。
同樣,如果I/0適配器326停止從傳輸隊(duì)列318接收分組(也就是 說所述適配器停止向傳輸隊(duì)列318的控制邏輯返回信用值),則傳輸隊(duì) 列318將會(huì)填充,造成傳輸隊(duì)列306和308填充并阻止所有RC與該I/O 適配器的通信例如通信332和334。這樣I/O適配器326的中斷將會(huì)鎖 定I/0架構(gòu),使得不能進(jìn)行所有RC與該1/0適配器的通信,并且到其 他I/O適配器的I/O搡作也會(huì)受到影響。所述示例性實(shí)施例所要防止的 就是這種中斷。
圖4示出了控制傳輸隊(duì)列404的隊(duì)列控制邏輯411。從所述傳輸隊(duì) 列404傳輸分組406取決于鏈路另一端如圖3中的1/0適配器324或326 返回傳輸信用值408。所述信用值通過滯后請(qǐng)求信用值寄存器410、非 滯后請(qǐng)求信用值寄存器412和完成信用值寄存器414追蹤。如果在416 處檢測(cè)到所述三個(gè)寄存器任何之一為零,則加載零信用值計(jì)時(shí)器418, 并在零信用值計(jì)時(shí)器初始寄存器420中存儲(chǔ)一個(gè)初始值,并且隨后只要 寄存器410-414之一為零就繼續(xù)倒計(jì)數(shù)。如果寄存器410-414都變成非 零值,則零信用值計(jì)時(shí)器418停止計(jì)數(shù)。零信用值計(jì)時(shí)器初始寄存器420 可以是一個(gè)固定值或者可通過系統(tǒng)固件或軟件編程,其中可編程為優(yōu)選 實(shí)施例。
當(dāng)零信用值計(jì)時(shí)器倒計(jì)數(shù)到零時(shí),表明檢測(cè)到鎖定情況并且需要清 除鎖定。也就是說,當(dāng)零信用值計(jì)時(shí)器計(jì)數(shù)到零時(shí),其將設(shè)置零信用值 超時(shí)控制邏輯422中的停止?fàn)顟B(tài)寄存器424中的存儲(chǔ)器映射(MMIO) 位426和直接存儲(chǔ)器訪問(DMA)位428。發(fā)生這種情況時(shí),所有受影 響的根聯(lián)合體都被信號(hào)通知一個(gè)錯(cuò)誤消息,例如在I/O架構(gòu)402的一 條主總線432上信號(hào)通知的錯(cuò)誤消息430。并且,將如下文詳述的那樣, 清除鎖定。 圖5示出了當(dāng)檢測(cè)到零信用值超時(shí)時(shí)硬件所進(jìn)行的處理的流程。所
述流程開始于步驟502,檢測(cè)到錯(cuò)誤。在步驟504,從零信用值計(jì)時(shí)器 初始寄存器將初始計(jì)數(shù)值加載到零信用值計(jì)時(shí)器。在步驟506,檢查零 信用值計(jì)時(shí)器是否為零,如果非零,則處理過程繼續(xù)進(jìn)入步驟508,其 中確定是否仍然存在零信用值情況。如果不存在零信用值情況,則在步 驟510退出進(jìn)程。如果在步驟508仍然存在零信用值情況,則在步驟512 零信用值計(jì)時(shí)器寄存器遞減并且隨后再次到步驟506檢查零值。如果零 信用值計(jì)時(shí)器寄存器變?yōu)榱悖瑒t在步驟514開始架構(gòu)鎖定處理。
圖6示出了架構(gòu)鎖定處理過程,所述處理開始于步驟602。在步驟 604,由硬件設(shè)置停止?fàn)顟B(tài)寄存器中的MMIO位和DMA位。所述硬件 隨后向根聯(lián)合體606發(fā)送一個(gè)錯(cuò)誤消息,使其可以開始錯(cuò)誤處理。鎖定 處理中的最后一個(gè)步驟608是清理檢測(cè)到問題的傳輸隊(duì)列。為此要檢查 傳輸隊(duì)列中的每個(gè)項(xiàng)目,并且對(duì)其適當(dāng)?shù)奶幚韥G棄MMIO存儲(chǔ)請(qǐng)求; 通過返回一個(gè)完成分組,并迫使數(shù)據(jù)全為1 (例如分組中的所有位都被 設(shè)置為二進(jìn)制"l"值),來對(duì)MMIO加載請(qǐng)求進(jìn)行處理;并且丟棄DMA 讀取應(yīng)答分組。通過這些處理,暫時(shí)地清理傳輸隊(duì)列并且在步驟610完 成對(duì)條目的處理。然而,仍可能存在上游事務(wù)造成架構(gòu)擁塞并且將流向 傳輸隊(duì)列,如果發(fā)生這種情況,處理過程將如圖7所示地繼續(xù)進(jìn)行。
圖7示出了對(duì)新條目的處理。對(duì)停止?fàn)顟B(tài)寄存器中的MMIO位和 DMA位(根據(jù)圖6的步驟604)進(jìn)行設(shè)置的目的在于保持傳輸隊(duì)列的 清理狀態(tài)直到軟件可以開始處理錯(cuò)誤并且可以將一切置于可控狀態(tài)為 止。該過程描述如下。在步驟702接收到新條目并且在步驟704確定所 述項(xiàng)目是否為MMIO加載操作。如果所述項(xiàng)目是MMIO加載操作,并 且在步驟706確定MMIO位為0,則在步驟708正常處理該MMIO加 載操作并且在步驟726完成操作。如果MMIO位在步驟706設(shè)定為1, 則在步驟710為該加載返回全部為1的數(shù)據(jù),并且在步驟726完成操作。 所述全部為1的數(shù)據(jù)隨后可以信號(hào)通知操作系統(tǒng)、設(shè)備驅(qū)動(dòng)器或其他軟 件,使其檢查I/O子系統(tǒng)以查看是否發(fā)生錯(cuò)誤。
如果在步驟704確定該操作并非MMIO加載#:作,則在步驟712
檢查所述操作是否為MMIO存儲(chǔ)操作。如果所述操作是MMIO存儲(chǔ)操 作,并且在步驟714確定MMIO位為0,則在步驟716正常處理該MMIO 存儲(chǔ)操作并且在步驟726完成操作。如果MMIO位在步驟714設(shè)定為1, 則在步驟718丟棄該存儲(chǔ)并且在步驟726完成操作。
如果在步驟704或步驟712確定所述操作并非MMIO操作,則所 述操作必定是DMA讀取應(yīng)答操作。在此情況下,在步驟702檢查停止 狀態(tài)寄存器中的DMA位,并且如果所述DMA位為0,則在步驟722 正常處理該DMA操作,并且在步驟726完成操作。最后,如果在步驟 720確定DMA位為1,則在步驟724丟棄DMA讀取完成,并且在步驟 726完成操作。
如果在設(shè)置DMA位的期間有新DMA請(qǐng)求到來,則需要進(jìn)行適當(dāng) 的處理。圖8示出了如何進(jìn)行這種處理。在步驟802^妄收到新DMA請(qǐng) 求,并且在步驟804確定停止?fàn)顟B(tài)寄存器中的DMA位是否為0。如果 該DMA位為0,則在步驟806正常處理該DMA,并且在步驟810完成 操作。
如果在步驟804停止?fàn)顟B(tài)寄存器中的DMA位非0,則在步驟808 硬件向請(qǐng)求方返回一個(gè)完成方中止或不支持請(qǐng)求,并且在步驟810完成 操作。
RC中的架構(gòu)錯(cuò)誤的處理在一定程度上依賴于平臺(tái),但是圖9示出 了一般流程。處理過程開始于步驟902,并且在步驟904檢測(cè)到一個(gè)錯(cuò) 誤,即檢測(cè)到發(fā)送的錯(cuò)誤消息或意外地接收到全部為1的數(shù)據(jù)。在步驟 906,操作系統(tǒng)或RC硬件使設(shè)備驅(qū)動(dòng)器停止向I/O架構(gòu)中檢測(cè)到錯(cuò)誤的 點(diǎn)以下的1/0發(fā)送任何進(jìn)一步的操作。例如,參照?qǐng)D3, 1/0適配器324 在傳輸隊(duì)列316 (在該例子中為發(fā)生錯(cuò)誤的點(diǎn))以下,并且如果檢測(cè)到 該316點(diǎn)發(fā)生錯(cuò)誤或死鎖,則RC硬件使設(shè)備驅(qū)動(dòng)器停止向該I/O適配 器324發(fā)送任何進(jìn)一步的操作。類似地,I/O適配器326在傳輸隊(duì)列318 (在該例子中為發(fā)生錯(cuò)誤的點(diǎn))以下,并且如果檢測(cè)到該點(diǎn)318發(fā)生錯(cuò) 誤或死鎖,則RC硬件使設(shè)備驅(qū)動(dòng)器停止向該I/O適配器326發(fā)送任何 進(jìn)一步的操作。隨后在步驟908,軟件或固件從架構(gòu)讀取任何錯(cuò)誤信息
并記錄該信息作將來可能的評(píng)估之用。隨后在步驟910,平臺(tái)執(zhí)行任何
特定于平臺(tái)的錯(cuò)誤恢復(fù),并且如果可能,在步驟912清除停止?fàn)顟B(tài)寄存 器中的MMIO位,使得該點(diǎn)以下的MMIO操作可以繼續(xù)。在步驟914, 確定是否可以繼續(xù)通信,如果可以,則在步驟918重置DMA位。在步 驟920,重新啟動(dòng)設(shè)備驅(qū)動(dòng)器并且執(zhí)行任何特定于設(shè)備的錯(cuò)誤恢復(fù)。在 步驟922完成恢復(fù)。如果在步驟914確定不能重建該故障點(diǎn)以下的通信, 則在步驟916重置該故障點(diǎn)以下的I/O架構(gòu),在步驟920重新啟動(dòng)設(shè)備 驅(qū)動(dòng)器并且執(zhí)行任何特定于設(shè)備的錯(cuò)誤恢復(fù)。在步驟922完成恢復(fù)。
本發(fā)明可以采取完全硬件實(shí)施、完全軟件實(shí)施或包括硬件和軟件元 素的實(shí)施形式。在優(yōu)選實(shí)施例中,本發(fā)明以軟件實(shí)施,其包括但是不限 于固件、駐留軟件、微碼等。
并且,本發(fā)明可以采取計(jì)算機(jī)程序產(chǎn)品的形式,所述計(jì)算機(jī)程序產(chǎn) 品可以通過計(jì)算機(jī)可用介質(zhì)或計(jì)算機(jī)可讀介質(zhì)訪問,所述介質(zhì)提供程序 代碼供計(jì)算機(jī)或任何指令執(zhí)行系統(tǒng)使用或與之結(jié)合使用。為實(shí)現(xiàn)所述目 的,計(jì)算機(jī)可用介質(zhì)或計(jì)算機(jī)可讀介質(zhì)可以是任何有形的裝置,所述裝 置可以包含、存儲(chǔ)、傳送、傳播或傳輸程序供指令執(zhí)行系統(tǒng)、裝置或設(shè) 備使用或與之結(jié)合使用。
所述介質(zhì)可以是電子的、磁的、光學(xué)的、電磁的、紅外的或半導(dǎo)體 系統(tǒng)(或者裝置或設(shè)備)或傳播介質(zhì)。計(jì)算機(jī)可讀介質(zhì)的例子包括半導(dǎo) 體或固態(tài)存儲(chǔ)器、磁帶、可移動(dòng)計(jì)算機(jī)磁盤、隨機(jī)存取存儲(chǔ)器(RAM)、 只讀存儲(chǔ)器(ROM)、硬磁盤和光盤。目前光盤的例子包括只讀光盤 (CD-ROM )、可讀/寫光盤(CD-R/W)以及DVD。
適于存儲(chǔ)和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)包括至少 一 個(gè)通過系 統(tǒng)總線直接或間接連接到存儲(chǔ)器元件的處理器。所述存儲(chǔ)器元件可以包 括實(shí)際執(zhí)行程序代碼時(shí)使用的本地存儲(chǔ)器、大容量存儲(chǔ)裝置以及高速緩 沖存儲(chǔ)器,為至少某些程序代碼提供臨時(shí)存儲(chǔ)裝置,以減少在執(zhí)行過程 中從大容量存儲(chǔ)裝置讀取代碼的次數(shù)。
輸入/輸出或I/0設(shè)備(包括但不限于鍵盤、顯示器、指針設(shè)備等) 可以直接地或通過居間1/0控制器連接到系統(tǒng)。 網(wǎng)絡(luò)適配器也可以連接到系統(tǒng),使數(shù)據(jù)處理系統(tǒng)通過居間私人或公 共網(wǎng)絡(luò)實(shí)現(xiàn)與其他數(shù)據(jù)處理系統(tǒng)或遠(yuǎn)程打印機(jī)或存儲(chǔ)設(shè)備的連接。調(diào)制 解調(diào)器、纜線調(diào)制解調(diào)器和以太網(wǎng)卡只是目前可用的網(wǎng)絡(luò)適配器類型中 的幾種。
本發(fā)明實(shí)施例的描述是出于示例和說明的目的,而非窮盡性的或局 限于所公開的發(fā)明形式。本領(lǐng)域的普通技術(shù)人員可以理解本發(fā)明的很多 變更和變形。選擇和描述本實(shí)施例是為了對(duì)本發(fā)明的原理、實(shí)際應(yīng)用作
施例理解本發(fā)明,這些修改可以適用于能夠預(yù)想到的具體用途。
權(quán)利要求
1.一種用于清理輸入/輸出(I/O)架構(gòu)中隊(duì)列的方法,包括以下步驟檢測(cè)到所述隊(duì)列死鎖;禁止訪問所述隊(duì)列;清理所述隊(duì)列中的條目;并且重新啟動(dòng)對(duì)所述隊(duì)列的訪問。
2. 根據(jù)權(quán)利要求1的方法,其中如果在由與所述隊(duì)列相關(guān)聯(lián)的隊(duì) 列控制邏輯確定的給定時(shí)間段內(nèi)所述隊(duì)列沒有從所述I/O架構(gòu)中位于所 述隊(duì)列以下的下一層接收到信用值,則將所述隊(duì)列檢測(cè)為發(fā)生死鎖。
3. 根據(jù)權(quán)利要求2的方法,其中所述I/O架構(gòu)中的下一層是連接 到所述隊(duì)列的1/0適配器。
4. 根據(jù)權(quán)利要求1的方法,其中檢測(cè)所述隊(duì)列死鎖的步驟包括以 下步驟保持對(duì)至少 一 個(gè)信用值的計(jì)數(shù);確定對(duì)所述至少一個(gè)信用值的任何之一的計(jì)數(shù)是否為零,并且如果 所述計(jì)數(shù)為零,則啟動(dòng)計(jì)時(shí)器;并且如果由所述計(jì)時(shí)器確定的時(shí)間段屆滿,則將所述隊(duì)列檢測(cè)為發(fā)生死鎖。
5. 根據(jù)權(quán)利要求4的方法,其中保持對(duì)至少一個(gè)信用值的計(jì)數(shù)的 步驟包括以下步驟保持對(duì)滯后請(qǐng)求信用值的計(jì)數(shù); 保持對(duì)非滯后請(qǐng)求信用值的計(jì)數(shù);以及 保持對(duì)完成信用值的計(jì)數(shù)。
6. 根據(jù)權(quán)利要求4的方法,其中在開始所述計(jì)時(shí)器之前給所述計(jì) 時(shí)器加載一個(gè)初始計(jì)時(shí)器值。
7. 根據(jù)權(quán)利要求6的方法,其中所述計(jì)時(shí)器是可編程的。
8. 根據(jù)權(quán)利要求6的方法,其中所述計(jì)時(shí)器開始計(jì)數(shù)后,進(jìn)行另 一個(gè)確定,確定所述滯后請(qǐng)求信用值計(jì)數(shù)、非滯后請(qǐng)求信用值計(jì)數(shù)和完 成信用值計(jì)數(shù)中任何之一是否為零,如果有任何之一為零,則所述計(jì)時(shí) 器遞減。
9. 根據(jù)權(quán)利要求1的方法,其中所述I/0架構(gòu)是PCI Express I/O 架構(gòu)。
10. —種根聯(lián)合體處理I/0架構(gòu)錯(cuò)誤的方法,包括以下步驟 檢測(cè)到所述I/O架構(gòu)中的錯(cuò)誤;禁用與和所述I/O架構(gòu)中的故障點(diǎn)相關(guān)聯(lián)的至少一個(gè)I/O適配器相 關(guān)聯(lián)的至少 一個(gè)設(shè)備驅(qū)動(dòng)器;啟動(dòng)存儲(chǔ)器映射的1/0操作;并且 重新啟動(dòng)所述被禁用的至少一個(gè)設(shè)備驅(qū)動(dòng)器。
11. 根據(jù)權(quán)利要求10的方法,進(jìn)一步包括啟動(dòng)直接存儲(chǔ)器訪問操 作的步驟。
12. 根據(jù)權(quán)利要求11的方法,進(jìn)一步包括重置所述I/0架構(gòu)中位于 所述1/0架構(gòu)故障點(diǎn)以下的部分的步驟。
13. —種處理I/0架構(gòu)中錯(cuò)誤的方法,包括以下步驟鎖故障中恢復(fù)。
14. 根據(jù)權(quán)利要求13的方法,其中所述恢復(fù)步驟包括 禁止連接到所述I/O架構(gòu)的系統(tǒng)對(duì)所述點(diǎn)的訪問;處理在所述I/O架構(gòu)中的所述點(diǎn)中的隊(duì)列項(xiàng)目以移除所述隊(duì)列項(xiàng) 目;并且重新啟動(dòng)連接到所述I/O架構(gòu)的系統(tǒng)對(duì)所述點(diǎn)的訪問。
15. —種用于處理I/0架構(gòu)中錯(cuò)誤的裝置,所述裝置包括用于在不關(guān)閉所述I/O架構(gòu)的電源的情況下使所述I/O架構(gòu)中的點(diǎn) 從死鎖故障中恢復(fù)的裝置。
16. 根據(jù)權(quán)利要求15的裝置,進(jìn)一步包括用于禁止連接到所述I/O架構(gòu)的系統(tǒng)對(duì)所述點(diǎn)的訪問的裝置; 用于處理在所述1/0架構(gòu)中的所述點(diǎn)中的隊(duì)列項(xiàng)目以移除所述隊(duì)列 項(xiàng)目的裝置;以及 用于重新啟動(dòng)連接到所述I/O架構(gòu)的系統(tǒng)對(duì)所述點(diǎn)的訪問的裝置。
17. 根據(jù)權(quán)利要求16的裝置,進(jìn)一步包括用于檢測(cè)所述I/O架構(gòu) 中的所述點(diǎn)是否發(fā)生死鎖的裝置。
18. 根據(jù)權(quán)利要求17的裝置,其中如果所述點(diǎn)在給定的時(shí)間段內(nèi) 沒有從所述I/0架構(gòu)中所述點(diǎn)以下的下一層接收到信用值,則所述點(diǎn)被 檢測(cè)為發(fā)生死鎖。
全文摘要
一種通過計(jì)算機(jī)實(shí)施的恢復(fù)I/O架構(gòu)的方法、裝置和機(jī)制,所述I/O架構(gòu)由于故障而終端擁塞或死鎖,該故障造成緩沖區(qū)/隊(duì)列填充,并因此造成根聯(lián)合體無法訪問其I/O子系統(tǒng)。在檢測(cè)到終端擁塞或死鎖的傳輸隊(duì)列時(shí),暫停其他根聯(lián)合體對(duì)該隊(duì)列的訪問,同時(shí)檢查隊(duì)列中的每個(gè)項(xiàng)目并進(jìn)行相應(yīng)處理。丟棄隊(duì)列中的存儲(chǔ)請(qǐng)求和DMA讀取應(yīng)答分組,并且通過返回一個(gè)特殊完成分組而對(duì)隊(duì)列中的加載請(qǐng)求進(jìn)行處理。隨后恢復(fù)根聯(lián)合體對(duì)該隊(duì)列的訪問。
文檔編號(hào)G06F11/00GK101097532SQ20071010464
公開日2008年1月2日 申請(qǐng)日期2007年5月18日 優(yōu)先權(quán)日2006年6月27日
發(fā)明者R·L·阿爾恩特, S·M·瑟伯, T·施利普夫 申請(qǐng)人:國際商業(yè)機(jī)器公司