架構目標
xHCI在許多方面相較前幾代USB主機控制器接口架構有著根本突破。前幾代是:開放主機控制器接口(OHCI)、通用主機控制器接口(UHCI)和增強主機控制器接口(EHCI)。以下是xHCI架構的主要目標:
•高效運行 – 閒置耗電與性能優於傳統USB主機控制器架構;
•與現有USB軟體模型完全一致的設備級編程模型;
•將提供給軟體的主機控制器接口與底層USB協定解耦;
•最小化主機記憶體訪問,完全消除USB設備空閒時的主機記憶體訪問;
•消除暫存器寫入並最小化正常數據傳輸時的暫存器讀取;
•消除“同伴控制器”模式;
•在系統資源受限情況下啟用硬體“故障轉移”模式,因此設備仍然可以訪問,但可能有不利的功耗/性能;
•提供不同市場不同硬體功能的能力,例如針對特定市場的主機控制器功率、性能和成本折衷;
•定義一個可擴展架構,為新的USB規範和技術提供一條簡單的路徑,例如更高頻寬接口、光傳輸介質等,使其不需要再定義一個USB主機控制器接口。
架構細節
支持所有速度
OHCI及UHCI控制器僅支持USB 1速度驅動程式(1.5 Mbit/s和12 Mbit/s)而EHCI僅支持USB 2驅動程式(480 Mbit/s)。
xHCI架構在設計上支持所有USB速度,包括SuperSpeed(5 Gbit/s)和未來的速度,且只需單個驅動程式堆疊。
供電效能
在USB最早於1995年開發之時,它是為台式機平台而設計,防止PC上的連線器不斷增加(例如PS/2、串列連線埠、並行連線埠、遊戲連線埠等),當時主機的功耗並不是重要的考慮因素。在那之後,移動平台已經成為選擇之一,而其電池使功耗成為一項關鍵的考慮因素。傳統USB主機控制器(OHCI、UHCI和EHCI)的架構非常相似,在USB上執行的事務的“日程安排”由主機記憶體中的軟體構建,並且主機控制器硬體將連續讀取調度以確定在USB上需要驅動的事務,哪怕沒有數據被移動。另外,在從設備讀取之時,即使沒有要數據的讀取,也會在每個調度間隔之時輪詢設備。
•xHCI消除了基於USB事務日程的主機記憶體,在沒有USB數據移動時,可以實現主機記憶體零活動。
•xHCI允許USB 3.0或更高版本的設備在數據可被讀取時通知主機控制器,從而減少定期輪詢設備的需求;並將使用中斷處理的USB 2.0和1.1設備的管理從CPU驅動的USB驅動程式移動到USB主機控制器。如果不需要任何更改、並且如果沒有任何設備有任何中斷髮送,EHCI、OHCI和UHCI主機控制器會自動為CPU處理輪詢,但它們都依賴CPU為控制器設定日程表。如果使用中斷事務的任何USB設備有要傳送的數據,則xHCI主機控制器將傳送中斷,通知CPU有需要處理的USB中斷事務。由於CPU不再需要管理USB匯流排的輪詢,因此可以在低功耗狀態下保持更久。
•xHCI不要求其實現支持所有高級的USB 2和3電源管理功能,包括USB 2 LPM、USB 3 U1和U2狀態、HERD、LTM、功能喚醒等。但是這些功能是實現xHCI所有優點的必要條件。
虛擬化支持
傳統的USB主機-控制器架構在套用於虛擬化環境時表現出一些嚴重的缺陷。傳統的USB主機-控制器接口定義了一個相對簡單的硬體數據泵;其中與整體匯流排管理(頻寬分配、地址分配等)相關的關鍵狀態駐留在主機適配器驅動程式(HCD)的軟體中。嘗試將標準的硬體IO虛擬化技術(複製I/O接口暫存器)套用於傳統USB主機控制器接口是有問題的,因為跨越虛擬機(VM)的關鍵狀態的管理不適用於硬體。xHCI架構將這一關鍵狀態的控制轉移到硬體,從而實現跨虛擬機的USB資源管理。xHCI虛擬化功能還提供:
•各個USB設備(不管其在匯流排拓撲中的位置)直接分配給任何虛擬機;
•最小化運行時虛擬機之間的通信;
•支持原生USB設備共享;
•支持PCIe SR-IOV。
簡化驅動程式架構
EHCI使用OHCI或UHCI控制器作為“同伴控制器”,其中USB 2設備通過EHCI堆疊管理,並且EHCI的連線埠邏輯允許將低速或全速USB設備路由到“同伴”的UHCI或OHCI控制器,其中低速或全速USB設備通過相應的UHCI或OHCI堆疊管理。舉例來說,提供4個USB“標準A”連線器的USB 2 PCIe主機控制器卡通常會向系統軟體提供一個4連線埠EHCI和兩個2連線埠OHCI控制器。當一個高速USB設備連線到4個連線器之一時,該設備是受EHCI控制器的4個根集線器連線埠之一管理。如果一個低速或全速USB設備連線到連線器1或2,它將被路由到其中一個OHCI控制器的根集線器連線埠來管理,以及連線到連線器3或4的低速和全速USB設備將路由到另一個OHCI控制器的根集線器連線埠。
•xHCI架構消除了同伴控制器及其單獨的驅動程式堆疊的需求。
•以前由驅動程式執行的日程合併、頻寬管理和USB設備地址分配功能,現在轉入xHCI硬體,這使xHCI的軟體堆疊更簡單、精簡、更低延遲。
流支持
USB 3.0 SuperSpeed規範中增加了流支持,這主要是為通過USB實現高性能存儲操作。USB端點與系統記憶體的緩衝區之間的關係通常是1:1,主機控制器只負責指導所有的數據傳輸。流通過提供一對多的“緩衝區”的關聯改變了這個範例,並允許設備直接告知主機控制器將移動指向哪個緩衝區。與USB流端點相關聯的USB數據傳輸是由xHCI所有的、相同的批量端點調度,但與傳輸相關聯的數據緩衝區由設備決定。 xHCI USB流支持最多64K緩衝區與單個端點相關聯。
•xHCI流協定的支持允許USB設備選擇xHCI調度時選擇哪個緩衝區用於傳輸。
可擴展性
xHCI架構被設計為高度可擴展,能夠支持1到255個USB設備和1到255個根集線器連線埠。因為每個USB設備最多定義31個端點,因此支持255個設備的xHCI最多能支持7,906個單獨的總端點。通常來說,與一個端點關聯的每個記憶體緩衝區是以一個物理記憶體塊中的佇列描述,其中的佇列需要頭指針、尾指針、長度等暫存器來定義其狀態。有很多方法可以來定義佇列狀態,但如果每個佇列要占用32個位元組的暫存器空間,則幾乎需要256KB的暫存器空間才能支持7,906個佇列。一般來說,只有少量USB設備被同時連線到一個系統,並且平均來說,一個USB設備支持3-4個端點,而其中部分端點在同一時間處於活動狀態。xHCI在系統記憶體中維護佇列狀態作為端點的上下文數據結構。上下文的設計使得它們可以被xHCI快取,並且以端點的活動進行“分頁”。因而,供應商可以根據其產品預期的實際使用模式調整其內部的xHCI端點上下文快取的空間和資源,而不必按照架構本身的限制來設計。在內部快取空間選擇理想並且正常使用條件的的情況下,xHCI不出現上下文分頁。USB端點的活動往往是突發性。也就是說,在任何時間點,都可能有大量端點準備好移動數據,但只有一個子集活躍於移動數據。例如,如果用戶離開了設備,則滑鼠的中斷端點可能數小時不會傳輸數據。xHCI供應商設計的算法可以檢測這種情況,並在其他端點變為忙碌時使該端點變為分頁候選。
•xHCI架構本身設計的最大值允許大量USB設備、連線埠、中斷向量,……但相應實現的定義只需要滿足其行銷所宣稱的數值。舉例來說,供應商可以將其平板電腦上實現的xHCI只支持最多16個USB設備。
•供應商可以進一步利用xHCI架構特性來調整其內部資源,以匹配目標使用模式。例如,如果供應商經過可用性測試確定95%的平板電腦用戶永遠不會連線超過4個USB設備,並且每個USB設備通常定義4個端點(或更少), 那么可以確定正常情況下內部快取16個端點上下文就已足夠,不會有由於端點上下文分頁產生的系統記憶體活動。