• 展开微博窗口
  • QQ:826945906
  • 微信:u200714928
  • 展开分类目录
胡伟

硬件&系统性能

首先看一下系统性能良好时的指标范围:

控类别 指标名称 指标范围(通过)
应用服务器(jvm和配置) JVM jvm内存占用率<=70%
线程池连接数 线程池连接数<=80%,没有出现线程阻塞、死锁现象
数据库活动连接数 数据库活动连接数<=85%
full gc频率 大于平均半小时1次GC
是否有异常日志 日志信息中,无错误信息如:OOM、及其他代码提示的错误
是否有OOM 没有年老代、持久代堆异常、栈异常及内存不够造成的异常
内存泄露 多次GC后,内存没有呈线性增长
数据库(mysql5.5) 系统负载 系统负载(Load Average)<=系统中CPU的核数*个数*0.7
CPU占用率 总CPU占用率<=70%,其中%us<=50%或%sy<=50%,%wa<=20%,无热点CPU现象
关注(1-id)%:无性能压力:0%~50%、有一定性能压力:50%~70%、达到性能阀值:70%~90%、严重性能问题:90%~100%
内存使用率 使用的内存利用率<=70%,si so中值为0
使用的内存利用率:无性能压力:0%~50%、有一定性能压力:50%~70%、达到性能阀值:70%~80%、严重性能问题:80%~100%
磁盘 %util<=80%,await约等于svctm,r/s+w/s=iops根据磁盘来计算后来判断,%iowait<=30%
数据库连接数 关注:(Max_used_connections/max_connections)*100/%<=85%
是否有慢查询SQL 没有出现执行较长时间的SQL语句,从慢查询日志获取
死锁 没有出现SQL死锁
操作系统(linux3.1) 系统负载 系统负载(Load Average)<=系统中CPU的核数*个数*0.7
CPU占用率 总CPU占用率<=70%,其中%us<=50%,%sy<=20%,%id<=30%,无热点CPU现象
关注(1-id)%:无性能压力:0%~50%、有一定性能压力:50%~70%、达到性能阀值:70%~90%、严重性能问题:90%~100%
内存使用率 使用的内存利用率<=70%,si so中值为0
使用的内存利用率:无性能压力:0%~50%、有一定性能压力:50%~70%、达到性能阀值:70%~80%、严重性能问题:80%~100%
磁盘 %util<=80%,await约等于svctm,r/s+w/s=iops根据磁盘来计算后来判断,%iowait<=20%
带宽 网络使用率 <=系统带宽的30%,无丢包,无延迟,无阻塞

 

时间单位换算关系

换算关系
1 s = 10^3 ms = 10^6 us = 10^9 ns = 10^12 μs

秒     毫秒       微秒     纳秒        皮秒

周期概念

  总结一下,它们之间的关系就是,指令周期由若干个机器周期组成,总线周期一般由4个时钟周期组成。 

  机器周期和总线周期……机器周期指的是完成一个基本操作的时间,这个基本操作有时可能包含总线读写,因而包含总线周期,但是有时可能与总线读写无关,所以,并无明确的相互包含的关系。

    指令周期:是CPU的关键指标,指取出并执行一条指令的时间。一般以机器周期为单位,分单指令执行周期、双指令执行周期等。现在的处理器的大部分指令(ARM、DSP)均采用单指令执行周期。

  机器周期:完成一个基本操作的时间单元,如取指周期、取数周期。

  CPU周期:又称机器周期,机器内部各种操作大致可归属为对CPU内部的操作和对主存的操作两大类,由于CPU内部操作速度较快,CPU访问一次内存所花的时间较长,因此用从内存读取一条指令字的最短时间来定义,这个基准时间就是CPU周期(机器周期)。一个指令周期常由若干CPU周期构成。

  总线周期(BUS Cycle):也就是一个访存储器或I/O端口操作所用的时间。

  时钟周期:CPU的晶振的工作频率的倒数。(fantaxy:晶振一次需要的时间),例如12M的晶振,它的时间周期就是1/12 μs,若采用了1MHZ的时钟频率,则时钟周期为1μs;若采用4MHZ的时钟频率,则时钟周期为250ns。

  例子:22.1184MHZ的晶振,它的晶振周期、时钟周期和机器周期分别是多少?

  以51为例,晶振22.1184M,时钟周期(晶振周期)就是(1/22.1184)μs,一个机器周期包含12个时钟周期,一个机器周期就是 0.5425μs。一个机器周期一般是一条指令花费的时间,也有些是2个机器周期的指令,DJNZ,是双周期指令。

  周期:就是时间,完成一次任务的时间

  时钟周期:这个名字的英文clock cycle; clock period;时钟是用来计时的,是一个基本单位;在计算机中,cpu的晶振时间就是一个最最基本的单位,因此时钟周期很基本,别的周期都用它来参考!

      上下文切换:上下文切换真正的开销随平台变化而不同,不过有个经验法则:大多数通用的处理器中,上下文切换的时间是5000到10000个时钟周期,或者是几微秒 

 

内存频率

        内存主频和CPU主频一样,习惯上被用来表示内存的速度,它代表着该内存所能达到的最高工作频率。内存主频是以MHz(兆赫)为单位来计量的。内存主频越高在一定程度上代表着内存所能达到的速度越快。内存主频决定着该内存最高能在什么样的频率正常工作。目前较为主流的内存频率是333MHz和400MHz的DDR内存,667MHz、800MHz和1066MHz的DDR2内存,1066MHz、1333MHz、1600MHz的DDR3内存。

        内存本身并不具备晶体振荡器,因此内存工作时的时钟信号是由主板芯片组的北桥或直接由主板的时钟发生器提供的,也就是说内存无法决定自身的工作频率,其实际工作频率是由主板来决定的。

 

磁盘 

磁盘性能指标

IOPS (Input/Output Operations Per Second)

即每秒进行读写(I/O)操作的次数,多用于数据库等场合,衡量随机访问的性能。存储端的IOPS性能和主机端的IO是不同的,IOPS是指存储每秒可接受多少次主机发出的访问,主机的一次IO需要多次访问存储才可以完成。例如,主机写入一个最小的数据块,也要经过“发送写入请求、写入数据、收到写入确认”等三个步骤,也就是3个存储端访问。

决定IOPS的主要取决与阵列的算法,cache命中率,以及磁盘个数。

如果一个阵列有120块15K rpm的光纤硬盘,那么,它能撑的最大IOPS为120*150=18000,这个为硬件限制的理论值,如果超过这个值,硬盘的响应可能会变的非常缓慢而不能正常提供业务。

 

数据吞吐量(Throughput)

指单位时间内可以成功传输的数据数量。对于大量顺序读写的应用,如VOD(Video On Demand),则更关注吞吐量指标。

 

磁盘服务时间

传统磁盘本质上一种机械装置,如FC, SAS, SATA磁盘,转速通常为5400/7200/10K/15K rpm不等。影响磁盘的关键因素是磁盘服务时间,即磁盘完成一个I/O请求所花费的时间,它由寻道时间、旋转延迟和数据传输时间三部分构成。

寻道时间Tseek是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms。
旋转延迟Trotation是指盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间。旋转延迟取决于磁盘转速,通常使用磁盘旋转一周所需时间的1/2表示。比如,7200 rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms,而转速为15000 rpm的磁盘其平均旋转延迟约为2ms。
数据传输时间Ttransfer是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。目前IDE/ATA能达到133MB/s,SATA II可达到300MB/s的接口数据传输率,数据传输时间通常远小于前两部分时间。

 

最大IOPS的理论计算

IOPS = 1000 ms/ (Tseek + Troatation),忽略数据传输时间。假设磁盘平均物理寻道时间为3ms, 磁盘转速为7200,10K,15K rpm,则磁盘IOPS理论最大值分别为,
IOPS = 1000 / (3 + 60000/7200/2)  = 140
IOPS = 1000 / (3 + 60000/10000/2) = 167
IOPS = 1000 / (3 + 60000/15000/2) = 200

固态硬盘SSD是一种电子装置, 避免了传统磁盘在寻道和旋转上的时间花费,存储单元寻址开销大大降低,因此IOPS可以非常高,能够达到数万甚至数十万。

IOPS的指标

通常情况下,IOPS可细分为如下几个指标:
Toatal IOPS,混合读写和顺序随机I/O负载情况下的磁盘IOPS,这个与实际I/O情况最为相符,大多数应用关注此指标。
Random Read IOPS,100%随机读负载情况下的IOPS。
Random Write IOPS,100%随机写负载情况下的IOPS。
Sequential Read IOPS,100%顺序负载读情况下的IOPS。
Sequential Write IOPS,100%顺序写负载情况下的IOPS。

码字很辛苦,转载请注明来自胡伟的博客《硬件&系统性能》

评论