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. 3、Linux连接oracle

    su - oracle //登录sqlplus sqlplus /nolog //连接orcale conn xx/xx;(用户名/密码)  或者 connect /as sysdba;

  2. Window服务项目脚手架

    本人最近工作用到window服务程序,于是尝试分享下经验,开源了一个window服务脚手架项目,把window服务程序必不可少的组件集成进去,如日志组件log4net,window服务挂在后台,用日志 ...

  3. Spring Cloud(Dalston.SR5)--Config 集群配置中心-刷新配置

    远程 SVN 服务器上面的配置修改后,需要通知客户端来改变配置,需要增加 spring-boot-starter-actuator 依赖并将 management.security.enabled 设 ...

  4. C语言volatile关键字-漫画(转)

    转载地址:https://zhuanlan.zhihu.com/p/56191979 ————— 第二天 ————— ———————————— Java内存模型简称JMM(Java Memory Mo ...

  5. MySQL 5.6 以上版本支持三种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。

    Field 'id' doesn't have a default value问题解决方法 运维的名义关注0人评论3323人阅读2018-01-23 17:37:42   MySQL 5.0 以上版本 ...

  6. PHP swoole实现redis订阅和发布

    前戏:实现用户下单,服务器通知后台接收订单...类似美团外卖 1.首先要实现一个订阅程序 $result = $client->connect('127.0.0.1', 6379, functi ...

  7. IO练习

    #IO操作 import time; fileObj = open('log.txt','a'); while(True): data = input('请输入要写入的内容 : '); if data ...

  8. JavaScript 高级特性

    1. 原型Prototype 1.1 构造函数 所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造函数使用new运算符,就能生成实例,并且this变量会绑定 ...

  9. RDLC报表系列--------初级报表

    前面记录下了很多平时开发遇到的问题,RLDC之前也是不会,只会水晶报表,后来也慢慢的也上手了.把这些记录下来,以后用的着 1.打开VS添加新建项,选择Reporting,选择报表,后缀名为RLDC的名 ...

  10. Windows下面Node和NPM的绿色安装及配置

    1,Node安装 Windows版本可以在http://nodejs.org/#download下面选择msi安装版或者绿色版.其实Node的安装主要是Node.exe文件deploy和有关环境变量的 ...