logical readahead mysql_优化 AIX 7 磁盘性能,第 1 部分: 磁盘 I/O 概述和长期监控工具...

优化 AIX 7 磁盘性能,第 1 部分: 磁盘 I/O 概述和长期监控工具(sar、nmon 和 topas)

Martin C. Brown, 作家, Freelance

Ken Milberg, 作家/网站专家, Future Tech

简介: 根据之前的有关 AIX 5L 的文章,基于对 AIX 7 beta

的研究,了解如何配置和监控 AIX 7。本文讨论对直接 I/O、并发 I/O 和异步 I/O 的支持,以及每种 I/O

实现方法的最佳实践。本系列分为三部分,讨论 AIX? 磁盘和 I/O 子系统,重点关注在优化磁盘 I/O

性能时遇到的各种挑战。尽管磁盘调优很可能没有 CPU 或者内存优化那么激动人心,但它是优化服务器性能的关键方面。事实上,部分原因是因为磁盘

I/O 是最薄弱的子系统环节,与任何其他子系统相比,可以通过更多的措施提高磁盘 I/O 性能。

发布日期: 2010 年 12 月 22 日

级别: 中级

原创语言: 英文

访问情况 : 10845 次浏览

评论: 0 (查看 | 添加评论 - 登录)

32175098_1.jpg 平均分 (16个评分)

为本文评分

磁盘 I/O 优化的关键部分涉及到在构建系统之前实现最佳实践。因为当系统已经启动并处于运行状态时,很难再对数据进行移动,所以需要在规划磁盘和 I/O 子系统环境时正确地完成这项任务,这一点是非常重要的。这包括物理架构、逻辑磁盘排列以及逻辑卷和文件系统配置。

当系统管理员听到可能出现了磁盘争用问题时,他或她首先会求助于 iostat。iostat 等同于使用 vmstat

提供有关内存的报告,它是获得有关 I/O 子系统的当前运行概况的一种快速而原始的方法。尽管运行 iostat

并不是一种完全不合理的反应,但是很早就应该着手考虑磁盘 I/O

的问题,而不是等到必须进行调优的时候。如果没有从一开始就正确地为环境配置磁盘,那么任何调优工作都无法提供帮助。而且,有一点非常重要,需要了解磁盘

I/O 的具体情况,以及它与 AIX? 和 your System p? 硬件之间的关系。

对于磁盘 I/O 调优来说,AIX 特有的工具和实用工具比通用的 UNIX?

命令和工具能够提供更多的帮助,因为它们的任务就是帮助优化本机 AIX 磁盘 I/O 子系统。在本文中,我们要定义和介绍 AIX I/O

栈,并将其与磁盘性能的物理和逻辑方面关联起来。本文介绍直接、并发和异步

I/O:它们是什么,如何启用它们,以及如何监控和优化它们。本文还介绍一些长期监控工具,应该使用它们来帮助优化系统。听到 iostat

并不是我们推荐的帮助长期收集统计数据的工具,您可能会感到奇怪。

本文讨论 AIX 7 的 beta 版中的支持和变化,包括不同子系统的配置方式方面的变化。AIX 7 中的主要变化进一步简化了许多

I/O 子系统的操作和配置,这个改进过程从 AIX 6 就开始了。其结果是许多 I/O

子系统不再需要启用和配置了。现在,以预先配置好的状态提供它们,当应用程序请求相关功能时,自动地启用和启动它们。

本文还关注那些有助于识别和改进要调优的子系统的变化。开始对系统进行监控的最佳时间是在首次将系统应用到生产环境中并正常运行时(而不是等

到用户抱怨系统性能非常糟糕的时候)。需要在系统正常运行的时候建立系统运行状态的基准,以便在系统可能不正常时对数据进行分析。在对 I/O

子系统进行更改时,一次仅进行一项更改,以便能够准确地评估这项更改的影响。为了评估其影响,可以使用本文中推荐的长期监控工具之一捕捉数据。

您应该知道,对于运行任何程序来说,最慢的部分实际上是花费在从磁盘获取数据上的时间。这是由 I/O

的物理组件造成的。实际的磁盘必须找到正确的柱面,控件需要访问正确的块,并且磁头必须等到这些块旋转到磁头下面。在对系统进行任何优化活动之前,首先应

该了解 I/O 系统的物理架构,因为如果 I/O

子系统的设计非常糟糕,其中包含慢速磁盘或者适配器的使用非常低效,那么任何优化工作都无法提供帮助。

图 1 说明了物理 I/O 组件与逻辑磁盘及其应用程序 I/O 如何紧密地关联在一起。这正是通常将其称为 AIX I/O 栈的原因。

图 1. AIX I/O 栈

32175098_2.gif

在进行调优工作时,需要了解所有层,因为它们分别以不同的方式对性能产生影响。在第一次设置系统时,对于磁盘的配置,可以从最底层(物理层)

开始,然后是设备层、逻辑卷、文件系统、文件和应用程序。规划物理存储环境是非常重要的,这一点无论怎样强调都不为过。这涉及到确定磁盘的数量、类型(速

度)、大小和吞吐量。关于存储技术需要注意的一个重要挑战是,尽管磁盘存储功能得到了极大的改进,但是磁盘的旋转速度却没有太大的提高。您必须清楚这样一

个事实:RAM 访问仅需要 540 个 CPU 周期,而磁盘访问需要用到 2 千万个 CPU 周期。很明显,系统中最薄弱的环节就是磁盘 I/O

存储系统,作为系统管理员,您的任务是确保它不会成为更严重的瓶颈。如前所述,与任何可调整的 I/O 参数相比,糟糕的数据布局会给 I/O

性能带来更大的影响。研究 I/O 栈可以帮助理解这一点,因为逻辑卷管理器(Logical Volume

Manager,LVM)和磁盘布置要比调优参数(ioo 和 vmo)更接近最底层。

现在,我们来讨论数据布局的一些最佳实践。一个重要的概念是,要确保数据均匀地分布在整个物理磁盘中。如果数据仅位于几个轴,那么使用多个逻

辑单元号(LUN)或者物理磁盘又有什么实际意义呢?如果使用了 SAN

或者其他类型的存储阵列,那么应该尝试创建具有相同大小和类型的阵列。还应该在创建它们时为每个阵列使用一个

LUN,然后将所有的逻辑卷分散到卷组中所有的物理卷。

如前所述,应该在首次配置系统时完成这项工作,因为修复 I/O 问题要比纠正内存或者 CPU

问题困难得多,特别是当涉及到在生产环境中移动数据时。还应该确保镜像位于不同的磁盘和适配器。数据库具有独特的困难;如果可能,索引和重做日志也应该位

于不同的物理磁盘。对于经常用于执行排序操作的临时表空间,也应该这样。

使用高速适配器连接磁盘驱动器是非常重要的,但是必须确保总线本身不会成为瓶颈。要想防止这种情况发生,就要确保将适配器分散到多个总线。同

时,不要将过多的物理磁盘或者 LUN

连接到任何一个适配器,因为这样做也会对性能产生极大的影响。配置的适配器越多越好,特别是在大量磁盘的利用率都很高的情况下。还应该确保设备驱动程序支

持多路径 I/O (MPIO),它支持 I/O 子系统的负载平衡和可用性。

让我们回到前面提到的一些概念,比如直接 I/O。什么是直接 I/O?它是在 AIX Version 4.3 中首次引入的,这种

I/O 方法不经过虚拟内存管理器(Virtual Memory

Manager,VMM),从用户的缓冲区直接与磁盘进行数据传输。根据应用程序的类型,实现这种技术可能会提高性能。例如,对于那些具有很糟糕的缓存使

用率的文件,可以考虑使用直接 I/O。直接 I/O 还可以提高那些使用同步写操作的应用程序的效率,因为这些写操作的对象是磁盘。直接 I/O

会降低 CPU 使用量,这是因为消除了双重数据复制。将磁盘的数据复制到缓冲区缓存,然后再复制文件数据,就会出现双重数据复制。直接 I/O

的一个主要性能开销是,尽管它可以降低 CPU

使用量,但是它也会导致进程长时间等待较小的请求完成。注意,这种方式适用于在磁盘上具有持久存储位置的持久段文件。当使用 IBM Enhanced

Journaled File System for AIX 5L? (JFS2) 不通过直接 I/O

访问文件时,文件作为本地页面缓存并将数据复制到 RAM 中。直接 I/O 可以在许多方面提供与使用原始逻辑卷类似的性能,同时仍然保留了使用

JFS 文件系统的优点(例如,易于管理)。在使用直接 I/O 挂载文件系统时,应该避免使用支持大文件的 JFS 文件系统。

并发 I/O 是在 AIX Version 5.2 中首次引入的,这个特性调用直接 I/O,所以它具有与直接 I/O

相关联的所有其他性能注意事项。在使用标准的直接 I/O

时,会对索引节点(与文件相关联的数据结构)加锁,以防止出现多个线程试图同时更改一个文件的内容的情况。并发 I/O

绕过了索引节点锁,这可以允许多个线程并发地读写相同文件的数据。这是因为 JFS2 在实现时使用了写独占 (write-exclusive)

索引节点锁,允许多个用户同时读取相同的文件。可以想象,直接 I/O 可能导致不断地从同一文件读取数据的数据库产生很大的问题。并发 I/O

解决了这一问题,这正是此特性主要应用于关系数据库的原因。与直接 I/O 类似,可以通过 open

系统调用或者通过挂载文件系统来实现这种方式,如下所示:# mount -o cio /u。

当使用这个命令挂载文件系统时,其中所有的文件都使用并发 I/O。与使用直接 I/O 相比,并发 I/O

几乎可以提供使用原始逻辑卷的所有优点,同时仍然保持文件系统的易管理性。注意,不能对 JFS(只能对 JFS2)使用并发

I/O。另外,对于那些受益于文件系统预读功能或者较高缓冲区缓存命中率的应用程序,可能会出现性能降低。

异步 I/O 是什么情况呢?同步和异步 I/O 指的是,应用程序是否等待 I/O 完成之后再开始进行处理。正确地使用异步 I/O

可以极大地提高 I/O 子系统写操作的性能。其工作方式是,它本质上允许应用程序在后台执行 I/O

的同时继续进行处理。这种方式能够提高性能是因为它允许 I/O 和应用程序处理同时运行。对于数据库环境,启用异步 I/O 的确有帮助。如何监控异步

I/O 服务器的使用情况呢?iostat 和 nmon 都可以监控异步 I/O 服务器的使用情况。只有在已经执行了需要异步 I/O

的应用程序的情况下,才能监控异步 I/O 和更改参数。AIX 内核启用异步 I/O

组件。这会让用户在尝试更改参数时产生困惑,因为只有在装载此模块之后,才能更改参数。

要想判断是否已经启用了异步 I/O,可以检查 ioo 命令的输出,见 清单 1。

清单 1. 检查 ioo 命令的输出

# ioo -a

aio_active = 0

aio_maxreqs = 65536

aio_maxservers = 30

aio_minservers = 3

aio_server_inactivity = 300

j2_atimeUpdateSymlink = 0

j2_dynamicBufferPreallocation = 16

j2_inodeCacheSize = 200

j2_maxPageReadAhead = 128

j2_maxRandomWrite = 0

j2_metadataCacheSize = 200

j2_minPageReadAhead = 2

j2_nPagesPerWriteBehindCluster = 32

j2_nRandomCluster = 0

j2_syncPageCount = 0

j2_syncPageLimit = 16

lvm_bufcnt = 9

maxpgahead = 8

maxrandwrt = 0

numclust = 1

numfsbufs = 196

pd_npages = 65536

posix_aio_active = 0

posix_aio_maxreqs = 65536

posix_aio_maxservers = 30

posix_aio_minservers = 3

posix_aio_server_inactivity = 300

在这个清单中可以看到,aio_active 和 posix_aio_active 设置为零。其他参数是可配置的,当使用了相应的子系统时启用它们。

现在,aio 内核进程作为 aioLpool 和 aioPpool 出现(见 清单 2)。

清单 2. aio 内核进程作为 aioPpool 和 aioLpool 出现

l488pp065_pub[/] > pstat -a|grep aio

37 a 250068 1 250068 0 0 1 aioPpool

38 a 260052 1 260052 0 0 1 aioLpool

其结果是 aio 系统占用的内存和进程空间更少。现在可以为每个 CPU 配置可调参数(例如 aio_maxservers,它指定可以创建的最大服务器数量)。注意,更改这些值并不会立即改变可用的服务器数量,只是改变当存在未完成 I/O 时由内核创建的最大数量。

可能希望更改的其他参数包括最大异步 I/O 请求数量(aio_maxreqs,它改变请求队列的大小)和 aio_server_inactivity(它控制当没有更多请求时什么时候终止异步服务)。

可以使用 ioo 或 smit 更改参数。可以在 Performance & Resource

Scheduling、Tuning Kernel & Network Parameters 和 Tuning IO Parameters

中找到异步参数。在 smit 中,可以检查当前值和可能的最大值。

如果装载了内核模块,iostat -A 命令会报告异步 I/O 统计数据(见 清单 3)。

清单 3. iostat -A 命令

# iostat -A

System configuration: lcpu=2 drives=3 ent=0.60 paths=4 vdisks=4

aio: avgc avfc maxgc maxfc maxreqs avg-cpu: % user % sys % idle % iowait physc % entc

0 0 32 0 4096 6.4 8.0 85.4 0.2 0.1 16.0

Disks: % tm_ act Kbps tps Kb_read Kb_wrtn

hdisk0 0.5 2.0 0.5 0 4

hdisk1 1.0 5.9 1.5 8 4

hdisk2 0.0 0.0 0.0 0 0

这些内容究竟表示什么呢?

avgc:它报告在您所指定的时间间隔内平均每秒的全局异步 I/O 请求数量。

avfc:它报告在您所指定的时间间隔内平均每秒的 fastpath 请求数量。

maxgc:它报告从上次获取该值以来的最大全局异步 I/O 请求数量。

maxfc:它报告从上次获取该值以来的最大 fastpath 请求数量。

maxreqs:这是允许的最大异步 I/O 请求数量。

aio 和 posixaio 之间的主要差异是它们传递不同的参数,所以的确需要同时配置它们。

与 AIX 6 一样,在 AIX 7 中,fsfastpath 和 fastpath

可调项不再是可更改的。它们现在属于受限制的可调项,默认设置为 1(启用)。因此,它们都可以把异步 I/O

请求直接发送到底层磁盘(而不通过相应的子系统和文件系统支持),这会产生更好的性能。

最后一个概念是 I/O 处理速率调整。这个 AIX 特性可以防止使用大量磁盘 I/O 的应用程序导致 CPU

和磁盘超载。适当地使用磁盘 I/O 处理速率调整,可以帮助防止生成大量输出的程序使系统的 I/O 饱和并导致系统性能降低。优化 maxpout 和

minpout 可以帮助防止对文件执行顺序写操作的线程占用过多的系统资源。

在挂载文件系统时,为 minput 和 maxpout 显式地指定零值,可以限制设置全局参数的效果:# mount -o minpout=0,maxpout=0 /u。

从 AIX 6 开始,在 sys0 设备上默认启用 I/O 处理速率调整,还可以在其他设备上控制处理速率调整。

注意,还可以重新挂载现有的文件系统并设置 I/O 处理速率调整,这有助于调整已经在提供服务的磁盘的性能。

可以使用 AIX 特有的工具(sar、topas 和 nmon)监控磁盘 I/O 活动。这些工具有助于快速地解决性能问题,以及捕捉相关的数据以便进行历史趋势研究和分析。

别期望在本节中看到 iostat,因为 iostat 是一种用于快速确定在物理磁盘和适配器之间是否存在不平衡 I/O 负载的 UNIX 实用工具。除非决定使用 iostat 编写自己的脚本工具,否则它无法帮助分析长期的趋势和捕捉数据。

sar 是较早的通用 UNIX 工具之一,已经经过了多年的改进。尽管我通常喜欢使用 AIX 特有的工具,如 topas 或者 nmon,但是 sar 可以提供关于磁盘 I/O 的很多信息。我们来运行一个典型的 sar 命令以检查 I/O 活动(见 清单 4)。

清单 4. 使用 sar

# sar -d 1 2

AIX l488pp065_pub 1 7 00F604884C00 08/11/10

System configuration: lcpu=4 drives=1 ent=0.25 mode=Uncapped

11:38:44 device %busy avque r+w/s Kbs/s avwait avserv

11:38:45 hdisk0 1 0.0 6 24 0.0 1.9

11:38:46 hdisk0 0 0.0 3 15 0.0 2.3

Average hdisk0 0 0.0 4 19 0.0 2.1

让我们来仔细看看清单 4 中的列标题。

%busy:该命令报告设备忙于处理传输请求的时间比例。

avque:在 AIX Version 5.3 中,该命令报告等待发送到磁盘的请求的数量。

r+w/s:该命令报告从设备读取或者向设备写入的次数(以 512 个字节为单位)。

avwait:该命令报告每个请求的平均等待时间(单位为毫秒)。

avserv:该命令报告每个请求的平均服务时间(单位为毫秒)。

需要谨防出现任何磁盘的使用率接近百分之百,或者大量的队列请求等待磁盘的情况。尽管 sar 的输出表明存在某些活动,但实际上并没有什么

I/O 问题,因为不存在等待 I/O 的情况。需要继续监控系统以确保也使用了 hdisk0 之外的其他磁盘。sar 不同于 iostat

的地方在于,它能够通过它的系统活动数据收集器(sadc)实用工具捕捉数据,以便进行长期的分析和趋势研究。这种实用工具允许捕捉数据进行历史趋势研究

和分析,通常在 cron 中没有开启它。

下面介绍一下它的工作方式。在 AIX 系统中,默认情况下通常有两个 Shell 脚本被注释掉了(/usr/lib/sa/sa1 和 /usr/lib/sa/sa2),它们提供有关系统活动的每日报告。sar 命令实际上通过调用 sadc 例程访问系统数据(见 清单 5)。

清单 5. cronjob 示例

# crontab -l | grep sa1

0 8-17 * * 1-5 /usr/lib/sa/sa1 1200 3 &

0 * * * 0,6 /usr/lib/sa/sa1 &

0 18-7 * * 1-5 /usr/lib/sa/sa1 &

有没有对用户来说更友好的工具呢?您说的是 topas 吧?topas 是一种非常优秀的性能监控工具,可以将其用于各种目的,包括(但是不限于)磁盘 I/O 子系统(见 图 2)。

图 2. topas

32175098_3.jpg

下面从磁盘的角度来研究 topas 的输出。这里并没有发生什么 I/O 活动。除了物理磁盘之外,请仔细观察 “Wait”(在 CPU

部分的上部),它也可以帮助确定系统是否有 I/O 瓶颈。如果在此处看到较高的数值,那么可以使用其他工具(如

filemon、fileplace、lsof 或 lslv)帮助确定究竟是哪个进程、适配器或者文件系统导致了瓶颈。如果希望获得比 iostat

更多的信息,那么可以使用 topas,它适合于对问题进行快速故障排除。从某种意义上说,topas 是 iostat 和 vmstat

的图形混合版,经过最近的改进,它现在支持捕捉数据以进行历史分析。

topas 的物理硬盘输出(-D)也有用。它显示磁盘统计数据,可以表明一个硬件磁盘是否负担过重,对于这种情况,可以通过把文件系统或信息分散到其他磁盘上加以改善。在 图 3 中可以看到输出示例。

图 3. 磁盘统计数据输出示例

32175098_4.jpg

尤其是应该检查 ART/AWT 和 MRT/MWT,它们表示磁盘读写操作的平均和最大等待时间。比较高的值表明磁盘非常忙。AQW 表示对 I/O 设备的每个请求的平均等待队列数量。同样,比较高的值表明磁盘的速度无法跟上请求的速度。

nmon 是我最喜欢的 AIX 性能工具。尽管 nmon 提供类似于 topas

的前端,但是它更适合于长期趋势研究和分析。而且,它让系统管理员能够将数据输出到 Excel

电子表格中,然后可以转换为图表(适合向高管和职能团队展示),可以清楚地说明系统瓶颈所在。这些工作通过一个称为 nmon

分析程序的工具来完成,它提供到 nmon 的挂钩。关于磁盘 I/O,nmon 可以报告以下数据:磁盘 I/O

速度、数据传输、读/写比例以及磁盘适配器统计信息。

下面是一个小示例,在这里 nmon 确实发挥了它的作用。假设您希望了解哪些进程占用的磁盘 I/O

最多,并希望能够将其与实际磁盘关联起来,以便清楚地显示每个进程的 I/O。与任何其他工具相比,使用 nmon 能够提供更多帮助。要想使用

nmon 完成这项任务,可以使用 -t 选项;设置时间,然后按 I/O 通道进行排序。

如何使用 nmon 捕捉数据并将其导入到分析程序中呢?使用 sudo 命令并让 nmon 运行 3 小时,每 30 秒钟取一次快照:# sudo nmon -f -t -r test1

-s 30 -c 180。然后,对创建的输出文件进行排序:# sort -A testsystem_yymmdd.nmon > testsystem_yymmdd.csv。

在完成了此任务之后,将这个 .csv 文件通过 ftp 传输到您的 PC 上,启动 nmon 分析程序电子表格(启用宏),单击 analyze nmon data。可以通过 “参考资料” 中的链接下载 nmon 分析程序。

图 4 为每个磁盘的读写提供磁盘汇总信息,单位是千字节每秒。

图 4. 每个磁盘的读写磁盘汇总信息,单位是千字节每秒

32175098_5.jpg

本文介绍了磁盘 I/O 子系统的重要性。定义并讨论了 AIX I/O 栈,以及它与物理和逻辑磁盘 I/O

之间的关系。还介绍了在数据库环境中进行磁盘配置的一些最佳实践,研究了直接和并发 I/O 之间的区别,还讨论了异步 I/O 和 I/O

处理速率调整。我们优化了异步 I/O 服务器并配置了 I/O 处理速率调整。从并发 I/O 模式的文件系统开始,我们研究了何时最适合实现并发

I/O。另外,您了解了关于 iostat 以及使用 sar、topas 和 nmonn 捕捉数据的所有内容。还研究了输出的不同类型,了解了在

sar 和 iostat 中使用的许多标志。本系列的第 2 部分将深入研究 AIX I/O

栈中的逻辑卷管理器层,介绍一些快照型的工具,它们可以帮助您快速地查看磁盘 I/O 子系统的状态。第 3 部分主要关注使用各种工具(如

filemon 和 fileplace)跟踪 I/O 使用情况,以及如何提高文件系统的整体性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值