QPI总线

**快速通道互聯**（英語：Intel **Q**uick**P**ath **I**nterconnect，縮寫：**QPI**），是一種由英特爾開發並使用的點對點處理器互聯架構，用來實現 CPU 之間的互聯。英特爾在 2008 年開始用 QPI 取代以往用於至強、安騰處理器的前端匯流排（FSB）。初期，英特爾給這種連接架構的名稱是「公共系統介面」（**Common System Interface** ，**CSI**），它的早期設計形態亦被稱為 Yet Another Protocol（YAP）和 YAP+。

英特爾在發布 Sandy Bridge-EP 核心（Romley 平台）後，也順勢公佈首代 QPI 的改進版 QPI 1.1 版本。Intel 於 2017 年發佈的 SkyLake-SP Xeon 中，用 UPI（**U**ltra**P**ath **I**nterconnect）取代 QPI。

## 背景

儘管多數時候被稱作「匯流排」，但是 QPI 是一種點對點互聯結構。它被設計成與超微半導體自 2003 年使用的超傳輸（HyperTransport）匯流排競爭。
英特爾在它下屬的麻省微處理器研究中心（Massachusetts Microprocessor Design Center，MMDC）開發設計 QPI，由以前曾在 DEC Alpha 的開發團隊的成員進行。這個原先來自 DEC 的開發團隊此前曾在康柏電腦和惠普工作，後來被英特爾挖角。而關於 QPI 的研究早在 2004 年就開始了。

QPI 的首次實作是英特爾自家的 Nehalem 微架構。在 2008 年 11 月發售的桌上型平台處理器 Core i7-900 系列和 X58 晶片組上、在 2009 年 3 月發布伺服器平台的 Xeon X5500 系列處理器。後來，2010 年 2 月發布的 Itanium 2 處理器（核心代號「Tukwila」），也使用了 QPI。

## 實作

QPI 通常作為一個系統架構的組成部分，英特爾稱之為「快速通道架構」（_QuickPath architecture_），這個架構的實作英特爾又稱之為「快速通道技術」（_QuickPath technology_）。在 QPI 最簡單的佈置形態 —— 單處理器主機板上，QPI 可用來將像是北橋晶片、南橋晶片的 IO Hub 和處理器對等連接，像是早期 Core i7-900 系列與 X58 晶片組之間的連接。在一些更複雜的架構的例子中，多個 QPI 鏈結可將一個以上的處理器或一個以上的 IO Hub 甚至主機板網路上的路由集線器對等連接起來，允許各個組件通過這個網路來與另一個組件進行通信。和 HyperTransport 匯流排類似，搭載快速互聯架構的處理器亦需要內建記憶體控制器，支援非均勻存取架構。

每個 QPI 包括有兩個 20 連線的點對點資料通道，每個通道一個傳送方向，而每一方向還配備單獨的時鐘訊號對（發送 TX，接收 RX），與資料訊號一起形成共 42 個訊號，如此一來達成全雙工運作。每個時鐘訊號採用差動訊號的形式傳送，因此 QPI 的訊號線共 84 條。20 條連線被劃分為四等份，每份 5 條連線。QPI 中基本資料傳送單元是 80 位元大小的 QPI 資料封包，每兩個時鐘週期完成一次一個 QPI 資料封包的傳送，在這兩個時鐘週期內，一個 QPI 資料封包是分為四次傳送，每次傳送 20 位元，即一個時鐘週期內傳送兩次。每個 80 位元的 QPI 資料封包內有 8 位元用於錯誤糾正，8 位元是「鏈路層報頭」，剩下的 64 位元才是包含的真實有效的資料。QPI 的頻寬的計算上，建議計算每兩個時鐘週期每方向傳送的有效資料量，由於 QPI 是雙向傳送的，因此每方向在兩個時鐘週期內都會有包含 64 位元（8 位元組）有效資料的資料封包的傳送。

儘管最初 QPI 僅實現四象限鏈結，但 QPI 的規格容許其它實作。每個象限可以獨立使用。在高可靠度伺服器上，一個 QPI 鏈結可以在降階模式中運作。如果 20+1 訊號中一個或多個鏈路失效，介面將剩餘的鏈路以 10+1 或最低 5+1 訊號來繼續運作，如果時鐘失效，甚至會為資料訊號重新分配時鐘。

最初實現四象限鏈路的是 Nehalem 架構的 4 核心處理器，使用完整的四象限鏈結 QPI 介面達成 25.6GB/s 的頻寬，提供兩倍於英特爾自家的 X48 晶片組上使用的 1600MHz FSB 的理論頻寬。

儘管最早 Core i7-900 系列全面使用 QPI，但其它 Nehalem 架構至桌上型處理器和行動型處理器，像是 Core i3、Core i5 以及其它 Core i7 系列（Lynnfield 核心、Clarksfield 核心以及其後續核心型號）的處理器，這些處理器因無需參與到多處理器系統上（從市場取向上也沒有必要加入該特性），因此任何外部存取方式上都沒有使用 QPI，儘管這些處理器內部仍然使用 QPI，用以連接處理器內的「Uncore」（「Uncore」指的是處理器晶片的一部分，包含記憶體控制器、PCI-E 控制器、以及內建 GPU，乃至整個北橋），這種設計可見於基於 Westmere 微架構的 Clarkdale 核心及 Arrandale 核心型號上（即首代 Core i3、i5）而這些系列的處理器，北橋已經移到處理器內部作為「Uncore」（或稱「片上北橋」）的一部分，和處理器核心直接連接，無需再以前端匯流排介面連接，處理器的外部連結通過片上北橋 / Uncore 使用較慢的 DMI（2.5GT/s 至 5.0GT/s 的吞吐量）或 PCI-e 匯流排介面，用來連接南橋 / PCH 或其它形式的外部裝置。Nehalem/Westmere 微架構上，Uncore / 片上北橋與處理器核心尚用 QPI 連接，而 Sandy Bridge 微架構以後的桌上型平台以及行動平台之處理器上則採用基於 QPI 衍生的環形匯流排鏈路連接，同時也保證快取一致性。

## 時脈規格

QPI 的運作時脈有 2.4GHz、2.93GHz、3.2GHz 或 4.0GHz（4.0GHz 用於企業級的 Sandy Bridge-E/EP 核心的處理器上）。每個特定鏈路的時脈取決於鏈路終端的組件之效能以及印刷電路板上訊號路徑的訊號特徵，亦即可根據所連接組件的資料吞吐量需求自行調整時脈，提高資源利用效率。最初，非極致版本的 Core i7-900 系列的處理器出廠預設的 QPI 時脈被限定在 2.4GHz。由於採用了雙倍資料率技術（DDR），位元的傳送在時鐘脈衝訊號的上升沿和下降沿都進行，因此，資料傳送的實際時脈是時鐘時脈的兩倍。

英特爾以 80 位元的 QPI 資料封包封裝的 64 位元實際有效資料的傳送量計數，來描述資料吞吐量和頻寬。然而，由於單向發送和單向接收鏈路對是同步進行的，亦即全雙工作業，英特爾後來將結果數字改為原來的兩倍。因此，英特爾描述中，一個運作於 3.2GHz 時脈速率的 20 通道的 QPI 鏈結對（發送和接收）擁有 6.4GT/s 的資料傳送速率，25.6GB/s 的頻寬，而同樣通道數的 QPI 運作於 2.4GHz 時資料傳送速率是 4.8GT/s，頻寬 19.2GB/s。更通常地，根據這個定義，一個兩端鏈結的 20 通道 QPI 每時鐘週期傳送 8 位元組，每方向 4 位元組。

頻寬計算：（以運作於 3.2GHz 時脈速率下，吞吐量 6.4GT/s）

　
: 3.2 GHz

　
: × 2 bits/Hz （雙倍資料傳送速率）

　
: × 20 （QPI 連接寬度）

　
: × (64/80) （資料位元數 / 資料封包位元數）

　
: × 2 （各向發送和接收作業同步進行）

　
: ÷ 8 （每位元組位元數）

　
: = 25.6 GB/s

或：

　
: 6.4 GT/s

　
: × 2 Byte （每次傳輸的有效資料，64 位元 / 4 次 / 8 位元一個位元組 = 2 位元組每次）

　
: × 2 （各項發送和接收作業同時進行）

　
: = 25.6 GB/s

如此類推，2.4GHz 或 4.8GT/s、4.0GHz 或 8.0GT/s、2.93GHz 或 5.86GT/s 的也可以計算出頻寬。

## 協定層

QPI 的協定定義了五層結構，分為物理層、鏈路層、路由層、傳輸層以及協定層。但是，在一些僅兩節點的點對點 QPI 組態組態上，像是 Core i7-900 系列和 Xeon 雙處理器平台（DP）系列的處理器，不需要傳輸層，路由層是最小最簡單的兩節點組態。

* **物理層**：物理層包含實際接線、差分發送器和接收器、加上發送和接收的物理層單元的最低級邏輯。所謂的物理層單元是 20 位元的封包分塊。當 20 個通道全部可用時，物理層利用 1 個單一時鐘訊號邊沿在 20 個通道上傳輸 20 位元的封包分塊，如果遇到失效 / 傳輸失敗的情況時，QPI 會重新組態，僅使用 10 個甚至只有 5 個通道來傳輸封包分塊。注意，除了資料訊號以外，會有一個時鐘訊號從發送器傳送到接收器上（這需要佔用一個額外的引腳來簡化時鐘恢復過程）。
* **鏈路層**：鏈路層負責發送和接收 80 位元的封包。每個封包發送至物理層上是作為 4 個 20 位元的封包分塊的形式。每個封包包括一個 8 位元的 CRC（循環冗餘校驗），由鏈路層發送器生成，72 位元是封包所承載的資料。如果鏈路層檢測到一個 CRC 錯誤，發送器通過一對鏈路中的返回鏈路發回一個封包通知發送器重發封包。為防止接收器的緩衝區溢位，鏈路層還通過賒賬 / 借記的方案來實現資料流量控制。鏈路層支援六種不同類型的訊息，來允許更高的協定層識別封包中主要用於保持快取一致性非資料部分並將之拆分以掠過。在實作一些複雜的快速通道架構上，鏈路層可被組態成為不同類別的資料流保持資料流分離和流量控制。但是，在單處理器和雙處理器平台上實作的快速通道架構，這方面的實作需要仍不明確。
* **路由層**：路由層傳送一個包含一個 8 位元報頭和 64 位元資料承載的 72 位元單元。報頭包括資料目的地和訊息類型。當路由層接收到一個單元，它會檢查它的路由表以確定單元是否到達目的地。如果單元已到達目的地的話，就將之傳遞至更高的協定層上。如果仍未到達目的地，單元將被發送到正確的向外傳輸 QPI。在只有單一 QPI 架構的裝置上，路由層是最小的。在更複雜的實作範例上，路由層的路由表會更為複雜、而且被客製化成動態更新以避免失效的 QPI 連結。
* **傳送層**：僅有兩節點的連接中，傳送層並不是必須的，而且亦不會出現在這些裝置上，像是 Core i7。傳送層可跨越 QPI 網路發送和接收資料，這個 QPI 網路由其它多個裝置上的數個節點以 QPI 連接組成，這些裝置也可能並沒有直接連接（舉個例子，資料可能會由一個已被插斷的裝置上經過），傳送層會校驗資料的完整性，如果資料不完整，它會要求上一個節點重新發送資料。
* **協定層**：協定層發送和接收代表裝置的封包。一個典型的封包是一個記憶體快取行。協定層也通過發送和接收快取一致性訊息的方式參與到快取一致性的維持。

## 參見

* HyperTransport
* 彈性介面匯流排
* 前端匯流排
* 電腦裝置頻寬列表
* PCI Express
* RapidIO

## 資料來源

## 外部連結

* First Look at Nehalem Microarchitecture
* Ars Technica's What You Need To Know About Nehalem （頁面存檔備份，存於網際網路檔案館）
* An Introduction to the Intel QuickPath Interconnect （頁面存檔備份，存於網際網路檔案館）