Survey of Inter-connects in computer system
姚偉峰
http://www.cnblogs.com/Matrix_Yao/
https://github.com/yao-matrix
計算機系統處理數據就像是碾谷機碾谷子,能碾多少谷子取決於兩個方面:一是機器每單位時間能碾多少谷子;二是傳送帶每單位時間能運多少谷子。如果瓶頸在前者,我們叫“compute boundary”,如果是后者,我們叫“communication boundary”。目前, 一個典型的IA CPU的系統如下圖:
在計算機系統中, interconnect連接着運算設備,內存設備與IO設備,承擔着傳送帶的職責。因此,它的帶寬和延時決定了communication的效率,本文主要討論帶寬。
首先亮出帶寬(Bandwidth, BW)計算公式,它的單位為GB/s(Giga Bytes per seconds),如下:
Computation Engine Interconnects
本部分討論計算設備間的互連設備(interconnect)及其帶寬參數的計算。
QPI/UPI
QPI(QuickPath Interconnect)和UPI(UltraPath Interconnect)是Intel為支持multi-socket而設計的socket間interconnect,其最大的特點是unified memory space和cache coherency。
例
Skylake spec 中UPI說明如下:
![]()
一般的dual-socket方案,兩個socket是通過兩個UPI lane連接的,每個lane的有效帶寬為16 bit,所以:
, 即41.6 GB/s.
需要注意的是QPI/UPI是全雙工的,且10.4GT/s包含了雙工的帶寬,所以嚴格來說單方向的帶寬為20.8 GB/s.
PCIe
PCIe(Peripheral Component Interconnect express) spec如下。
PCIe 3
例
Skylake spec 中PCIe說明如下:
![]()
對一個典型的16 lane的PCIe 3設備而言, 每條lane的有效帶寬為128/130 bit,所以其帶寬為:
,即15.8 GB/s.
在這里, PCIe的bus width是1 bit, 編碼效率是128b/130b.
P.S.
Rule-of-Thumb
PCIe 3.0 一條lane大約為1GB/s
PCIe 4
PCIe 4的GT/s是PCIe 3的一倍。也就是說一個16 lane的PCIe 4設備帶寬約為48 GB/s。
Memory Interconnects
本部分討論計算設備與內存間帶寬參數的計算。
DDR
最常見的內存設備就是DDR了。
例
Skylake spec 中memory 說明如下:
這里DPC = DIMMs Per Channel.
首先DDR 4每channel 的有效帶寬 是 64 bits (72 for ECC memory),從spec可以看出支持6 channel,頻率為2666MT/s。因此:
所以單socket的, 即 127 GB/s.
HBM
HBM(High Bandwidth Memory)顧名思義是高帶寬內存,它是一個通過3D堆疊技術把若干個DRAM(die)堆疊起來形成的memory.
每個die有兩個128-bit的channel(即 bytes), 目前正在使用的HBM2的transfer rate最高能到2 GT/s, 因此帶寬計算可以如下:

IO Interconnects
目前IO的帶寬與memory相比差距還是比較大的。所以談到分布式系統的時候,很多時候大家都說“IO is important”,甚至有人說“network is critical”。因為IO的帶寬與memory差距相當大,而在當前10 Gbps為部署主流的狀況下,network IO的差距尤甚。
Storage
Storage和Network是計算型workload中最常用的兩種IO設備。Storage設備就是各種各樣的盤,目前主流的是SSD(Solid State drive)和HDD(Hard Disk Drive),他們帶寬不同,但都是塊設備(block device)。塊設備與內存設備不同之處為:
- 內存讀寫的單位是byte,但盤讀寫的單位是block。因此計算盤的的帶寬一般為:
- 順序讀寫和隨機讀寫的帶寬是不一樣的。一個直覺的解釋就是:對HDD而言順序讀寫減少了磁針的尋道開銷,所以提高了讀寫帶寬。 但對SSD而言,因為不再有尋道和旋轉延時,理論上順序讀寫和隨機讀寫的帶寬是一樣的。另外在SSD中,不同的block size的IOPS是不一樣的,這是由SSD內部的scatter機制決定的。
所以,IOPS尤其是SSD的IOPS是個挺復雜的東西,受很多東西影響,我們一般通過測試而不是解讀spec來獲得其性能。在Linux中,一般通過fio測試我們關心的配置下的IOPS,然后用上述公式折算出帶寬。 從上限估算的角度,我們可以從它們使用的接口來給出一個上限。對SSD盤來說,目前主要有兩種:SATA和PCIe NVMe。SATA-2的帶寬為3 Gbps也就是375 MB/S,SATA-3的帶寬為6 Gbps也就是750 MB/s(除去校驗碼,實際只有600 MB/s),PCIe 3 x4的接口帶寬為4 GB/s。從這里可以看出,即使不管介質、控制器和協議的限制,單從接口的限制上來看,Storage離內存還是差得遠的。
需要注意的是,SATA接口之間是相互獨立的,也就是理論上來講,如果我插N塊盤,且能把文件均勻地scatter到各個盤中,理論上總的IO帶寬會變成N倍的。但是,有一個限制,就是因為SATA接口是接在PCH(Platform Controller Hub)的,然后PCH通過一個PCIe或者DMI(Direct Media Interface)與CPU連接,所以總帶寬上限受這個DMI或PCIe的帶寬限制。在下面這個板子design中,總帶寬限制是4 GB/s。
Network
目前比較的網絡有10 Gbps, 25 Gbps, 40 Gbps,后面演進有50 Gbps, 100 Gbps。就算到了100 Gbps,它的上限還是12.5 GB/s,離memory還是有較大距離的。
趨勢
隨着各種各樣的workload往雲端遷徙,雲端承載越來越多的各種各種的workloads,從web server到數據庫到AI, 因此雲端會逐漸成為一個需求hub。這使得“把所有的工作converge到CPU”方案變得越來越局促和不符合發展趨勢,“以CPU為中心”的系統設計也越來越不合時宜。“異構計算”時代已經到來,這不僅僅是因為目前的workload的多樣性發展趨勢,也是cloud provider作為workload hub的話語權越來越大的必然結果。AI只是踢開這個大門的第一個闖入者,我相信后續這樣的usage scenarios會越來越多。我們在見證一個交替的時代,一個生態從“hardware define application”轉型到“application define hardware”的時代,何其幸哉。
那么哪些系統設計方案會成為“明日之星”,我覺得以內存為中心 (memory-centric)的方案會是其中之一。我們已經看到很多這一方向上的探索,如CCIX,Gen-Z,OpenCAPI甚至NVLink。雖然它們有着不同的設計和實現方法,但是它們有一個共同的願景就是:系統設計思路應該開始從CPU monolithic轉移到engine democrtization,它的兩個顯著特點是:
- 各個計算引擎與內存的距離相似,即不會出現所有engine都必須經過CPU來access memory的情況。
- 統一編址(Unified Memory)。
References
[1] PCIe wiki
[2] Converting GT/s to Gbps
[3] DDR SDRAM
[4] Everything You Need To Know About QPI
[5] Performance Characteristics of Common Transports and Buses
[6] Intel Server Board S2600WT Design Spec