存儲區域網絡設備中的輸入/輸出端口輪換的制作方法
【技術領域】
[0001]本描述涉及一種用于在存儲區域網絡中指派輸入/輸出端口的方法、系統和計算機程序。
【背景技術】
[0002]存儲區域網絡(SAN)被頻繁使用以允許存儲設備對主機的操作系統表現為就像其在本地接合至主機那樣的方式將諸如磁盤陣列、磁帶庫、光盤庫或其它存儲設備的遠程計算機存儲設備耦合至主機。光纖信道(FC)是一種高速聯網技術,其中信號可以通過例如包括光纖線纜或雙絞銅線線纜的各種傳輸媒體進行傳送。
[0003]存儲控制器可以具有被主機指派以輸入/輸出(I/O)任務的多個服務器。I/O可以是針對存儲中的具體卷。存儲控制器可以進一步具有多個輸入/輸出(I/o)適配器,諸如使得服務器能夠與主機進行通信的主機適配器,使得存儲控制器的服務器能夠與存儲設備進行通信的設備適配器。I/o適配器可以具有多個CPU,其從存儲控制器的一個或多個服務器接收輸入/輸出請求以執行輸入/輸出操作,其中數據通過I/o適配器的各個I/O端口而往來于存儲進行讀取或寫入。I/o適配器經常具有共享資源環境,例如,在上述共享資源環境中,諸如硬件資源和存儲器資源的資源可以被多個CPU所共享,上述硬件資源諸如I/O端口,而上述存儲器資源則諸如存儲器中的數據結構。I/O適配器中所使用的共享資源環境的示例例如是對稱多處理(SMP)環境。
[0004]例如,對共享資源的訪問可以使用諸如單一所有權或共享所有權規則之類的適當規則進行控制。在一種典型的共享資源環境中,對共享資源的訪問可以通過使用控制針對所訪問資源的訪問的共享存儲器數據結構中的鎖定字(lock word)來完成。本領域已知的另一種方法是將各種資源的相關聯數據結構在任務控制模塊中分組在一起,該任務控制模塊在任務每次開始時進行指派并且由每個CPU作為所執行任務的操作進行鎖定和解鎖。
[0005]在典型的共享資源環境中,每個I/O端口將使得其工作幾乎完全在單個CPU的控制下執行,直至該I/o端口的任務完成。這樣的指派被認為例如通過減少高速緩存置換而提高了多CPU適配器的性能。
[0006]被指派給特定CPU的I/O端口或多個端口的列表可以存儲在該CPU的數據結構的元素中。指派給特定I/o端口的特定CPU也可以由存儲在指派給該特定I/O端口的數據結構的元素中的適當CPU所有者ID進行識別。
[0007]指派特定I/O端口的CPU可以通過在指派給該特定I/O端口的數據結構的元素中設置鎖定而防止其它CPU訪問該特定I/O端口。一旦I/O端口不再被特定CPU所有,則該鎖定元素可以被清除。
[0008]要結合特定I/O端口執行的I/O任務可以在指派給特定I/O端口的數據結構的元素中進行識別。結合I/o端口執行的I/O工作指派例如包括與諸如光纖信道光學硬件的特定通信端口硬件進行通信例如向諸如ASIC的邏輯硬件中的直接存儲器訪問(DMA)引擎提交工作,例如在I/O適配器中將數據移入或移出一個或多個高速緩存,等等。
【發明內容】
[0009]過程、硬件、軟件、固件及其組合可以執行操作,包括:向輸入/輸出(I/O)適配器的多個中央處理單元(CPU)以及針對每個CPU指派I/O端口,并且在CPU和指派至該CPU的每個I/O端口之間傳輸數據。在本描述的一個方面,以上所提到的操作可以與I/O端口輪換的循環相結合,其中一個循環的每次端口輪換包括將至少一個I/o端口的指派從一個CPU輪換至該多個CPU中的不同CPU。此外,針對多個CPU中的每個CPU的I/O指派可以在該循環的至少一部分內進行輪換。
[0010]在另一方面,數據傳輸可以包括在一個CPU的控制下在至少一個I/O端口發起傳輸數據的任務,并且在對該至少一個I/o端口的指派從一個CPU輪換至不同CPU之后,在該不同CPU的控制下在該至少一個I/O端口繼續該數據傳輸的任務。而且,確定是否發起I/O端口輪換的循環可以包括確定多個CPU中的CPU數量是否大于或等于I/O適配器的I/O端口的數量。
[0011]在另一個方面,確定是否發起I/O端口輪換的循環可以包括確定預定的時間段是否已經到期。此外,發起I/O端口輪換的循環可以包括由一個CPU針對多個CPU中的其余CPU設置輪換標志,以針對多個CPU中的其余CPU發起端口輪換。
[0012]在又另一個方面,I/O端口輪換的循環中的每次端口輪換可以包括針對每個CPU確定是否將特定CPU的端口指派輪換至多個CPU中的不同CPU。此外,發起I/O端口輪換的循環可以包括由一個CPU針對多個CPU中的其余CPU設置輪換標志以針對多個CPU中的其余CPU發起端口輪換,并且針對每個CPU確定是否輪換端口指派可以包括檢查是否已經針對該特定CPU設置了輪換標志。
[0013]在另外的方面,針對每個CPU確定是否輪換端口指派可以包括確定該特定CPU是否具有任何活躍的I/O端口。而且,針對每個CPU確定是否輪換端口指派可以包括確定該CPU是否具有比該多個CPU中的任意其它CPU更少的活躍I/O端口。
[0014]在又另一個方面,針對每個CPU確定是否輪換端口指派可以包括選擇特定CPU所擁有的I/o端口以便將其端口指派輪換至另一個CPU。而且,選擇特定CPU所擁有的I/O端口以便將其端口指派輪換至另一個(PU可以包括選擇已經被該特定CPU擁有最久的活躍I/O端口。
[0015]在又另一個方面,該多個CPU中的CPU可以在序列中按順序進行編號并且將對至少一個I/O端口的指派從一個CPU輪換至該多個CPU中的不同CPU可以包括將對至少一個端口的指派從一個CPU輪換至順序編號的CPU的序列中的下一個順序編號的CPU。
[0016]其它的特征和方面將取決于特定應用而實現。
【附圖說明】
[0017]現在將參考附圖僅通過示例而對本發明的實施例進行描述,其中:
[0018]圖1圖示了其中可以采用本描述的一個方面的計算環境的實施例。
[0019]圖2圖示了依據本描述的其中I/O端口指派進行輪換的I/O適配器的實施例。
[0020]圖3A-3C描繪了圖2的I/O適配器的數據結構的示例。
[0021]圖4和4A描繪了依據本描述的一個方面的用于執行I/O端口指派輪換的操作示例。
[0022]圖5描繪了圖示依據本描述的一個方面的I/O端口指派輪換的一個示例的流程圖。
[0023]圖6描繪了依據該描述的一個方面的I/O端口指派輪換的操作的另一個示例。
[0024]圖7描繪了圖示依據該描述的一個方面的I/O端口指派輪換的另一個示例的另一圖表。
【具體實施方式】
[0025]圖1圖示了采用本描述的一個方面的計算環境的一個示例。依據本描述,在具有多個CPU和多個輸入/輸出(I/O)端口的I/O設備中,發起I/O端口輪換的循環。該循環的每個端口輪換包括將至少一個I/o端口的指派從一個CPU輪換至多個CPU中的不同CPU。在所圖示的實施例中,針對多個CPU中的每個CPU的I/O端口指派在該循環的至少一部分內進行輪換。這樣的指派被認為例如改進了 I/o端口之間的工作負載平衡。然而,其它特征或方面可以根據特定應用而實現。
[0026]在圖1的環境中,一個或多個主機122通過存儲區域網絡126傳輸針對存儲124的輸入/輸出(I/o)任務或其它處理請求,該存儲區域網絡126管理對存儲124的訪問。在一個實施例中,存儲區域網絡126包括多個服務器128a、128b、128c、128d,它們均包括處理器和存儲器。每個處理器可以包括一個或多個可被相關聯的服務器128a-128d用作處理資源的中央處理單元(CPU)。雖然存儲區域網絡126出于圖示的目的而被描繪為包括四個服務器128a-128d,但是要理解的是,服務器的數量可以根據特定應用而更大或更小。
[0027]每個128a_128d可以具有在服務器128a_128d中執行的一個或多個邏輯分區。每個邏輯分區單獨執行操作系統和設備驅動器。該邏輯分區包括處理器到邏輯上獨立但是協同操作的處理系統的劃分,每個處理系統具有其自己的操作系統和設備驅動器。多個邏輯分區可以在每個服務器128a-128d中執行,由該服務器128a_128d的監管模塊進行管理。
[0028]每個設備驅動器提供其中執行設備驅動器的邏輯分區中的操作系統與諸如I/O適配器的設備之間的接口,上述I/o適配器包括主機適配器132a,132b…132η和設備適配器144a, 144b…144η。主機適配器132a, 132b…132η使得服務器128a_128d能夠與主機122進行通信。設備適配器144a,144b…144η使得服務器128a_128d能夠與存儲124進行通信。因此,服務器128a-128d共享諸如適配器132a, 132b…132n、144a,144b...144η之類的設備。變量“η”被用來表示元素的整數實例,并且可以在隨不同元素使用時可以指示不同或相同的整數值。例如,132η、144η可以指示相同或不同數量的主機適配器132η和設備適配器144η。
[0029]服務器128a-128d通過交換結構(fabric) 150與主機適配器132a,132b…132η和設備適配器144a, 144b…144η進行通信。結構150可以包括在服務器128a_128d和適配器之間提供通信路徑的一個或多個接口。路徑包括結構150中使得能夠通過該結構與共享適配器進行通信的硬件。該結構例如可以包括光纖信道仲裁回路配置、串行回路架構或者諸如外部組件互連(PCI)接口的總線接口,上述PCK接口諸如PC1-Express接口。每個服務器128a-128d可以在初始化期間被指派以適配器132a,132b…132n、144a,144b…144η中的一部分。
[0030]在圖1的示例中,結構150可以包括有助于適配器132a,132b…132n、144a,144b…144n被每個服務器128a-128d所共享的交換機160。服務器128a_128d可以被指派以處理針對存儲124中所配置的具體卷的I/O請求。服務器128a-128d通過連接168進行通信,該連接168使得能夠進行處理器間的通信,以對關于諸如共享適配器132a,132b…132η、144a, 144b…144n之類的適配器共享設備所執行的配置操作進行管理。
[0031]圖2示出了 I/O適配器200,其可以與圖1的適配器132a,132b…132η、144a, 144b…144η相同或相似。在所圖示的實施例中,I/O適配器200例如可以是光纖信道適配器。根據特定應用,I/O適配器200可以利用其它通信協議。
[0032]適配器200具有多個CPU (也就是CPUO,CPU I, CPU2...CPUn,它們從一個或多個服務器128a-128d接收輸入/輸出請求)以執行其中數據通過I/O端口 PO,Pl,P2,...Pn而往來于存儲進行讀取和寫入的輸入/輸出操作。如這里所使用的,術語CPU是指可以利用一個或多個物理處理核實施的處理資源,該物理處理核可以被指派到與每個處理核相關聯的一個或多個處理資源中。因此,如這里所使用的,術語CPU可以用來指代一個或多個物理處理單元或核或者這樣提供處理資源的一部分。
[0033]適配器200具有諸如1/0端口?0汁1,?2,...?11所提供的I/O端口資源的其它資源。因此,如這里所使用的,術語I/O端口可以被用來指代物理I/O端口或者這樣向一個或多個CPU提供I/O端口資源的一部分。
[0034]適配器200的其它資源包括存儲器210所提供的存儲器資源。這些存儲器資源包括其可以臨時存儲諸如CPU—一CPUO, CPU1, CPU2...CPUn一一的I/O數據的數據的高速緩存212。每個CPU——CPUO, CPU I, CPU2...CPUn——可以對適配器200的一個或多個高速緩存進行訪問。
[0035]存儲器資源進一步包括編程資源214,其可以包括例如用于多個CPU—一CPUO, CPU I, CPU2...CPUn——的操作系統、程序