问题定界
性能是一个全流程相关的工作,问题可能出现在整个I/O路径的各个环节。可能是主机应用本身的问题,或是主机所在的网络拥塞,亦或是后端存储系统的问题。系统的性能是由系统中出现短板的环节决定的。因此,对于性能相关的问题,应该从多个方面逐一排查,找出整个系统的性能瓶颈所在并针对性地解决。
背景信息
性能问题定界的常用方法,通过对比主机和存储的平均时延差异,大致判断是主机侧问题或者是网络链路层问题,还是存储侧问题。
- 如果主机侧时延与存储侧时延都很大且相差较小,说明问题可能出现在存储上。常见原因如硬盘性能达到上限、硬盘框达到上限、镜像带宽达到上限等性能问题。
以上情况主要针对读延迟而言。当写延迟都很大时,由于时延包含数据由主机传输给存储的时间,所以不能完全说明问题出现在存储侧,此时应该排查所有可能出现问题的地方。
- 如果主机侧观察到的时延比存储侧大很多,说明可能是由于主机侧配置不当引起性能问题或者网络链路出现问题。常见问题如块设备并发、HBA卡并发不够等导致I/O堆积、主机CPU利用率达到100%、带宽达到瓶颈、交换机配置不当、多路径选路错误等。
- 在初步确认是主机、存储、网络问题后,再对性能问题进行具体分析处理。
操作步骤
- 查看主机侧时延。
- 在Linux主机下,通过不同的工具查询主机时延。
- 通过业务软件的性能统计功能查询主机时延,例如Oracle的AWR报告等。
- 通过Linux硬盘I/O查看工具iostat查询时延。
执行iostat -kx 1命令。
其中“await”表示每一个I/O请求处理的平均时间(单位为毫秒),即I/O的响应时间。
- 通过Linux性能测试工具Vdbench查询时延。
其中“resp”表示每一个I/O请求处理的平均时间(单位为毫秒),即I/O的响应时间。
- 在Windows主机下,通过不同的工具查询主机时延。
- 通过业务软件的性能统计功能查询主机时延。
- 通过Windows常用的性能测试工具IOmeter查询主机时延。
- 通过Windows系统自带的性能监控工具,查看主机时延。Windows Performance Monitor是Windows操作系统集成的一个性能监控工具,可以对CPU、内存、硬盘、网络连接、应用程序等进行性能观测和监控。
使用Windows Performance Monitor监控硬盘的相关性能获取主机时延。
- 在Windows桌面打开“开始 > 运行”,在“运行”窗口中输入perfmon,进入性能监控工具界面。
- 在“性能监视器”窗口左侧导航栏,选择“监视工具 > 性能监控器”,单击
按钮添加性能项。
- 在“添加计数器”窗口,选择“PhysicalDisk”,添加所需要监控的性能项,单击“添加 > 确定”。Windows Performance Monitor开始对硬盘性能数据进行实时监控。
- 硬盘相关性能项说明如表4-1所示。
表4-1 与时延相关的硬盘性能项指标
指标子项
详细说明
时延指标
Avg. Disk sec/Transfer
表示存储侧处理的每个I/O的平均时间,单位毫秒。
Avg. Disk sec/Read
表示存储侧处理的每个读I/O的平均时间。
Avg. Disk sec/Write
表示存储侧处理的每个写I/O的平均时间。
- 查看AIX主机时延
通过iostat命令查看AIX主机时延。
- 查看VMware ESXi主机时延
- 输入esxtop命令,再按回车键。此时查看的CPU性能统计数据。
- 输入U,切换为存储器(LUN)的性能统计。
- 输入F,进入如下图所示界面,其中带星号表示已经监控的选项,数据J、K查看存储器的时延,按回车键返回。
- 输入D,切换为存储适配器(HBA卡)的性能统计。
- 输入F,进入如下图所示界面,输入H、I选择监控HBA卡的时延。
- 输入V,切换为虚拟机的性能统计。
- 输入F,进入如下界面,选择G、H监控虚拟机的时延。
- 在Linux主机下,通过不同的工具查询主机时延。
- 查看存储侧时延。
- 通过DeviceManager性能监控查看存储侧时延。
操作入口:“监控 > 性能监控 >监控面板> 控制器”。
- 通过CLI命令查看存储侧时延。
登录存储系统CLI界面,执行show performance controller命令,查看对应控制器的时延,即平均I/O响应时间。“Average I/O Latency (ms)”表示平均I/O响应时间。
admin:/>show performance controller controller_id=0A 0.Memory Usage(%) 1.Percentage of Cache Flushes to Write Requests(%) 2.Cache Flushing Bandwidth(MB/s) 3.Read Cache Hit Ratio(%) 4.Write Cache Hit Ratio(%) 5.Cache Read Usage(%) 6.Cache Write Usage(%) 7.% Hit 8.Cache Water(%) 9.The cumulative count of all read cache hits(Reads from Cache) 10.Cache page utilization(%) 11.Cache chunk utilization(%) 12.Max. Bandwidth(MB/s) 13.Queue Length 14.Bandwidth(MB/s) / Block Bandwidth(MB/s) 15.Throughput(IOPS)(IO/s) 16.Read Bandwidth(MB/s) 17.Average Read I/O Size(KB) 18.Read Throughput(IOPS)(IO/s) 19.Write Bandwidth(MB/s) 20.Average Write I/O Size(KB) 21.Write Throughput(IOPS)(IO/s) 22.Service Time(Excluding Queue Time)(us) 23.Read I/O Granularity Distribution: [0K,4K)(%) 24.Read I/O Granularity Distribution: [4K,8K)(%) 25.Read I/O Granularity Distribution: [8K,16K)(%) 26.Read I/O Granularity Distribution: [16K,32K)(%) 27.Read I/O Granularity Distribution: [32K,64K)(%) 28.Read I/O Granularity Distribution: [64K,128K)(%) 29.Read I/O Granularity Distribution: >= 128K(%) 30.Write I/O Granularity Distribution: [0K,4K)(%) 31.Write I/O Granularity Distribution: [4K,8K)(%) 32.Write I/O Granularity Distribution: [8K,16K)(%) 33.Write I/O Granularity Distribution: [16K,32K)(%) 34.Write I/O Granularity Distribution: [32K,64K)(%) 35.Write I/O Granularity Distribution: [64K,128K)(%) 36.Write I/O Granularity Distribution: >= 128K(%) 37.Average IO Size(KB) 38.% Read 39.% Write 40.Max IOPS(IO/s) 41.Max. I/O Size(KB) 42.Max. Read I/O Size(KB) 43.Max. Write I/O Size(KB) 44.The cumulative count of I/Os 45.The cumulative count of data transferred in Kbytes 46.The cumulative elapsed I/O time(ms) 47.The cumulative count of all reads 48.The cumulative count of data read in Kbytes(1024bytes = 1KByte) 49.The cumulative count of all writes 50.The cumulative count of data written in Kbytes 51.Max. I/O Latency(us) 52.Average I/O Latency(us) 53.Average Read I/O Latency(us) 54.Average Write I/O Latency(us) 55.CPU Usage(%) 56.SCSI IOPS (IO/s) 57.ISCSI IOPS (IO/s) 58.NFS operation count per second 59.CIFS operation count per second 60.Total Disk IOPS(IO/s) 61.READ Disk IOPS(IO/s) 62.WRITE Disk IOPS(IO/s) 63.Disk Max. Usage(%) 64.AI Cache Hit Ratio(%) 65.Unmap Command Bandwidth (MB/s) 66.Unmap Command IOPS (IO/s) 67.Avg. Unmap Command Size (KB) 68.Avg. Unmap Command Response Time (us) 69.WRITE SAME Command Bandwidth (MB/s) 70.WRITE SAME Command IOPS (IO/s) 71.Avg. WRITE SAME Command Size (KB) 72.Avg. WRITE SAME Command Response Time (us) 73.Full Copy Read Request Bandwidth (MB/s) 74.Full Copy Read Request IOPS (IO/s) 75.Avg. Full Copy Read Request Size (KB) 76.Avg. Full Copy Read Request Response Time (us) 77.Full Copy Write Request Bandwidth (MB/s) 78.Full Copy Write Request IOPS (IO/s) 79.Avg. Full Copy Write Request Size (KB) 80.Avg. Full Copy Write Request Response Time (us) Input item(s) number separated by comma:6 Cache Write Usage(%) : 0
关于登录存储系统CLI及命令的使用方法,请参见对应版本的命令参考手册。不同版本间的界面和CLI命令回显存在差异,请以实际界面为准。
可以对存储系统侧的控制器的读写时延设置指标阈值,平均读I/O响应时间默认值为50000us,平均写I/O响应时间默认值为20000us。当存储系统控制器的读写时延超过指标阈值时,会触发存储系统进行信息采集,采集的信息收集到“/OSM/coffer_data/omm/perf/exception_info/”目录下,该目录下的文件总的大小不能超过14MB,超过后将会覆盖之前的文件。收集到的信息用于后续性能调优或问题处理时具体的分析定位。
可以通过CLI命令show performance threshold查看存储侧的读写时延。如果当前指标阈值无法满足业务需求,可以通过CLI命令change performance threshold对其进行调整。
通过CLI命令show performance threshold或change performance threshold,除了对控制器的读写时延阈值进行查看和修改外,还可以对LUN和文件系统的读写时延阈值进行查看与修改。
- LUN:平均读I/O响应时间默认值为50000us,平均写I/O响应时间默认值为20000us。
- 文件系统:平均读OPS响应时间默认值为50000us,平均写OPS响应时间默认值为25000us。
- 通过DeviceManager性能监控查看存储侧时延。