Matt Jones
摘要:新一代設計和產品的更新開始傾向于PCIe,以利用采用PCIe作為本地接口的現成的處理器、外設和交換解決方案的豐富生態系統。本文討論表明,嵌入式和通信應用市場是PCIe發明的旁路擴展的一部分,而相關規范和支持產品的形式必須通過創新來滿足這些市場的需求。
關鍵詞:PCIe總線;嵌入式;通信;多播
PCIe(PCI Express)的定義是提供增強的、可擴展的性能,緩解信號完整性和并行總線歷史擴展帶來的電路板布局問題。要求很高的臺式和企業計算及存儲應用對這種升級的互連標準的需求非常迫切。而這種需求促使PCI特別興趣小組(PCI-SIG)和元器件供應商調整初始規范和系統解決方案,以滿足新出現的這些應用需求。憑借基于充分滿足上述需求規范的目標產品形式,高量產服務器和存儲市場的早期采用者將PCIe作為芯片與芯片之間互連事實上的標準,以加速和拓寬應用。

盡管PCIe具有強勢的動力并普遍存在于計算與存儲應用當中,PCIe在嵌入式和通信應用方面卻一直受到極大限制。
PCIe規范是一個樹狀拓撲結構,由一個單主干和眾多分支組成,非常適合在單一計算復合體及其相關本地I/O之間的有效連接。這一非常適用于服務器和存儲應用的結構無法在多主系統中輕松實現系統互連。先進通信和嵌入式系統常常具備分布式計算和智能的特點,隨著時間的推移還可適合PCI和PCI-X結構,以支持這種架構。采用PCIe作為主系統互連需要規范的擴展,以支持優化的資源利用率、有效的數據傳輸和共享,以及多主系統中點與點之間系統一致性方面的構建。
PCIe生態系統中的PCIe規范擴展正在進行,以滿足嵌入式和通信應用的需求。這項工作正在挑剔的眼光下取得進展,確保在不給廣大用戶群增加任何負擔或對現有生態系統或使用模式做出任何改變的情況下,獲得所需的功能擴展。2008年5月,基于對PCIe基本規范2.0版的工程變更通知(ECN),PCI-SIG為PCIe標準加入了多播功能。這一新增的功能為分布式系統單元間數據的移動和共享提供了強大的功能,同時為PCIe在要求很高的嵌入式和通信應用中的主系統互連的應用掃除了一大障礙。PCIe多播可優化系統資源,有助于實現多個系統單元的有效數據傳輸,縮短延遲并提高一致性。重要的是,由于擴展了現有的PCIe規范,而且不增加負擔,不需要修改現有生態系統或使用模式,PCIe多播方案可以實現重要的系統優勢。

多播的系統優勢
多播是將量化數據包同時傳輸到一組目的地,同時通過防止任何不必要的數據復制,有效管理資源和系統帶寬的方法。在應用于嵌入式和通信應用的分布式或復制智能系統中,多播功能為發送同時引導時間或復位命令等任務和圖像提供了一個有效的一對多的數據分配機制,從而縮短復位排序和系統宕機,以及關鍵路由和政策控制信息的同步更新時間,確保系統數據的一致性。
如圖1所示,通過多播將相同的數據傳輸給多個接收人,能夠降低開銷,實現系統資源的優化。在這個非常簡單的模型中,對比不支持多播的PCIe交換器與支持多播的PCIe交換器。支持多播功能的系統或交換器可以利用一個由交換器管理的一個多播處理替代4個順序環路處理,從而使發起的CPU更方便地繼續其他任務,實現更有效的資源利用率。這種效率可以使系統計算資源承擔額外任務而充分提升性能,或者憑借所需的較低性能或較少的計算資源而節省系統成本和功耗。
除了系統資源優化外,將環路單播處理轉換成一個多播處理器,可以縮短傳輸延遲,提高系統點與點之間的一致性。參照圖1中簡單的模型,假設數據的順序傳輸按編號發生,那么相對第一個端點而言,第四個端點是過時的,直到所有過程完成。在單主系統中,這樣的差距相對較小,因為大部分數據由一個主機傳輸,在進一步動作之前,將會完成四個處理描述。然而,在分布式智能和點對點流量系統中,這種由重復單播處理帶來的差距會產生潛在的數據排序問題,因為包可能在相對不同的時間傳輸到每個端點,而非環路單播包的每個端點。假設通過環路發送至端點的信息是將路由表更新到通信系統包處理線卡的每四個網絡處理單元(NPU),那么每個端點路由表的更新都會基于順序傳輸和完成來增加延遲,隨之產生的差距允許線卡等待更新,路由根據此刻過時的表繼續接收包。
另外,多播數據可帶來整個系統較好的鏈路利用率,通常可以消除增強的性能所帶來的瓶頸,或實現配置更小、更有效使用的鏈路,以節省功耗,降低電路板設計的復雜性。基于上述定義的PCIe多播協議只有在分支被占用才會進行數據備份。圖2描述了通過一對PCIe交換器可能擁有多個層級PCIe互連結構。如圖左側所示,將相同的環路單播數據發送到端點1、2、3和4,會導致同一數據多次通過鏈路1和4。圖右側的系統利用PCIe多播功能,只需為每個需要邏輯復制數據的鏈路傳輸一次數據即可。

PCIe多播方案
最初討論的那樣,PCIe標準快速和廣泛的采用帶來了一個豐富的生態系統和曾依賴以前規范版本的巨大用戶群。因此,正如其他提議的擴展一樣,PCIe多播絕不能給現有生態系統或使用模式造成負面影響或增加負擔。尤其是,PCIe多播不需要對現有主聯合體、端點或新處理層數據包(TLP)格式進行硬件修改。功能性的優化取決于這些限制條件。PCIe多播是一個基于地址的多播功能,利用了一部分通用PCIe存儲空間和一個簡單的編程模型,可以將存儲器滯后寫入TLP的標準PCIe發送至多達64個多播組(MCG)中的多個接收者。雖然一個MCG可以包括0或1個成員,然而只有當MCG數大干2時系統才能獲益。因此,PCIe交換器(或系列交換器)必須用于提供發起者和MCG成員間的互連。多播流量可以由PCIe層級的任何器件發起,并傳輸給連接具有多播能力結構的交換器端口的許多參與者。每個端口具有多播能力結構的交換器可以在其任何端口之間傳輸多播包。主聯合體和端點可以從多播能力結構中獲益,但如上所述,這是這些器件的可選功能。



如圖3所示,下列系統列舉不會受多播功能影響。從多播窗口基址開始,系統軟件通過在PCIe存儲空間打開一個多播窗口來設置多播地址空間。利用該基址,多播窗口可以設置成相鄰的地址范圍。這些地址范圍可能將多達64個支持MCG的每個端口劃分成大小相同的子區間。多播窗口的大小沒有實際限制(即多播窗口可達263個字節)。多播窗口組的數目可以設置在1-64之間。
系統中支持多播的PCIe器件必須具有多播能力結構,使每個PCIe功能實現多播。在PCIe交換器中,要求每個傳輸或接收多
播數據的交換器端口都必須在共相應的虛擬PCI至PCI橋內支持多播能力結構。在每個多播能力結構內,同等配置的控制寄存器可以保持如下信息:多播窗口基址、MCG數目和MCG窗口大小。另外,每個能力結構都保持一個獨立配置,并維持64位控制矢量。這些控制位可以激活或禁用來自MCG的0~63的TLP接收,因而支配了每個MCG中每個PCIe功能的關系。在器件工作過程中,寄存器和控制位可以隨時讀寫。
多播PCIe TLP的傳輸和路由與單播TLP相比略有變化。圖4為PCIe交換器基本功能圖,充分描述了這些差別。接收主發送的TLP時,入站端口的地址解碼決定TLP是一個多播TLP(從邏輯上講,這是初始處理成為多重處理的地方)。沒有錯誤的解碼多播TLP轉發到交換器的虛擬PCI總線。單播流量有不同的路由規則,取決于TLP是在P2P橋的初級還是次級接收的。與單播流量不同,多播TLP是對稱轉發,而不必考慮P2P橋是否連了上行或下行端口。
所有連接到虛擬PCI總線的端口(即P2P橋功能)都可以接收多播TLP,檢查地址中MCG的ID,防止多播接收矢量的位狀態。基于每個MCG,多播接收矢量顯示是否允許P2P橋功能向其目的地轉發TLP。這將有助于交換器上每個P2P橋功能以每組為基礎對多播TLP接收者進行寄存。
一旦交換器內的P2P橋功能接收了多播TLP,就會在TLP上執行出站處理。多播TLP的出站處理將取決于連接在P2P橋的交換器端口上的鏈路組件能力。圖5顯示了PCIe交換器到PCIe交換器傳輸的多播能力結構的鏈路組件的情況。TLP是在沒有修改的情況下由遠程路由轉發的。不過,如上文所述,PCIe端點不需要實現多播能力結構來接收多播TLP。為了支持不具有多播功能的端點,系統軟件必須保證端點的基址寄存器覆蓋一部分多播地址范圍,或者PCIe交換器必須使用隨意指定的多播覆蓋機制。
由于確保端點功能地址范圍覆蓋的工作和多播地址范圍給系統設計者造成的負擔,以及每個產品SKU可能需要一個唯一的代碼庫,定義明確的交換器方案需要在每個交換端口的多播能力結構實現多播覆蓋功能,以優化靈活性并利用現有的可用端點。如圖6所示,地址覆蓋功能機制可以用于重映射來自多播窗口到端點基址寄存器(BAR)窗口接收的多播TLP地址。地址覆蓋是由交換器端口執行的。每個交換器端口可以配置不同的地址覆蓋值,從而獨立映射到伴隨每個端點的BAR窗口。支持32位和64位地址之間的轉換(例如,多播區域可以位于4GB邊界以上,而端點BAR可以在4GB邊界以下,反之亦然。)
結論
為了滿足要求很高的臺式、企業及存儲應用的需求,PCIe標準已成為芯片與芯片之間互連事實上的接口,具有豐富的生態系統和高量產基礎的終端應用。為滿足這些早期高量產應用的需求,該規范和早期產品形式已進行了調整來滿足其核心需求。隨著其他終端應用和使用模式的出現,該規范和生態系統正擴展其應用的服務寬度。PCIe多播功能的最新進展為多主嵌入式和通信系統實現了必要的擴展,優化的資源利用率,通過降低系統延遲提高了性能,完成了點與點之間的有效和一致的數據傳輸。以挑剔的眼光看,為了不給現有PCIe生態系統或用戶群增加負擔,擴展的功能要求不對主或端點硬件,以及TLP格式做任何改變。基于地址的PCIe多播方案具有簡單的編程模型,能夠以PCIe交換器激活,提供比之前的雙播等專有方案更加優越的功能和靈活性。