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),如下:

其中frequency是interconnects的频率,一般以MHz或者GT/s(Giga Transactions per second)来度量。

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, 因此带宽计算可以如下:

若一个stack有4个die, 则其带宽为,可以看到比DDR4宽大概一倍。需要注意的是虽然HBM的带宽比DDR宽,但是因为HBM2的GT/s还是不如DDR,所以HBM的访问延时会比DDR长。下面是Hynix的HBM2规格说明,可以备查。

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)。块设备与内存设备不同之处为:

  1. 内存读写的单位是byte,但盘读写的单位是block。因此计算盘的的带宽一般为:

    其中IOPS 为 Input/Output Operations Per Second。

  2. 顺序读写和随机读写的带宽是不一样的。一个直觉的解释就是:对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

计算系统中互联设备Survey的更多相关文章

  1. linux中MTDflash设备驱动大概

    一.主要结构体 1.mtd_info,主要是描述MTD原始设备层中的设备或分区, 2.mtd_part,表示一个分区,用里面的主mtd_info和本分区mtd_info描述分区, 3.mtd_part ...

  2. 向安装包中添加设备 UDID. 蒲公英内测

    向安装包中添加设备 UDID 前言 注:本文适用于只有苹果个人开发者账号.公司开发者账号.或教育开发者账号的 iOS 开发者. 对于没有企业开发者账号(299$)的开发者来说,要想使用蒲公英将自己的应 ...

  3. 使用SetupDI* API列举系统中的设备

    原文链接地址:https://blog.csdn.net/clteng/article/details/801012?utm_source=blogxgwz8 在Windows系统中提供一组有用的函数 ...

  4. 删除资源管理器中,设备和驱动器与左侧边栏中存在的WPS网盘等图标

    存在的问题:资源管理器中,设备和驱动器与左侧边栏中存在的百度网盘和WPS网盘等图标,看着比较碍眼,所以想设置为不显示,可是软件本身不提供右键不显示或删除的功能 解决方案: 删除设备和驱动器中不想要的图 ...

  5. 嵌入式Linux设备驱动程序:用户空间中的设备驱动程序

    嵌入式Linux设备驱动程序:用户空间中的设备驱动程序 Embedded Linux device drivers: Device drivers in user space Interfacing ...

  6. web开发中不同设备浏览器的区分

    通常区分不同设备浏览器是用JavaScript中的navigator.userAgent.toLowerCase()方式获取浏览器的userAgent信息 //使用javascript判断是否是iPh ...

  7. Linux中总线设备驱动模型及平台设备驱动实例

    本文将简要地介绍Linux总线设备驱动模型及其实现方式,并不会过多地涉及其在内核中的具体实现,最后,本文将会以平台总线为例介绍设备和驱动程序的实现过程. 目录: 一.总线设备驱动模型总体介绍及其实现方 ...

  8. JavaScript浏览器对象(BOM)中有关设备、浏览器屏幕高度和宽度的API介绍

    JavaScript世界中,有很多看起来能够帮我们知道网页宽度和高度的API,但太繁多了,而且容易弄混.不容易区分它们.下面我就来介绍一下,这些API到底是什么意思,之间的区别又在哪里. 一.设备的分 ...

  9. .NET4.0下网站应用法度用UrlRewriter.dll重写无后缀路径 (在IIS7.5中的设备办法)

    .NET4.0下网站应用法度用UrlRewriter.dll重写无后缀路径 在IIS中新建网站(端标语8111) 直接运行http://localhost:8111/ 设备办法: 二.添加通配符脚本映 ...

随机推荐

  1. git 放弃本地修改,强制拉取更新

    开发时,对于本地的项目中修改不做保存操作(或代码改崩),可以用到Git pull的强制覆盖,具体代码如下: git fetch --all git reset --hard origin/master ...

  2. 【申嵌视频】5-1 ubuntu下安装VMWare Tools工具

    [申嵌视频]5-1 ubuntu下安装VMWare Tools工具 适合搭建mini2440, Tiny6410, smart210,Tiny4412, NanoPC-T2, NanoPC-T3, N ...

  3. 【SQL实践】其他常用SQL汇总

    [SQL实践]其他常用SQL汇总 1.联表更新 update students stu inner join course on course.STUDENT_ID=stu.id set stu.na ...

  4. 安装virtualbox须知

    sudo usermod -a -G vboxusers `whoami`

  5. KindEditor自动过滤首行缩进和全角空格的解决方法

    KindEditor 4.1.11:kindeditor-all.js 文件中大致第752行: /(\s*)<(\/)?([\w\-:]+)((?:\s+|(?:\s+[\w\-:]+)|(?: ...

  6. python基础知识16---函数补充

    一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因 ...

  7. sas 9.4 sid 64bit 到期时间210804 带有EM

    PROC SETINIT RELEASE='9.4';SITEINFO NAME='NATIONAL PINGTUNG UNI OF SCIENCE&TECH'SITE=12001462 OS ...

  8. 如何通过dba_hist_active_sess_history分析数据库历史性能问题

    背景在很多情况下,当数据库发生性能问题的时候,我们并没有机会来收集足够的诊断信息,比如system state dump或者hang analyze,甚至问题发生的时候DBA根本不在场.这给我们诊断问 ...

  9. 《深度探索C++对象模型》读书笔记(一)

    前言 今年中下旬就要找工作了,我计划从现在就开始准备一些面试中会问到的基础知识,包括C++.操作系统.计算机网络.算法和数据结构等.C++就先从这本<深度探索C++对象模型>开始.不同于& ...

  10. 使用Git Bash上传代码到新的分支

    1.进入想要提交的项目,点击鼠标右键,选择"Git Bash Here" 2.输入命令,查看当前所有分支 git branch -a 3.输入命令,新建分支 git checkou ...