本系列共有三篇文章(见 参考资料),介绍 AIX® 磁盘和 I/O 子系统,重点关注在优化磁盘 I/O 性能时遇到的各种挑战。尽管磁盘调优很可能没有 CPU 或者内存优化那么激动人心,但它是优化服务器性能的关键方面。事实上,部分原因是因为磁盘 I/O 是最薄弱的子系统环节,与任何其他子系统相比,可以通过更多的措施提高磁盘 I/O 性能。
与其他子系统的调优不同,实际上在构建系统的架构设计阶段就应该开始进行磁盘 I/O 调优。尽管有一些与虚拟内存参数相当的 I/O 调优参数(ioo 和 lvmo),但是提高磁盘 I/O 性能的最佳方法是正确地配置系统,而不是优化相关的参数。与虚拟内存优化不同,在创建了逻辑卷并开始运行之后,要更改它们的组织方式会很复杂,所以通常只有一次机会正确地完成这项任务。在本文中,我们将讨论配置逻辑卷的方式,以及应该将它们布置于物理磁盘上的什么地方。还要介绍用于监视逻辑卷的工具。其中大多数工具并不适合于长期趋势研究并且是 AIX 特有的工具,它们可以帮助了解配置逻辑卷的方式,以及是否针对环境对它们进行了优化。
在 AIX 7 中,主要工具集和可调参数没什么变动,但是有必要重新研究这些功能,以便确保系统能够提供最好的信息和性能。
本系列的第 1 部分(见 参考资料)介绍了 iostat,但仅介绍了使用该工具查看异步 I/O 服务器。第 2 部分使用 iostat 来监视磁盘,介绍它能够完成哪些工作以帮助您快速地确定 I/O 瓶颈。尽管 iostat 是通用的 UNIX® 实用工具,并不是专门为 AIX 设计的,但它对于快速地确定系统的运行情况是非常有用的。AIX 特有的逻辑卷命令可以帮助更深入地研究逻辑卷,帮助您真正地分析实际问题(如果存在任何问题的话)。在使用这些工具之前,必须清楚地了解您需要哪些信息,这一点是很重要的。本文描述这些工具并介绍如何分析它们的输出,这将帮助您分析磁盘 I/O 子系统。
本节定义逻辑卷管理器(Logical Volume Manager,LVM)并介绍它的一些特性。我们来深入地研究逻辑卷的概念,分析它们与提高磁盘 I/O 使用率之间的关系,并通过定义和讨论 intra-policy 和 inter-policy 磁盘策略,从物理磁盘的角度讨论逻辑卷的布置。
从概念上讲,逻辑卷层位于应用程序层和物理层之间。在磁盘 I/O 的上下文中,应用程序层是文件系统或者原始逻辑卷。物理层由实际的磁盘组成。LVM 是一种 AIX 磁盘管理系统,它在逻辑和物理存储之间映射数据。这允许数据保存在多个物理盘片上,并使用专门的 LVM 命令对其进行管理和分析。实际上,LVM 控制系统中所有的物理磁盘资源,并帮助提供存储子系统的逻辑视图。要认识到它位于应用程序层和物理层之间,这应该可以帮助您理解它为什么很可能是所有层中最重要的一层。甚至物理卷本身也是逻辑层的一部分,因为物理层仅包含实际的磁盘、设备驱动程序和任何可能配置的阵列。图 1 阐释这个概念,显示逻辑 I/O 组件与物理磁盘及其应用程序层非常紧密地结合在一起。
图 1. 逻辑卷图
现在,让我们自底向上简要地介绍 LVM 中的各个元素。每个驱动器作为一个物理卷进行命名。多个物理卷组成一个卷组。在卷组中,定义逻辑卷。LVM 允许数据驻留在多个物理驱动器上,但是可以将它们配置为属于单个卷组。这些逻辑卷可以是一个或者多个逻辑分区。每个逻辑分区具有一个与其相关联的物理分区。在这里,可以有物理部分的多个副本以用于各种目的,如磁盘镜像。
让我们简要地介绍一下逻辑卷的创建与物理卷之间的关系。图 2 描述物理磁盘盘片上的实际存储位置。
图 2. 物理磁盘盘片上的实际存储位置
一般的规则是,靠近中央的数据要比靠近外边缘的数据具有更快的寻道时间。这与数据的密度有关。因为越靠近中央,密度越大,实际上磁头只需移动更短的距离。内部边缘通常具有最短的寻道时间。作为最佳实践,应用程序使用的 I/O 越多,就应该让其越靠近物理卷的中央。注意,对于这个最佳实践,有一些例外的情况。在磁盘边缘上,每个磁道比靠近中央的地方能够保存更多的数据。虽然这样说,但是实际上应该顺序地访问位于边缘的逻辑卷,以获得更好的性能。对于启用了镜像写一致性检查(Mirror Write Consistency Check,MWCC)的逻辑卷来说也一样。这是因为 MWCC 扇区位于磁盘边缘而不是中央,这与逻辑卷的 intra-disk 策略有关。
让我们来讨论另一个称为逻辑卷 inter-disk 策略的重要概念。inter-disk 策略定义一个逻辑卷的物理分区实际驻留在多少个磁盘上。一般规则是,最小 (minimum) 策略可以提供最大的可靠性和可用性,而最大 (maximum) 策略可以提高性能。简单地说,数据分散到更多驱动器上,性能就越好。其他最佳实践包括分配密集的逻辑卷以分隔物理卷,把逻辑卷定义为所需的最大大小,将经常使用的逻辑卷布置在一起。这正是为什么必须在配置系统之前了解具体的数据,以便从一开始就可以创建合理的策略的原因。
在创建逻辑卷时,可以使用下面命令或者 smit fastpath 定义自己的策略:# mklv 或 # smitty mklv。
本节提供有关如何监视逻辑卷并分析结果的说明,介绍各种命令以及它们的用途,还将研究输出内容。
服务台刚刚接到了某个数据库服务器性能迟缓的报告。您怀疑可能出现了 I/O 问题,所以使用 iostat 开始进行分析。您可能还记得,在本系列的第 1 部分中曾介绍过这个命令(见 参考资料),但只是用于查看异步 I/O 服务器。现在,让我们仔细地研究 iostat。iostat 相当于用于虚拟内存分析的 vmstat,它很可能是快速了解 I/O 子系统运行情况的最有效方式。
清单 1. 使用 iostat
# iostat 1
System configuration: lcpu=4 disk=4
tty: tin tout avg-cpu: % user % sys % idle % iowait
0.0 392.0 5.2 5.5 88.3 1.1
Disks: % tm_act Kbps tps Kb_read Kb_wrtn
hdisk1 0.5 19.5 1.4 53437739 21482563
hdisk0 0.7 29.7 3.0 93086751 21482563
hdisk4 1.7 278.2 6.2 238584732 832883320
hdisk3 2.1 294.3 8.0 300653060 832883320
|
这里显示了哪些内容,而所有这些内容又是什么含义呢?
- % tm_act:报告物理磁盘处于活动状态或者磁盘请求的总时间的时间百分比。
- Kbps:报告传输到驱动器的数据量(单位为千字节)。
- tps:报告每秒钟发送到物理磁盘的传输量。
- Kb_read:报告在测量时间间隔中从物理卷读取的总数据量(单位为千字节)。
- Kb_wrtn:报告在测量时间间隔中向物理卷写入的数据量(单位为千字节)。
需要非常小心地监视 % tm_act,因为当它的使用率超过大约百分之六十到七十时,通常表示进程开始等待 I/O。这可能是即将发生 I/O 问题的第一个征兆。将数据移动到不那么忙的驱动器可以显著地帮助缓解负担。一般来说,数据位于越多的驱动器上,性能就越好。与任何东西一样,物极必反,必须确保不会有太多的驱动器连接到任何一个适配器。有一种方法可以确定一个适配器是否满负荷:将连接到该适配器的所有磁盘的 Kbps 量累加起来,其总数应该小于磁盘适配器吞吐量速率,通常小于百分之七十。
使用 -a 标志(见 清单
2)帮助更深入地检查适配器的使用率。
清单 2. 使用带
-a 标志的 iostat # iostat -a Adapter: Kbps tps Kb_read Kb_wrtn scsi0 0.0 0.0 0 0 Paths/Disk: % tm_act Kbps tps Kb_read Kb_wrtn hdisk1_Path0 37.0 89.0 0.0 0 0 hdisk0_Path0 67.0 47.0 0.0 0 0 hdisk4_Path0 0.0 0.0 0.0 0 0 hdisk3_Path0 0.0 0.0 0.0 0 0 Adapter: Kbps tps Kb_read Kb_wrtn ide0 0.0 0.0 0 0 Paths/Disk: % tm_act Kbps tps Kb_read Kb_wrtn cd0 0.0 0.0 0.0 0 0 |
显然,这里不存在任何瓶颈。使用 -d 标志可以深入地研究一个特定的磁盘(见 清单 3)。
清单 3. 使用带
-d 标志的 iostat # iostat -d hdisk1 1 System configuration: lcpu=4 disk=5 Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk1 0.5 19.4 1.4 53437743 21490480 hdisk1 5.0 78.0 23.6 3633 3564 hdisk1 0.0 0.0 0.0 0 0 hdisk1 0.0 0.0 0.0 0 0 hdisk1 0.0 0.0 0.0 0 0 hdisk1 0.0 0.0 0.0 0 0 |
让我们来研究一些 AIX 特有的 LVM 命令。您已经了解了磁盘布置,以及从一开始就正确地设计系统架构的重要性。不幸的是,并不总是能够使用这种方法。系统管理员有时可能会接手一些必须进行修复的系统。让我们研究一下磁盘上逻辑卷的布局,以确定是否需要更改定义或者重新组织数据。
让我们首先看一下卷组并查找其中的逻辑卷。lsvg 命令可以提供卷组信息(见 清单 4)。
清单 4. 使用 lsvg
# lsvg -l data2vg rootvg:LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT hd5 boot 1 1 1 closed/syncd N/A hd6 paging 24 24 1 open/syncd N/A hd8 jfs2log 1 1 1 open/syncd N/A hd4 jfs2 7 7 1 open/syncd / hd2 jfs2 76 76 1 open/syncd /usr hd9var jfs2 12 12 1 open/syncd /var hd3 jfs2 4 4 1 open/syncd /tmp hd1 jfs2 1 1 1 open/syncd /home hd10opt jfs2 12 12 1 open/syncd /opt hd11admin jfs2 4 4 1 open/syncd /admin livedump jfs2 8 8 1 open/syncd /var/adm/ras/livedump |
现在,使用 lslv 提供关于逻辑卷的特定数据(见 清单 5)。
清单 5. 使用 lslv
# lslv data2lv
LOGICAL VOLUME: hd4 VOLUME GROUP: rootvg
LV IDENTIFIER: 00f6048800004c PERMISSION: read/write
000000012a2263d526.4
VG STATE: active/complete LV STATE: opened/syncd
TYPE: jfs2 WRITE VERIFY: off
MAX LPs: 512 PP SIZE: 32 megabyte(s)
COPIES: 1 SCHED POLICY: parallel
LPs: 7 PPs: 7
STALE PPs: 0 BB POLICY: relocatable
INTER-POLICY: minimum RELOCATABLE: yes
INTRA-POLICY: center UPPER BOUND: 32
MOUNT POINT: / LABEL: /
MIRROR WRITE CONSISTENCY: on/ACTIVE
EACH LP COPY ON A SEPARATE PV ?: yes
Serialize IO ?: NO
|
这个视图为逻辑卷属性提供详细的描述。这些数据表示什么含义呢?intra-policy 是 center,它通常是 I/O 量大的逻辑卷的最佳策略。正如前面的讨论中提到的,对于这个规则,有一些例外的情况。不幸的是,您碰到了这些情况之一。因为已经启用了镜像写一致性检查 (MWC),所以如果卷位于边缘,那么应该能够更好地为其提供服务。
让我们通过 清单 6 更深入地研究一下。
清单 6. 带
-l 标志的 lslvlslv -l hd4 hd4:/ PV COPIES IN BAND DISTRIBUTION hdisk0 007:000:000 100% 000:000:007:000:000 |
lslv 的 -l 标志列出与逻辑卷相关的所有物理卷和每个逻辑卷的分布。这样就可以确定已经将磁盘上的所有物理分区都分配给了这个逻辑卷。分布(distribution)部分显示每个物理卷中的实际物理分区数目。可以从中详细地了解其 intra-disk 策略。这些字段的顺序如下:
- 边缘 (Edge)
- 中间 (Middle)
- 中央 (Center)
- 内部中间 (Inner-middle)
- 内部边缘 (Inner-edge)
报告显示大多数数据位于中间,有些数据位于中央。
让我们继续研究,找出与一个物理卷相关联的逻辑卷。可以使用 lspv 命令来完成这项任务(见 清单 7)。
清单 7. 使用 lspv 命令
# lspv -l hdisk0 hdisk0: LV NAME LPs PPs DISTRIBUTION MOUNT POINT hd8 1 1 00..00..01..00..00 N/A hd4 7 7 00..00..07..00..00 / hd5 1 1 01..00..00..00..00 N/A hd6 24 24 00..24..00..00..00 N/A hd11admin 4 4 00..00..04..00..00 /admin livedump 8 8 00..08..00..00..00 /var/adm/ras/livedump hd10opt 12 12 00..00..12..00..00 /opt hd3 4 4 00..00..04..00..00 /tmp hd1 1 1 00..00..01..00..00 /home hd2 76 76 00..00..76..00..00 /usr hd9var 12 12 00..00..12..00..00 /var |
现在,可以确定这个磁盘上的哪些逻辑卷实现了最大的性能。
可以进行更深入地研究,以获取更具体的信息(见 清单 8)。
清单 8. 带
-p 标志的 lspv# lspv -p hdisk0 hdisk0: PP RANGE STATE REGION LV NAME TYPE MOUNT POINT 1-1 used outer edge hd5 boot N/A 2-128 free outer edge 129-144 used outer middle hd6 paging N/A 145-152 used outer middle livedump jfs2 /var/adm/ras/livedump 153-160 used outer middle hd6 paging N/A 161-256 free outer middle 257-257 used center hd8 jfs2log N/A 258-264 used center hd4 jfs2 / 265-340 used center hd2 jfs2 /usr 341-352 used center hd9var jfs2 /var 353-356 used center hd3 jfs2 /tmp 357-357 used center hd1 jfs2 /home 358-369 used center hd10opt jfs2 /opt 370-373 used center hd11admin jfs2 /admin 374-383 free center 384-511 free inner middle 512-639 free inner edge |
这个视图指出,该物理卷中哪些是空闲的、哪些已经被使用以及在什么地方使用了哪些分区。这是一个非常有用的视图。
查看 LVM 使用情况最好的工具之一是 lvmstat(见 清单 9)。
清单 9. 使用 lvmstat
# lvmstat -v rootvg
0516-1309 lvmstat: Statistics collection is not enabled for this logical device.
Use -e option to enable.
|
从这里的输出中可以看出,默认情况下并没有启用它,所以在运行这个工具之前需要使用 # lvmstat -v rootvg -e 来启用它。清单 10 所示的命令在 10 个时间间隔内每秒钟对 LVM 信息取一次快照。
清单 10. 带
-v 标志的 lvmstat# lvmstat -v rootvg 1 10 Logical Volume iocnt Kb_read Kb_wrtn Kbps hd8 54 0 216 0.00 hd9var 15 0 64 0.00 hd2 11 0 44 0.00 hd4 5 0 20 0.00 hd3 2 0 8 0.00 livedump 0 0 0 0.00 hd11admin 0 0 0 0.00 hd10opt 0 0 0 0.00 hd1 0 0 0 0.00 hd6 0 0 0 0.00 hd5 0 0 0 0.00 . Logical Volume iocnt Kb_read Kb_wrtn Kbps hd2 3 40 0 40.00 ...... Logical Volume iocnt Kb_read Kb_wrtn Kbps hd4 11 0 44 44.00 hd8 8 0 32 32.00 hd9var 8 0 36 36.00 hd3 6 0 24 24.00 hd2 2 0 8 8.00 |
这个视图特别有用的特点是,它只显示有活动的逻辑卷。在监视特定的应用程序以及与特定逻辑卷使用情况的关联时,这个视图非常方便。
这个视图显示自启动数据收集工具以来系统上使用量最大的逻辑卷。这对于深入研究逻辑卷层非常有帮助。
需要在这里查看什么信息呢?
- % iocnt:报告读写请求的数目。
- Kb_read:报告在测量时间间隔中读取的总数据量(单位为千字节)。
- Kb_wrtn:报告在测量时间间隔中写入的总数据量(单位为千字节)。
- Kbps:报告传输的数据量(单位为千字节)。
在使用这些命令之前,请查看它们的手册页。
本节介绍如何使用一个特定的逻辑卷调优命令。lvmo 用于设置和显示 pbuf 调优参数。它还可以用于显示阻塞 I/O 统计信息。
可以使用 lvmo 修改每个卷组的 pbuf(即固定内存缓冲区),可以显示和控制用来缓存卷组数据的内存。
下面显示 data2vg 卷组的 lvmo 可调参数(见 清单 11)。
清单 11. 显示 lvmo 可调参数
# lvmo -v data2vg -a vgname = data2vg pv_pbuf_count = 1024 total_vg_pbubs = 1024 mag_vg_pbuf_count = 8192 perv_blocked_io_count = 7455 global_pbuf_count = 1024 global_blocked_io_count = 7455 |
这里哪些是可调参数?
- pv_pbuf_count:报告在将一个物理卷添加到该卷组时所添加的 pbuf 数量。
- max_vg_pbuf_count:报告可以为一个卷组分配的最大 pbuf 数量。
- global_pbuf_count:报告在将一个物理卷添加到任何卷组时所添加的 pbuf 数量。
让我们为这个卷组增加 pbuf 数量:
# lvmo -v redvg -o pv_pbuf_count=2048 |
老实说,我通常并不使用 lvmo,而是使用 ioo。我更习惯优化全局参数。一定要注意,如果将 pbuf 值设置得太大,将会导致性能降低。
本文重点关注逻辑卷以及它们与磁盘 I/O 子系统的关系。本文定义了逻辑卷,并说明了它与应用程序层和物理层的关系。本文还定义和介绍了 inter-disk 和 intra-disk 策略的一些最佳实践,因为它们与创建和维护逻辑卷有关。您了解了监视逻辑卷 I/O 使用情况的各种方法,分析了用于帮助确定问题的各种命令所捕捉的数据。最后,通过确定和增加特定卷组所使用的 pbuf 数量,对逻辑卷进行了优化。本系列的第 3 部分将研究文件系统,重点关注应用程序层,使用各种命令监视和优化文件系统和磁盘 I/O 子系统。
学习
- “Use direct I/O to improve performance of your AIX applications”(Shiv Dutta,developerWorks,2002 年 11 月):这篇文章讨论直接 I/O 的好处并介绍如何实现它。
-
Improving database performance with AIX concurrent I/O:通过阅读这份白皮书进一步了解如何提高数据库性能。
-
AIX memory affinity support:通过 IBM System p and AIX 信息中心了解关于 AIX 内存关联支持的更多信息。
- “nmon 性能:分析 AIX 和 Linux 性能的免费工具”(Nigel Griffiths,developerWorks,2006 年 2 月):这篇文章对 nmon 工具做了精彩的介绍。
- “nmon analyser —— 生成 AIX 性能报告的免费工具”(Steven Atkins,developerWorks,2006 年 4 月):通过阅读这篇文章了解关于 nmon 分析程序的更多信息。
-
AIX 7.1 信息中心 提供 AIX 操作系统的技术信息。
-
IBM Redbooks:
Database Performance Tuning on AIX 旨在帮助系统设计者、系统管理员和数据库管理员设计、规划、实现、维护、监控和调优 AIX 上的 Relational Database Management System (RDMBS),从而实现最佳性能。
- “Power to the People: A history of chip making at IBM”(developerWorks,2005 年 12 月):这篇文章讨论 IBM power 架构。
- “AIX 中的处理器关联”(developerWorks,2006 年 11 月):使用进程关联设置对线程进行绑定或取消绑定,这有助于找到麻烦的挂起或死锁问题的原因。通过阅读这篇文章了解如何使用处理器关联对进程进行限制,让进程只在指定的中央处理单元(CPU)上运行。
- “CPU Monitoring
and Tuning”(2002 年 3 月):了解如何使用标准的 AIX 工具帮助判断 CPU 瓶颈。
-
Operating System and Device Management:IBM 的这份文档向用户和系统管理员提供全面的系统管理和设备管理信息,可以帮助您在执行各种任务时选择适当的选项,比如系统备份和恢复系统、管理物理和逻辑存储以及调整分页空间。
- 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 和 UNIX 库中搜索以下主题:
- System administration
- Application development
- Performance
- Porting
- Security
- Tips
- Tools and utilities
- Java™ technology
- Linux®
- Open source
-
Safari 书店:访问这个电子资料库,寻找各种技术参考资料。
- developerWorks 技术活动和网络广播:随时关注 developerWorks 技术活动和网络广播。
-
播客:收听播客并了解 IBM 技术专家的最新想法。
-
Future Tech:访问 Future Tech 的网站,了解他们的最新产品。
获得产品和技术
讨论
- 参与 developerWorks 博客 并加入 developerWorks 社区。
- AIX 7 Open Beta:这个论坛用于与 AIX 7 Open Beta Program 相关的技术讨论。
- 加入 My developerWorks 中文社区。
-
参与 AIX 和 UNIX® 论坛:
Martin C. Brown,马丁.布朗,是Studio B 工作室的作者,一个早期的IT主管,在跨平台集成方面经验丰富。作为一名热心的开发工程师,他曾经为一些特殊用户制作了动态站点,包括HP和Oracle,并且现在是Foodware.net的技术主管。目前他是一名自由撰稿人和咨询顾问,马丁是比较知名的,作为SME时与微软有过工作协作,他是LinuxWorld杂志的LAMP技术编辑,AnswerSquad.com团队的核心成员,并已经撰写了大量的不同主题的书籍,如微软认证,iMacs以及开放源码编程。除了这些努力外,马丁在很多平台和众多环境中依然保持是一名普通并且喜爱编程的程序员。
Ken Milberg 是 PMP,同时也是 techtarget.com 的撰稿人/站点专家,他还为 searchopensource.com 提供 Linux 技术信息和支持。Ken 是 IBM Systems Magazine,Open Edition 的撰稿人和技术编辑。Ken 拥有 University of Maryland University College 的计算机与信息科学学士学位和技术管理科学硕士学位。他是 Long Island POWER-AIX 用户组的创始人和负责人。这些年以来,他在各种规模的企业工作过,并且担任过各种职位,包括 CIO 和高级 AIX 工程师。他现在在 Future Tech 工作,这是一家总部设在长岛的 IBM 业务合作伙伴。Ken 不仅是已通过 PMI 认证的项目管理专业人员(PMP),还是通过 IBM 认证的高级技术专家(CATE,IBM System p5 2006)。