在典型的基于PCIe的系統中,枚舉PCIe總線,并在系統初始化期間將資源分配給每個PCIe端點設備。由于枚舉和資源分配算法的局限性,PCIe拓撲一旦初始化,便已修復,這意味著不得將新的端點設備或交換機連接到系統。
IDT PCIe熱插拔驅動程序是一個可加載的Linux模塊,采用IDT專有的枚舉,資源分配和設備檢測算法,允許PCIe端點設備和交換機在運行時連接到系統或與系統斷開連接,而不會影響系統的運行狀態。系統中的其他PCIe設備。以圖1為參考,如果雙GigE控制器與系統斷開連接并隨后重新連接至其他交換機上的端口,則光纖通道控制器和SATA / SAS控制器的操作狀態將保持不變。這與PCIe熱插拔的Windows Vista實施不同,后者必須禁用,重新枚舉和重新分配資源給共享同一根端口的所有設備,然后新連接的設備才能運行。通過寫入位于/ sysfs目錄下的文件,可以簡單地以任意方式或更舒適地將設備連接至系統或從系統斷開連接。將0寫入/sysfs/bus/pci/slots/0000:bb:dd.f/power文件(其中bb指定總線號,dd指定設備號,f指定下游端口的功能號)將禁用指定下游端口,同時將1寫入同一文件將啟用下游端口。禁用下游端口時,將從Linux內核中刪除所有連接到該端口的設備,并且將調用PCI驅動程序remove()函數來執行所需的清除操作。同樣,啟用下游端口后,將發現與其連接的所有設備,添加到Linux內核中的PCI驅動程序probe()函數將被調用以執行設備初始化。下游端口也可以由第三方內核模式驅動程序通過使用標題為“啟用和禁用下游端口”中描述的熱插拔驅動程序API來啟用或禁用。
下面的圖2描述了可以與運行IDT PCIe熱插拔驅動程序的系統連接或斷開連接的設備類型的示例。
實現這種熱插拔功能的關鍵是能夠為系統中的每個下游端口分配其他未使用的總線號和內存資源。當新設備連接到系統時,這些額外資源將用于使該設備進入運行狀態,而不必損害共享同一根端口的其他設備的運行狀態。
系統互連注意事項
圖3中所示的IDT系統互連拓撲由一個基于x86的根聯合處理器(RP)組成,該根復雜處理器通過IDT系統互連PCIe交換機連接到一個或多個基于智能x86的端點處理器(EP)。每個EP都使用IDT域內交換機將它們連接到系統互連PCIe交換機的下游端口。這種拓撲結構與IDT系統互連軟件結合使用,可以在系統中任何兩個對等方之間進行高速數據傳輸。
當使用這種類型的拓撲將新的EP連接到系統或從系統斷開連接時,熱插拔驅動程序會將EP視為與任何普通端點設備相同。但是,當RP連接到系統或從系統斷開時,處理RP的方式有所不同。
通常,當PCIe交換機的上游端口斷開時,如圖4所示,該交換機將對其所有下游端口進行熱復位。此功能在系統互連拓撲中是不可取的,因為當RP與系統斷開連接時,它將阻止EP相互通信。熱插拔驅動程序通過檢測IDT PCIe系統互連交換機并禁用其上游端口斷開連接時生成熱重置的能力,從而解決了此問題。通過將linkDownHotReset模塊參數設置為非零值,可以在熱插拔驅動程序中禁用此功能。
熱插拔驅動程序還具有被動資源分配算法。該算法主要與IDT系統互連拓撲一起使用,該算法允許RP以最小的系統中斷將其連接到操作系統。通常,當端點設備連接到根聯合體時,是根聯合體將內存資源分配給該設備。對于被動資源分配,是由根聯合體將內存資源分配給設備。在被動資源分配的情況下,應該使用哪些內存資源的“根聯合體”。默認情況下,熱交換驅動程序中會啟用此功能,但可以通過設置passiveAllocationDisable模塊參數來禁用此功能。
編輯:hfy
-
交換機
+關注
關注
21文章
2660瀏覽量
100220 -
PCIe
+關注
關注
15文章
1266瀏覽量
83277 -
PCIE總線
+關注
關注
0文章
58瀏覽量
13473
發布評論請先 登錄
相關推薦
評論