I/O 的概念,从字义来理解就是输入输出。操作系统从上层到底层,各个层次之间均存在 I/O。比如,CPU 有 I/O,内存有 I/O, VMM 有 I/O, 底层磁盘上也有 I/O,这是广义上的 I/O. 通常来讲,一个上层的 I/O 可能会产生针对磁盘的多个 I/O,也就是说,上层的 I/O 是稀疏的,下层的 I/O 是密集的。

磁盘的 I/O,顾名思义就是磁盘的输入输出。输入指的是对磁盘写入数据,输出指的是从磁盘读出数据。


我们常见的磁盘类型有 ATA、SATA、FC、SCSI、SAS。这几种磁盘中,服务器常用的是 SAS 和 FC 磁盘,一些高端存储也使用 SSD 盘。每一种磁盘的性能是不一样的。

我们在测试工作中,衡量磁盘 I/O 性能主要参考 IOPS 和吞吐量两个参数。下面,将介绍一下这两个参数的含义。

IOPS 与吞吐量的概念

磁盘的 IOPS,也就是在一秒内,磁盘进行多少次 I/O 读写。

磁盘的吞吐量,也就是每秒磁盘 I/O 的流量,即磁盘写入加上读出的数据的大小。

IOPS 与吞吐量的关系

每秒 I/O 吞吐量= IOPS* 平均 I/O SIZE。从公式可以看出: I/O SIZE 越大,IOPS 越高,那么每秒 I/O 的吞吐量就越高。因此,我们会认为 IOPS 和吞吐量的数值越高越好。实际上,对于一个磁盘来讲,这两个参数均有其最大值,而且这两个参数也存在着一定的关系。

下图为各种磁盘的 IOPS 极限值。

表 1. 常见磁盘类型及其 IOPS

注:上表源自维基百科 http://en.wikipedia.org/wiki/IOPS

在 AIX 中,对于同一个磁盘(或者 LUN),随着每次 I/O 读写数据的大小不通,IOPS 的数值也不是固定不变的。例如,每次 I/O 写入或者读出的都是连续的大数据块,此时 IOPS 相对会低一些;在不频繁换道的情况下,每次写入或者读出的数据块小,相对来讲 IOPS 就会高一些。


I/O 读写的类型

大体上讲,I/O 的类型可以分为:读 / 写 I/O、大 / 小块 I/O、连续 / 随机 I/O, 顺序 / 并发 I/O。在这几种类型中,我们主要讨论一下:大 / 小块 I/O、连续 / 随机 I/O, 顺序 / 并发 I/O。

大 / 小块 I/O

这个数值指的是控制器指令中给出的连续读出扇区数目的多少。如果数目较多,如 64,128 等,我们可以认为是大块 I/O;反之,如果很小,比如 4,8,我们就会认为是小块 I/O,实际上,在大块和小块 I/O 之间,没有明确的界限。

连续 / 随机 I/O

连续 I/O 指的是本次 I/O 给出的初始扇区地址和上一次 I/O 的结束扇区地址是完全连续或者相隔不多的。反之,如果相差很大,则算作一次随机 I/O

连续 I/O 比随机 I/O 效率高的原因是:在做连续 I/O 的时候,磁头几乎不用换道,或者换道的时间很短;而对于随机 I/O,如果这个 I/O 很多的话,会导致磁头不停地换道,造成效率的极大降低。

顺序 / 并发 I/O

从概念上讲,并发 I/O 就是指向一块磁盘发出一条 I/O 指令后,不必等待它回应,接着向另外一块磁盘发 I/O 指令。对于具有条带性的 RAID(LUN),对其进行的 I/O 操作是并发的,例如:raid 0+1(1+0),raid5 等。反之则为顺序 I/O。


磁盘 I/O 性能的监控

监控磁盘的 I/O 性能,我们可以使用 AIX 的系统命令,例如:sar -d, iostat, topas, nmon 等。下面,我将以 nmon 和 topas 为例,讲述在系统中如何观察磁盘 I/O 的性能。

topas

登录 AIX 操作系统,输入 topas,然后按 D,会出现如下界面:

在上图中,TPS 即为磁盘的 IOPS,KBPS 即为磁盘每秒的吞吐量。由于服务器处于空闲的状态,我们可以看到 IOPS,KBPS 的数据都非常低。

我们使用 dd if 命令向磁盘 hdisk2 发读 I/O,block 大小为 1MB:

利用 topas 进行监控:

此时,hdisk2 的吞吐量为 163.9M,IOPS 为 655。

我们再启动一个 dd if,使 hdisk 的 busy 数值达到 100%:


从上图可以看出,在磁盘 busy 达到 100% 的时候,其吞吐量为 304.1M,IOPS 为 1200。

hdisk2 是本地集成的 SAS 盘,我们可以查出本地集成 SAS 通道的带宽为 3Gb:

对于 3Gb 的 SAS 通道,304.1M 的磁盘吞吐量已经接近其 I/O 带宽的峰值了。

需要指出的是,使用 dd if 测量磁盘的带宽是可行的,但是由此来确定业务 I/O 的 IOPS 和吞吐量是不科学的。因为,dd if 所发起的读写仅为顺序 I/O 读写,在 OLTP 的业务中,这种读写是不常见的,而是随机小 I/O 比较多,因此,测量业务的磁盘 I/O 性能,需要在运行业务的时候进行监控。

nmon

在系统中输入 nmon,按 d,可以得到如下界面 :

可以得到此时磁盘 hdisk2 吞吐量为 318M。

使用 nmon 收集一个时间段的数据,然后使用 nmon analyzer 进行分析,可以得出更为直接的图表:

将收集好的 nmon 文件使用 nmon analyzer 进行分析,得出如下报表:

图 2.nmon 图表显示磁盘性能


磁盘 I/O 性能调优

确认磁盘 I/O 存在性能问题

对于随机负载,当遇到余下情况时,我们那通常认为存在 I/O 性能问题:

  1. 平均读时间大于 15ms
  2. 在具有写 cache 的条件下,平均写时间大于 2.5ms

对于顺序负载,当遇到余下情况时,我们那通常认为存在 I/O 性能问题:

  1. 在一个磁盘上有两个连续的 I/O 流
  2. 吞吐量不足(即远远小于磁盘 I/O 带宽)

对于一块磁盘来讲,随着 IOPS 数量的增加,I/O service 也会增加,并且会有一个饱和点,即 IOPS 达到某个点以后,IOPS 再增加将会引起 I/O service time 的显著增加。

图 3. 磁盘 IOPS 与 IO service time 关系图

从经验上讲,我们在测试工作中,我们主要关注 IOPS 和吞吐量以及磁盘的 busy% 这三个数值。如果 IOPS 和吞吐量均很低,磁盘的 busy% 也很低,我们会认为磁盘压力过小,造成吞吐量和 IOPS 过低;只有在 IOPS 和吞吐量均很低,磁盘的 busy% 很高(接近 100%)的时候,我们才会从磁盘 I/O 方面分析 I/O 性能。

通过调整 AIX 参数改善磁盘 I/O 性能

在 AIX 系统中,有关磁盘 I/O 性能相关的参数我们主要调整的参数如下图:

图 4.AIX 常见的磁盘 I/O 性能参数

需要注意的是,下面几个参数的调整值,只是经验数值;对于不同的应用,不同的场景,应具体情况具体分析。

调整I/O 队列长度

queue_depth 是 AIX 一次可以传送到磁盘设备的命令的数量,把命令放在队列中再传送给磁盘可以提高 I/O 性能。AIX 中定义的每个磁盘在 ODM 库中都有 queue_depth 属性。这个属性限制了 AIX 可以传送到设备的最大命令的数量。

queue_depth 默认数值为 4

将 hdisk2 的队列长度从 16 调整为 64:

max_transfer 参数

这个参数的含义是,存储 driver 可以向存储发的最大的 I/O。通过增加 max_transfer 的数值,我们可以允许 VG 的 LTG 的数值更大。

这个参数我们可以从 64M 调整到 128M。

光纤卡num_cmd_elems参数

如果是通过光纤卡连接的外置存储,可以考虑调整 num_cmd_elems,这个参数的作用是:controls maximum number of in-flight Ios

这个参数的默认值为 500,我们将其修改为 1000:

光纤卡 max_xfer_size 参数 : attribute also controls a DMA memory area used to hold data for transfer, and at the default is 16 MB. 这个参数是控制 DMA 区域的,用于保持传输的数据的的区域,它的默认值是 16MB,可以把这个数值调整成 128MB,这样光纤卡的带宽会高一些 .

FSCSI 设备

对于 FSCSI 设备而言,我们可以通过设置参数:dyntrk 和 fc_err_recov 来达到路径快速切换的目的:This sets the adapters to fast fail over and reduces the amount of time required to select a new data path.

修改完毕以后,荣如下命令进行确认:


总结

在 AIX 下调整磁盘 I/O 性能是一个相对复杂的工作,参数的数值往往是根据环境的变化而不通。这就要求我们在熟悉磁盘 I/O 性能架构的基础上,灵活调整。

参考资料

学习

  • 通过参考 《IBM AIX Version 6.1 Differences Guide》,了解 AIX 的更多信息。
  • 通过参考 《AIX 5L Practical Performance Tools and Tuning Guide》,了解 AIX 性能监控的信息。
  • “优化 AIX 6.1 的性能”(developerWorks,2008 年 3 月):在本文中,将介绍关于 AIX 6.1 中 CPU、虚拟内存和 I/O(磁盘和网络)等方面的性能监视和优化的最新更改。实际上,其中的许多更改并没有对内核进行多少创新,而是更关注于一些辅助的内容,比如对缺省参数进行改进,以便更精确地反映实际的数据处理。还有一些其他的增强,包括唯一的可调参数的文档说明、受限制的可调参数,以及对某些子系统所做的各种其他改进。您将了解更多有关性能优化方法的信息,而这些内容是任何优化策略所必需的部分。
  • “AIX 5L 性能优化”(developerWorks,2007 年 9 月):整个系列文章会从 CPU,内存,硬盘等方面对 AIX 5L 系统的优化工作进行一次详细的讨论。同时会更具许多的具体情况和例子来说明 AIX 上的一些工具和命令的作用以及它们会为管理员日常上的工作提供那些的帮助。同时会介绍一些 AIX 5L 中新增的一些管理和优化方面的新功能,让您对您的系统有一个更好的了解。
  • AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
  • AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
  • AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。
  • AIX and UNIX 下载中心:在这里你可以下载到可以运行在 AIX 或者是 UNIX 系统上的 IBM 服务器软件以及工具,让您可以提前免费试用他们的强大功能。
  • IBM Systems Magazine for AIX 中文版:本杂志的内容更加关注于趋势和企业级架构应用方面的内容,同时对于新兴的技术、产品、应用方式等也有很深入的探讨。IBM Systems Magazine 的内容都是由十分资深的业内人士撰写的,包括 IBM 的合作伙伴、IBM 的主机工程师以及高级管理人员。所以,从这些内容中,您可以了解到更高层次的应用理念,让您在选择和应用 IBM 系统时有一个更好的认识。

AIX 下磁盘 I/O 性能分析相关推荐

  1. CPU、寄存器、内存、磁盘、网络性能分析

    介绍 寄存器 最靠近 CPU 的控制单元和逻辑计算单元的存储器,就是寄存器了,它使用的材料速度也是最快的,因此价格也是最贵的,那么数量不能很多. 存储器的数量通常在几十到几百之间,每个寄存器可以用来存 ...

  2. 【性能测试】- 磁盘I/O性能分析

    一.磁盘I/O性能指标 有4个核心的磁盘I/O指标,如下表所示: 磁盘性能指标 解释 iostat -d -x 1 展示所有的磁盘I/O指标 使用率 磁盘处理 I/O 的时间百分比 %util IOP ...

  3. Linux下磁盘读写优化的分析

    问题:写入1MBi大小数据到文件里,1次写入1K共写1024次和1次性写入1M仅写1次的速率差异是多大?哪个更快?为什么呢?不妨测试一下: 1MBi文件,一次性写入1MBi #include < ...

  4. linux io 分析,Linux 下的I/O性能分析 iotop

    Linux下的IO统计工具如iostat, nmon等大多数是只能统计到per设备的读写情况, 如果你想知道每个进程是如何使用IO的就比较麻烦. 当然如果你会systemtap, 或者blktrace ...

  5. 【Linux应用】Linux下磁盘分析工具

    1.简述 本节主要介绍基于Linux 操作系统上的磁盘I/O 性能分析工具. 2.iostat iostat(1)汇总了单个磁盘的统计信息,为负载特征归纳.使用率和饱和度提供了指标. 它可以由任何用户 ...

  6. 鲲鹏devkit(迁移 测试 性能分析) boostkit

    一 devkit 1 业务:不同环境下的开始.测试.部署.迁移.监控项目 2 需求:x86服务器.x86处理器.复杂指令集迁移到鲲鹏服务器.鲲鹏处理器.简洁指令集.调试调优. 3 解决方案: (1)功 ...

  7. DynaTrace Ajax Edition:IE浏览器性能分析工具

    DynaTrace AJAX是一个运行在IE浏览器下的免费页面性能分析工具,它可以支持主流的IE6.IE7.IE8浏览器.这款工具正是DynaTrace为进入前端性能分析领域而发布的.您可以利用它来分 ...

  8. m基于MATLAB的上行链路MIMO关键技术的研究与性能分析

    目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 多输入多输出(MIMO)天线技术的巨大潜力为新一代无线通信技术的研究提供了广阔的舞台.近年来 ...

  9. linux+平均磁盘请求数量_SUSE LINUX下磁盘IO性能监测分析

    这两天发现一台测试用的服务器经常负载很高,但cpu和内存消耗却很少,很是奇怪,经过诊断发现是由于大容量的测试数据导致高并发下的磁盘IO消耗比较大,由于缓存是小文件并且数量比较大,所以并发比较高的情况下 ...

最新文章

  1. 语言 山东专升本 真题_专升本英语真题
  2. 二叉树的相关性质及其前中后层序遍历实现
  3. 布尔类型的值包括( )和( )_布尔类型
  4. python随机生成20个数字_python – 生成大量唯一的随机float32数字
  5. 交叉验证和超参数调整:如何优化您的机器学习模型
  6. Linux常用命令(第二版) --权限管理命令
  7. 促销海报模板|经典蓝的带着「节日促销」来搞事情了!
  8. 细谈getRequestDispatcher()与sendRedirect()的区别
  9. 各大网站网页代码_清明节各大网站实现变灰效果(一行代码搞定)
  10. 软件测试的方法有哪些?
  11. Java并发编程实践-总结
  12. Linux ARM平台开发系列讲解(摄像头V4L2子系统) 2.12.4 V4L2子设备操作函数结构体分析
  13. RHCE——控制服务和守护进程
  14. Petsc求解非线性方程,SNES对象的介绍-1
  15. 计算机无法屏幕亮度,今天详解win10电脑屏幕亮度无法调节的具体解决手法
  16. 宋氏极简美学的编码风格
  17. 媒体称中国在秘鲁千万吨级世界特大型铜矿被暂停
  18. SpringBoot——JPA的使用、构建restful风格的JPA
  19. 运动会加油稿计算机学院150字,大学运动会经典加油稿150字左右2018
  20. 《深入浅出通信原理》参考资料

热门文章

  1. 深度剖析Kubernetes API Server三部曲 - part 2
  2. 100道Java基础面试题收集整理(附答案)
  3. 成为Web开发大师你必须知道的7件事情
  4. 网络基础知识总结_交换机
  5. 《Access 2007开发指南(修订版)》一一2.2 创建新数据库
  6. 在预加载新闻时,怎么去掉初始化内容的显示尴尬?
  7. 如何完全自定义NavigationBar
  8. Android开发学习笔记(二)——编译和运行原理(2)
  9. 谈谈NTFS数据流文件
  10. Redis Cluster深入与实践(续)