磁盘IO

1.      磁盘IO

1.1.  系统吞吐量、TPS(QPS)、用户并发

1.1.1.             系统吞度量要素:

  一个系统的吞度量(承压能力)与requestCPU的消耗、外部接口、IO等等紧密关联。单个reqeust CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。

系统吞吐量几个重要参数:QPSTPS)、并发数、响应时间

        QPSTPS):每秒钟request/事务 数量

        并发数: 系统同时处理的request/事务数

        响应时间:  一般取平均响应时间

(很多人经常会把并发数和TPS理解混淆)

再次说明:

QPSQueries Per Second意思是每秒查询率,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

TPSTransactionsPerSecond的缩写,也就是事务数/。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,最终利用这些信息来估计得分。客户机使用加权协函数平均方法来计算客户机的得分,测试软件就是利用客户机的这些信息使用加权协函数平均方法来计算服务器端的整体TPS得分。

理解了上面三个要素的意义之后,就能推算出它们之间的关系:
QPS
TPS= 并发数/平均响应时间  或者 并发数= QPS*平均响应时间
       一个典型的上班签到系统,早上8点上班,7点半到8点的30分钟的时间里用户会登录签到系统进行签到。公司员工为1000人,平均每个员上登录签到系统的时长为5分钟。可以用下面的方法计算。
QPS = 1000/(30*60)
事务/
平均响应时间为 = 5*60  
并发数= QPS*平均响应时间= 1000/(30*60) *(5*60)=166.7

举例:

QPSPV和需要部署机器数量计算公式()

术语说明:
QPS = req/sec =
请求数/

 

QPS计算PV和机器的方式

QPS统计方式 [一般使用 http_load 进行统计]
QPS =
总请求数 / ( 进程总数 *  请求时间 )
QPS:
单个进程每秒请求服务器的成功次

单台服务器每天PV计算
公式1:每天总PV = QPS * 3600 * 6
公式2:每天总PV = QPS * 3600 * 8

服务器计算
服务器数量 =   ceil( 每天总PV / 单台服务器每天总PV )

 

【峰值QPS和机器计算公式

原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间
公式:( PV * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS)
机器:峰值时间每秒QPS /单台机器的QPS   = 需要的机

问:每天300w PV 的在单台机器上,这台机器需要多少QPS
答:( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139(QPS)

问:如果一台机器的QPS58,需要几台机器来支持?
答:139 / 58 = 3

1.1.2.             IOPS (Input/OutputPerSecond)

IOPS 即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。随机读写频繁的应用,如OLTP(OnlineTransaction Processing),IOPS是关键衡量指标。

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

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

1)寻道时间

Tseek是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在315ms

2)旋转延迟

Trotation是指盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间。旋转延迟取决于磁盘转速,通常使用磁盘旋转一周所需时间的1/2表示。比如,7200 rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms,而转速为15000 rpm的磁盘其平均旋转延迟约为2ms

3)数据传输时间

Ttransfer是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。目前IDE/ATA能达到133MB/sMBPS),SATA II可达到300MB/s的接口数据传输率,数据传输时间通常远小于前两部分时间。 

IOPS(每秒IO次数) = 1s/(寻道时间+旋转延迟+数据传输时间)

因此,理论上可以计算出磁盘的最大IOPS,即IOPS = 1000ms/ (Tseek + Troatation),忽略数据传输时间。假设磁盘平均物理寻道时间为3ms,磁盘转速为7200,10K,15Krpm,则磁盘IOPS理论最大值分别为:

IOPS = 1000 / (3 + 60000/7200/2)  =140
IOPS = 1000 / (3 + 60000/10000/2) = 167
IOPS = 1000 / (3 + 60000/15000/2) = 200

 

1.1.3.             固态硬盘的IOPS

固态硬盘SSD是一种电子装置,避免了传统磁盘在寻道和旋转上的时间花费,存储单元寻址开销大大降低,因此IOPS可以非常高,能够达到数万甚至数十万。实际测量中,IOPS数值会受到很多因素的影响,包括I/O负载特征(读写比例,顺序和随机,工作线程数,队列深度,数据记录大小)、系统配置、操作系统、磁盘驱动等等。因此对比测量磁盘IOPS时,必须在同样的测试基准下进行,即便如何也会产生一定的随机不确定性。

 

通常情况下,IOPS可细分为如下几个指标:

Toatal IOPS:混合读写和顺序随机I/O负载情况下的磁盘IOPS,这个与实际I/O情况最为相符,大多数应用关注此指标。

Random Read IOPS:100%随机读负载情况下的IOPS。

Random WriteIOPS:100%随机写负载情况下的IOPS。

Sequential ReadIOPS:100%顺序负载读情况下的IOPS。

Sequential WriteIOPS:100%顺序写负载情况下的IOPS。

 

MySQL的QPS计算
show global status where Variable_namein('com_select','com_insert','com_delete','com_update');
等待10秒
show global status where Variable_name in('com_select','com_insert','com_delete','com_update');
计算差值
MySQL的TPS计算
show global status where Variable_namein('com_insert','com_delete','com_update');
等待10秒
show global status where Variable_namein('com_insert','com_delete','com_update');
计算差值

 

 

ORION - 免费的IO性能测试工具

http://www.oracle.com/technetwork/cn/topics/index-088165-zhs.html

1、数据库OLTP类型,假定IO类型全部是8K随机操作,压力类型,自动加压,从小到大,一直到存储压力极限

#./orion -run advanced -testnamedave-num_disks 1 -size_small 8 -size_large 8 -type rand &

2、数据库吞吐量测试,假定IO全部是1M的序列性IO

#./orion -run advanced -testnamemytest-num_disks 96 -size_small 1024 -size_large 1024 -type seq &

3、指定特定的IO类型与IO压力,如指定小IO为压力500的时候,不同大IO下的压力情况

#./orion -run advanced -testname mytest-num_disks96 -size_small 8 -size_large 128 -matrix col -num_small 500 -typerand &

4、结合不同的IO类型,测试压力矩阵

#./orion -run advanced -testnamemytest-num_disks 96 -size_small 8 -size_large 128 -matrix detailed -type rand&

<think>嗯,用户现在想了解磁盘IO相关的优化、高负载问题以及性能方面的内容。让我先理清楚用户的需求。他们可能遇到了磁盘IO性能瓶颈,或者想提前预防这类问题。根据提供的引用资料,我需要综合这些信息,给出结构清晰的建议。 首先,用户提到的引用[1]指出,当util达到100%时,磁盘成为瓶颈,可能需要增加磁盘或优化应用。引用[2]提到了使用iotop分析进程的IO情况,而引用[3]和[4]则讨论了挂载参数优化和文件缓存的问题。我需要把这些点组织起来,分步骤解答。 用户可能需要知道如何诊断高IO问题,所以第一步应该是诊断方法,比如使用iostat、iotop、pidstat等工具。接下来,硬件和配置优化,比如RAID、SSD、文件系统参数调整。然后是应用层优化,比如顺序读写、缓存策略。最后是其他策略如负载均衡、内核参数调整。 还要考虑用户的实际场景,他们可能是在服务器运维或者应用开发中遇到问题。例如,对于数据库应用,日志文件处理可能需要避免频繁seek,像kafka那样顺序写入,这点引用[4]提到过。另外,引用[3]中的mount参数如noatime、nobarrier可能对性能有帮助,但需要根据具体情况调整。 需要确保回答覆盖了用户可能关心的各个方面,并且每个部分都有具体的例子或工具使用,比如给出iostat的输出解释,或者具体的优化命令。同时,生成的相关问题要引导用户深入探讨每个优化点,比如如何分析IO高的进程,或者调整哪些内核参数。 可能用户没有明确说明是Linux环境,但引用中的工具都是Linux相关的,所以假设用户使用的是Linux系统。另外,用户可能对某些术语不太熟悉,比如util的含义,需要简要解释,但根据示例回答,用户可能已经有一定基础,所以保持技术性但不过于基础。 最后,确保引用正确对应到各个要点,比如引用[1]对应util的解释,引用[4]对应文件缓存优化。检查是否有遗漏的重要点,比如IO调度算法,在引用中没有提到,但属于常见优化手段,可能需要补充,但根据提供的引用,可能只能依赖已有内容。 现在组织这些思路,分步骤回答,确保结构清晰,每个部分有子点,并自然融入引用标注。生成的问题需要覆盖诊断、优化方法、工具使用、应用场景等方面,帮助用户进一步探索。</think>### 磁盘I/O问题分析与优化指南 #### 一、磁盘I/O问题的诊断方法 1. **性能指标监测** - 使用`iostat -x 1`查看磁盘利用率($util$),当$util \geq 90\%$时表明磁盘成为系统瓶颈[^1] - 通过`iotop`定位具体进程的I/O行为,关注`kB_rd/s`(读取速度)、`kB_wr/s`(写入速度)等指标[^2] - `pidstat -d`可显示进程级别的I/O统计,如: ``` PID kB_rd/s kB_wr/s kB_ccwr/s Command 1234 0.00 1024.00 0.00 java ``` 2. **硬件状态排查** - 检查RAID配置是否合理(如RAID5写性能较差) - 确认SSD/NVMe等高速存储设备的健康状态(通过`smartctl`工具) #### 二、硬件与配置优化 1. **存储设备升级** - 将机械硬盘(HDD)替换为固态硬盘(SSD),吞吐量可提升$10 \sim 100$倍 - 使用NVMe协议硬盘降低延迟(延迟可降至$0.1ms$以下) 2. **文件系统参数优化** ```bash # 修改/etc/fstab挂载参数示例 UUID=xxxx /data ext4 defaults,noatime,nodiratime,nobarrier,discard 0 0 ``` - `noatime`:禁止记录文件访问时间,减少元数据写入[^3] - `nobarrier`:关闭写入屏障(需配合UPS使用) #### 三、应用层优化策略 1. **I/O模式优化** - 将随机读写转换为顺序读写(如Kafka日志追加写入设计[^4]) - 批量合并小文件操作(减少$seek$次数) 2. **缓存机制应用** - 使用内存缓存(如Redis)降低磁盘访问频率 - 调整文件缓存策略(`vfs_cache_pressure`参数控制内存回收倾向) #### 四、其他优化策略 1. **负载均衡方案** - 分布式存储系统分片(如Ceph、HDFS) - 数据库读写分离(主库写、从库读) 2. **内核参数调优** ```bash # 调整I/O调度算法(deadline适合数据库场景) echo deadline > /sys/block/sda/queue/scheduler # 增大队列深度 echo 1024 > /sys/block/sda/queue/nr_requests ``` $$ \text{吞吐量提升公式}:T = \frac{\text{I/O请求大小}}{\text{寻道时间} + \text{旋转延迟} + \frac{\text{传输大小}}{\text{传输速率}}} $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值