Linux性能调优之硬件篇

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
Built with Hugo
主题 StackJimmy 设计