CPU性能
早期工程师热衷于提升单核CPU的性能,但随着时间发展,很快就意识到,仅仅提升单核性能会产生过多的热量而且无法带来相应的性能改善,于是多核的时代便来临了。
经典的多核CPU架构为SMP,在一个计算机上汇集一组CPU,他们之间对称工作,无主次或者从属关系,共享相同的物理内存及总线。每个CPU可以有多个核心,每个核心有各自的L1d Cache(L1指令缓存)及Lli Cache(L1指令缓存),同一个CPU的多个核心共享L2及L3 Cache。不同的CPU共享系统总线和内存地址。
SMP架构主要的特征就是共享,共享系统中的所有资源,内存,IO,由于多CPU对前端总线的竞争,SMP的扩展能力非常有限,所以目前主流服务器架构一般为 NUMA。系统有多个NUMA节点,每个节点是一个SMP结构,并且具有独立的本地内存,IO槽口等。
NUMA节点可以快速访问本地内存,也可以通过NUMA互联模块访问其他NUMA节点的内存,但访问本地内存的速度远远高于远程访问速度,所以,应用开发过程中,需要尽可能减少不同NUMA节点之间的通信。
IO 总线
很多存储系统的瓶颈都在于IO,以Intel x48主板为例,是典型的南、北桥架构,北桥芯片通过前端总线与CPU相连,内存模块,以及PCI-E设备(如高端SSD设备Fusion-IO)挂接在北桥上,北桥和南桥通过DMI相连,DMI宽带为1G/s,网卡,硬盘,以及中低端固态硬盘挂接在南桥上,如果采用SATA2接口,最大宽带为300M/s。
磁盘
磁盘读写性能分两个部分,一个是磁头的移动,一个是读写效率,性能瓶颈主要在于磁头的移动。15000转的SATA盘的顺序读取宽带可以达到100MB以上,由于磁头寻道时间大约10ms,顺序读取1MB数据的时间为:磁盘寻址时间+数据读取时间=20ms。应用程序设计时要考虑随机读写的问题,尽量要减少磁盘的读写,或者把随机读写转化为顺序读写。
固态硬盘SSD的应用越来越广泛,SSD特点是随机读取延迟小,能够提供很高的IOPS(每秒读写性能)。主要问题在于容量有限,价格较高,而且容易损坏。
不同存储的对比如下:
类别 | IOPS | 每GB价格(元) | 随机读取 | 随机写入 |
---|---|---|---|---|
内存 | 千万 | 150 | 友好 | 友好 |
SSD盘 | 35000 | 20 | 友好 | 写入放大 |
SAS磁盘 | 180 | 3 | 磁盘寻道 | 磁盘寻道 |
SATA磁盘 | 90 | 0.5 | 磁盘寻道 | 磁盘寻道 |
网络
传统的网络数据中心是三层的拓扑结构,分为核心层、汇聚层和接入层。接入层交换机包含48个1G端口以及4个10G的上行端口,汇聚层以及核心层的交换机包含128个10G的端口。统一个接入层下的服务器之间宽带为1G,不同接入层交换机下的服务器之间的宽带小于1G,由于同一个接入层的服务器常部署于在一个机架,应用设计的时候需要考虑服务是否在一个机架内。
为了减少系统对网络拓扑结构的依赖,Google将网络修改为扁平化拓扑结构,三级CLOS网络,同一个集群内最多支持20480台服务器,任何两台机器之间有1G宽带,方便将整个集群做成一个资源池。
单机房内网络来回1ms左右,北京和深圳之间,网络来回延迟达到30ms以上。
性能参数
类别 | 延迟 |
---|---|
访问 L1 Cache | 0.5ns |
分支预测失败 | 5ns |
访问 L2 Cache | 7ns |
Mutex锁操作 | 100ns |
内存访问 | 100ns |
千兆网络发送1MB数据 | 10ms |
从内存顺序读取1MB数据 | 0.25 ms |
机房内网络来回 | 0.5ms |
异地机房来回 | 30-100ms |
SATA磁盘寻道 | 10ms |
从SATA磁盘顺序读取 1MB 数据 | 20ms |
固态SSD访问延迟 | 01-0.2ms |