避免設備中的非公布請求死鎖的制作方法
【專利摘要】控制設備內的處理以避免死鎖情況。所述設備的本地請求引擎在進行請求之前確定待服務于所述請求的所述設備的端口是否在處理其它請求中正在進行轉發進程。如果正在進行轉發進程,則將所述請求轉發到所述端口。否則,掛起所述請求。這樣避免了死鎖情況,并且允許設備即使在部分恢復情況下也仍可操作。
【專利說明】避免設備中的非公布請求死鎖
【技術領域】
[0001]本發明的一個或多個方面通常涉及通信環境內的設備,具體地說,涉及避免設備內的死鎖。
【背景技術】
[0002]設備用在通信環境(例如計算環境)內,以促進環境的各個組件之間的通信。例如,設備可以在一端處耦合到外部設備而在另一端處耦合到系統總線,并且設備從外部設備接收請求并經由系統總線將它們轉發到系統組件。
[0003]很多類型的設備可以用于通信,包括PCIe (外設互連高速)設備。PCIe設備基于PCIe技術,其為一種點對點技術。PCIe設備經由被稱為互連或鏈路的邏輯連接來進行通信。鏈路是兩個PCIe端口之間的點對點通信信道,允許二者發送/接收普通PCI請求(配
置讀/寫、I/O讀/寫、存儲器讀/寫)和中斷。
[0004]PCIe具有與之關聯的規范,其提供對于使用PCIe設備的通信待服從的特定規則。該規范由PC1-SIG (PCI特殊興趣小組)開發并且維護。一種這樣的規則是排序規則,其規定將要處理包括交易的請求的順序。
【發明內容】
[0005]通過提供一種設備來克服現有技術的缺點并且提供優點,所述設備包括:端口,用于接收請求;以及請求引擎,耦合到所述端口,所述請求引擎被配置為執行一種方法。例如,所述方法包括:確定所述端口是否能夠對向內請求進行轉發進程;響應于確定轉發進程在所述端口受阻塞,掛起將請求發送到所述端口 ;并且響應于確定所述端口正在進行轉發進程,將所述請求發送到所述端口。
[0006]在此還描述并且要求與本發明的一個或多個方面有關的方法和計算機程序產品。此外,在此還描述并且要求與本發明的一個或多個方面有關的服務。
[0007]通過本發明的一個或多個方面的技術來實現附加特征和優點。本發明的其它實施例和方面在此詳細描述并且被看作一部分所要求的本發明。
【專利附圖】
【附圖說明】
[0008]在說明書的結尾的權利要求中,作為示例特定地指出并且獨特地要求本發明的一個或多個方面。從結合附圖進行的以下詳細描述中,本發明的以上和其它目的、特征和優點是顯而易見的,其中:
[0009]圖1描述根據本發明一方面所使用的設備的一個示例;
[0010]圖2描述根據本發明一方面的圖1的設備的端口的進一步細節;
[0011]圖3描述根據本發明一方面所使用的用于設置/重置轉發進程指示符的邏輯的一個實施例;
[0012]圖4描述根據本發明一方面用于確定請求是否待發送到設備的端口的邏輯的一個實施例;以及
[0013]圖5描述合并本發明一個或多個方面的計算機程序產品的一個實施例。
【具體實施方式】
[0014]根據本發明一方面,提供用于控制設備內的處理以例如避免死鎖情況的能力。所述設備的本地請求引擎在進行請求之前確定待服務于所述請求的所述設備的端口是否在處理其它請求時正在進行轉發進程。如果正在進行轉發進程,則將所述請求轉發到所述端口。否則,掛起所述請求。這樣避免了死鎖情況,并且允許設備即使在部分恢復情況下也仍可操作。
[0015]在一個具體示例中,所述設備是PCIe設備,并且所避免的死鎖是非公布請求死鎖。在一個示例中,當共享系統資源或設備端口處于恢復中時,歸因于PCIe排序規則,非公布請求可能死鎖。例如,如果設備的向外端口并非正在處理公布請求,并且一次僅可以掛起特定數量的公布寫入,則附加的公布寫入在該端口處累積。由于排序規則規定沒有請求可以通過公布寫入,因此所接收到的非公布請求可能不被處理并且可能產生死鎖。因此,根據本發明一方面,在進行請求之前,請求器確定在處理公布請求時是否正在進行轉發進程。如果是,則發送請求;否則,延遲發送請求。
[0016]如上所述,在一個實施例中,請求可以是公布請求或非公布請求。此外,請求可以是完成請求。公布請求是不期望接收完成的請求,對于公布請求無需完成。公布請求的示例包括存儲器寫入和消息。公布請求與非公布請求的對比在于需要完成。非公布請求的示例是存儲器讀取、存儲器讀取鎖定、I/o讀取、I/O寫入、配置讀取和配置寫入。完成是完成先前所發布的請求的請求。完成包括數據完成和非數據完成。
[0017]參照圖1描述根據本發明一方面所使用的設備的一個示例。在該示例中,設備是PCIe設備;然而,可以通過其它類型的設備來使用本發明的一個或多個方面。參照圖1,作為示例,PCIe設備100包括例如多個本地請求引擎,其包括一個或多個本地處理器(PU)102以及一個或多個直接存儲器存取(DMA)引擎104。本地請求引擎耦合到至少一個仲裁器/開關106,仲裁器/開關106用于控制設備的哪個端口將要從處理器或DMA引擎接收特定請求。
[0018]當來自請求引擎的請求針對外部PCI設備時,開關106將請求引導到南部端口110,南部端口 110耦合到PCIe總線112 ;而當請求是系統請求時,引導到北部端口 120,北部端口 120耦合到系統總線122。
[0019]從外部設備輸入到設備的請求在南部端口 110處被接收到,并且發送到北部端口120。經由緩沖器130來發送作為公布請求的請求。
[0020]在PCI和其它技術中,基于一組排序規則以特定順序來處理請求。提供這些規則以防止死鎖情況;然而,在特定情況下,死鎖可能仍然產生,如在此所描述的那樣,因此,通過本發明的一個或多個方面得以解決。下表中示出用于PCI的排序規則的一個示例。
[0021]
【權利要求】
1.一種設備,包括: 端口,用于接收請求; 請求引擎,耦合到所述端口,所述請求引擎被配置為執行方法,所述方法包括: 確定所述端口是否能夠對向內請求進行轉發進程; 響應于確定轉發進程在所述端口受阻塞,掛起將請求發送到所述端口 ;以及 響應于確定所述端口正在進行轉發進程,將所述請求發送到所述端口 ; 其中,所述確定包括:檢查所述端口內所存儲的轉發進程指示符,以確定所述端口是否正在進行轉發進程; 其中,所述端口包括硬件,所述硬件被配置為:將所述轉發進程指示符設置為指示是否正在進行轉發進程;并且其中,為了設置所述轉發進程指示符,所述硬件被配置為: 將用于所述端口的公布額度的數量與閾值級別進行比較;以及響應于所述比較指示所述公布額度的數量關于所述閾值級別處于所定義的級別,將所述轉發進程指示符設置為指示轉發進程。
2.如權利要求1所述的設備,其中,所述硬件進一步被配置為:響應于所述比較指示所述公布額度的數量關于所述閾值級別不處于所定義的級別,將所轉發的進程指示符設置為指示受阻塞。
3.如權利要求1所述的設備,其中,為了設置所述轉發進程指示符,所述硬件被配置為: 確定至少一個公布額度是否對于所述端口是未完成的; 響應于確定至少一個公布額度是未完成的,執行所述至少一個公布額度的一個或多個檢查;以及 響應于所述執行指示不足數量的公布額度,將所述轉發進程指示符設置為指示受阻塞。
4.如權利要求3所述的設備,其中,為了執行所述檢查,所述硬件進一步被配置為: 確定公布額度的數量是否在閾值級別以下;以及 響應于所述公布額度的數量在所述閾值級別以下,確定一個或多個公布額度是否在定時器窗口內返回,其中,響應于公布額度的數量在閾值級別以下并且一個或多個額度在定時器窗口內未返回,將轉發進程指示符設置為受阻塞。
5.如權利要求4所述的設備,還包括:處理器,用于設置或調整所述閾值級別和所述定時器窗口中的至少一個。
6.如權利要求1所述的設備,其中,所述端口是所述設備的南部端口,所述請求引擎是所述設備的本地處理器或所述設備的直接存儲器存取引擎之一。
7.如權利要求1所述的設備,其中,響應于確定轉發進程受阻塞,所述請求引擎執行其它工作。
8.—種控制通信環境的設備內的處理的方法,所述方法包括: 由所述設備的請求器確定所述設備的端口是否能夠對向內請求進行轉發進程; 響應于確定轉發進程在所述端口受阻塞,掛起將請求發送到所述端口 ;以及 響應于確定所述端口正在進行轉發進程,將所述請求發送到所述端口 ; 其中,所述確定包括:檢查所述端口內所存儲的轉發進程指示符,以確定所述端口是否正在進行轉發進程; 其中,所述方法還包括:將所述轉發進程指示符設置為指示是否正在進行轉發進程; 其中,所述設置包括: 確定至少一個公布額度是否對于所述端口是未完成的; 響應于確定至少一個公布額度是未完成的,執行所述至少一個公布額度的一個或多個檢查;以及 響應于所述執行指示不足數量的公布額度,將所述轉發進程指示符設置為指示受阻塞。
9.如權利要求8所述的方法,其中,所述執行包括: 確定公布額度的數量是否在閾值級別以下;以及 響應于所述公布額度的數量在所述閾值級別以下,確定一個或多個額度是否在定時器窗口內返回,其中,響應于公布額度的數量在閾值級別以下并且一個或多個額度在定時器窗口內未返回,將轉發進程指示符設置為受阻塞。
10.如權利要求9所述的方法,還包括:設置或調整所述閾值級別和所述定時器窗口中的至少一個。
11.如權利要求8所述的方法,其中,所述端口是所述設備的南部端口,所述請求器是所述設備的本地處理器或所述設備的直接存儲器存取引擎之一。
12.一種用于控制通信環境的設備內的處理的計算機程序產品,所述計算機程序產品包括: 計算機可讀介質,可由處理電路讀取,并且存儲用于由所述處理電路執行的指令,以用于執行方法,所述方法包括: 由所述設備的請求器確定所述設備的端口是否能夠對向內請求進行轉發進程; 響應于確定轉發進程在所述端口受阻塞,掛起將請求發送到所述端口 ;以及 響應于確定所述端口正在進行轉發進程,將所述請求發送到所述端口 ; 其中,所述確定包括:檢查所述端口內所存儲的轉發進程指示符,以確定所述端口是否正在進行轉發進程;以及 其中,所述方法還包括:將所述轉發進程指示符設置為指示是否正在進行轉發進程,所述設置包括: 確定至少一個公布額度是否為未完成的; 響應于確定至少一個公布額度是未完成的,執行所述至少一個公布額度的一個或多個檢查;以及 響應于所述執行指示不足數量的公布額度,將所述轉發進程指示符設置為指示受阻塞。
【文檔編號】G06F13/00GK103597457SQ201280025852
【公開日】2014年2月19日 申請日期:2012年5月9日 優先權日:2011年6月1日
【發明者】J.C.漢斯科姆, C.A.本德, T.尼德哈姆 申請人:國際商業機器公司