2020-02-17 12:25:06
磁盘 IO 和网络 IO 该如何评估、监控、性能定位和优化
生产中经常遇到一些IO延时长导致的系统吞吐量下降、响应时间慢等问题,例如交换机故障、网线老化导致的丢包重传;存储阵列条带宽度不足、缓存不足、QoS限制、RAID级别设置不当等引起的IO延时。
一、评估 IO 能力的前提
评估一个系统IO能力的前提是需要搞清楚这个系统的IO模型是怎么样的。那么IO模型是什么,为什么要提炼IO模型呢?
(一)、IO模型
在实际的业务处理过程中,一般来说IO比较混杂,比如说读写比例、IO尺寸等等,都是有波动的。所以我们提炼IO模型的时候,一般是针对某一个特定的场景来建立模型,用于IO容量规划以及问题分析。
最基本的模型包括:
IOPS
带宽
IO的尺寸(大小)
如果是磁盘IO,那么还需要关注:
磁盘IO分别在哪些盘
读IO和写IO的比例
读IO是顺序的还是随机的
写IO是顺序的还是随机的
(二)、为什么要提炼IO模型
不同模型下,同一台存储,或者说同一个LUN,能够提供的IOPS、带宽(MBPS)、响应时间3大指标的最大值是不一样的。
当存储中提到IOPS最大能力的时候,一般采用随机小IO进行测试,此时占用的带宽是非常低的,响应时间也会比顺序的IO要长很多。如果将随机小IO改为顺序小IO,那么IOPS还会更大。当测试顺序大IO时,此时带宽占用非常高,但IOPS却很低。
因此,做IO的容量规划、性能调优需要分析业务的IO模型是什么。
二、评估工具
(一)、磁盘IO评估工具
磁盘IO能力的评估工具有很多,例如orion、iometer,dd、xdd、iorate,iozone,postmark,不同的工具支持的操作系统平台有所差异,应用场景上也各具特色。
有的工具可以模拟应用场景,比如orion是oracle出品,模拟Oracle数据库IO负载(采用与Oracle相同的IO软件栈)。
即模拟oracle应用对文件或磁盘分区进行读写(可指定读写比例、io size,顺序or随机)这里就需要提前知道自己的IO模型。如果不知道,可以采用自动模式,让orion自动的跑一遍,可以得出不同进程的并发读写下,最高的IOPS、MBPS,以及对应的响应时间。
比对dd,仅仅是对文件进行读写,没有模拟应用、业务、场景的效果。
postmark可以实现文件读写、创建、删除这样的操作。适合小文件应用场景的测试。
(二)、网络IO评估工具
ping:最基本的,可以指定包的大小。
iperf、ttcp:测试tcp、udp协议最大的带宽、延时、丢包。
衡量windows平台下的带宽能力,工具比较多:NTttcp、LANBench、pcattcp、LAN Speed Test (Lite)、NETIO、NetStress。
三、主要监控指标和常用监控工具
(一)、磁盘IO
对于存储IO:unix、linux平台,Nmon、iostat是比较好的工具。
nmon用于事后分析,iostat可用于实时查看,也可以采用脚本记录下来事后分析。
1.IOPS
总IOPS:Nmon DISK_SUMM Sheet:IO/Sec
每个盘对应的读IOPS :Nmon DISKRIO Sheet
每个盘对应的写IOPS :Nmon DISKWIO Sheet
总IOPS:命令行iostat -Dl:tps
每个盘对应的读IOPS :命令行iostat -Dl:rps
每个盘对应的写IOPS :命令行iostat -Dl:wps
2.带宽
总带宽:Nmon DISK_SUMM Sheet:Disk Read KB/s,Disk Write KB/s
每个盘对应的读带宽:Nmon DISKREAD Sheet
每个盘对应的写带宽:Nmon DISKWRITE Sheet
总带宽:命令行iostat -Dl:bps
每个盘对应的读带宽:命令行iostat -Dl:bre