AIX 5L 磁盘性能优化: 第 2 部分

监视逻辑卷并分析结果

了解如何在创建您的逻辑卷之前使用合适的磁盘布置以提高磁盘性能。本系列文章的第 2 部分(请参见参考资料)关注于监视逻辑卷,以及用于分析结果的命令和实用工具(iostatlvmstatlslvlspvlsvg)。

Ken Milberg, UNIX 顾问、技术作家和网站专家, Future Tech

Ken Milberg 是 techtarget.com 网站的技术作家和网站专家,并且在 searchopensource.com 网站提供 Linux 技术信息和支持。他还是《IBM 系统杂志(开放系统版)》的撰稿人和技术编辑。Ken 拥有马里兰大学计算机和信息科学学士学位以及技术管理硕士学位。他是长岛 POWER-AIX 用户组的创立者和负责人。多年以来,他在大小型企业工作过,并且担任过从 CIO 到高级 AIX 工程师的各种职位。现在,他在 Future Tech 工作,这是一家总部设在长岛的 IBM 业务合作伙伴。Ken 是一名通过 PMI 认证的项目管理专业人员 (PMP),还是一名通过 IBM 认证的高级技术专家(CATE,IBM System p5 2006),并且是通过 Solaris 认证的网络管理员 (SCNA)。您可以通过 kmilberg@gmail.com 与他联系。



2007 年 9 月 06 日

关于本系列

本系列教程共有三篇文章(请参见参考资料),介绍了 AIX® 磁盘和 I/O 子系统,重点关注于在优化磁盘 I/O 性能时的各种挑战。尽管磁盘优化很可能没有 CPU 或者内存优化那么激动人心,但它是优化服务器性能的关键部分。事实上,其中部分原因是因为磁盘 I/O 是最薄弱的子系统环节,与任何其他子系统相比,您可以执行更多的操作以提高磁盘 I/O 性能。

引言

与其他子系统的优化工作不同,实际上在构建系统的体系结构设计阶段就应该开始进行磁盘 I/O 优化。尽管存在一些 I/O 优化参数的虚拟内存等价项(ioolvmo),但是提高磁盘 I/O 性能的最佳方法是正确地配置您的系统,而不是优化相关的参数。与虚拟内存优化不同,在创建了逻辑卷并开始运行之后,要更改它们的组织结构会变得更加复杂,所以您通常只有一次机会正确地完成这项任务。本文讨论了配置逻辑卷的方式,以及相对于物理磁盘应该将它们布置于何处,本文还介绍了用于监视您的逻辑卷的工具。其中,大多数工具并不适合于长期趋势研究,并且是 AIX 特定的工具,它们可以提供相关信息以便了解如何配置逻辑卷,以及是否针对您的环境对它们进行了优化。

本系列文章的第 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. 物理磁盘盘片上的实际存储位置
物理磁盘盘片上的实际存储位置

作为一般规则,靠近中央的数据要比靠近外边缘的数据具有更快的寻道时间。这与数据的密度有关。因为越靠近中央,密度越大,实际上磁头只需移动更短的距离。内部边缘(inner edge)通常具有最短的寻道时间。作为最佳实践,应用程序使用 I/O 越多,就应该使其位于越靠近物理卷中央的位置。请注意,对于这个最佳实践,有一些例外的情况。磁盘边缘的每个磁道比靠近中央的磁道能够保存更多的数据。虽然这样说,但是实际上应该顺序地访问位于边缘的逻辑卷,以获得更高的性能。对于开启了镜像写一致性检查(Mirror Write Consistency Check,MWCC)的逻辑卷来说也一样。这是因为,MWCC 扇区位于磁盘边缘而不是中央,这与逻辑卷的 intra-disk 策略有关。

让我们来讨论另一个重要的、称为逻辑卷 inter-disk 策略的概念。inter-disk 策略定义了一个逻辑卷的物理分区实际驻留的磁盘的数目。一般规则是,最小的 (minimum) 策略可以提供最大的可靠性和可用性,而最大的 (maximum) 策略可以提高性能。简单地说,数据所分散到的驱动器越多,性能就越好。一些其他的最佳实践包括:分配密集的逻辑卷以分隔物理卷,定义所需的逻辑卷的最大大小,并将经常使用的逻辑卷布置在一起。这正是为什么在配置系统之前您必须了解具体的数据,以便您从一开始就可以创建有意义的策略的原因。

在创建逻辑卷时,您可以使用下面命令或者 smit 快速路径定义自己的策略:# mklv# smitty mklv

监视逻辑卷并分析结果

这个部分提供了有关如何监视您的逻辑卷并分析结果的介绍。介绍了各种各样的命令以及它们的用途,并且您还将检查输出内容。

刚刚接到了有关某个数据库服务器性能迟缓的报告。您怀疑可能出现了 I/O 问题,所以您使用 iostat 开始进行分析。如果您还记得,在本系列文章的第 1 部分中曾介绍过这个命令(请参见参考资料),尽管只是用作查看异步 I/O 服务器的目的。现在,让我们仔细地研究 iostatiostat,相当于用于虚拟内存的 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

Data2vg:
LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINT
data2lv             jfs        128   256   2    open/syncd    /data2
loglv00             jfslog     1     2     2    open/syncd    N/A
appdatalv       	 jfs        128   256   2    open/syncd    /appdata

现在,让我们使用 lslv,它可以提供关于逻辑卷的特定数据(请参见清单 5)。

清单 5. 使用 lslv
# lslv data2lv

LOGICAL VOLUME:     data2lv                VOLUME GROUP:   data2vg
LV IDENTIFIER:      0003a0ec00004c00000000fb076f3f41.1 PERMISSION:     read/write
VG STATE:           active/complete        LV STATE:       opened/syncd
TYPE:               jfs                    WRITE VERIFY:   off
MAX LPs:            512                    PP SIZE:        64 megabyte(s)
COPIES:             2                      SCHED POLICY:   parallel
LPs:                128                    PPs:            256
STALE PPs:          0                      BB POLICY:      relocatable
INTER-POLICY:       minimum                RELOCATABLE:    yes
INTRA-POLICY:       center                 UPPER BOUND:    32
MOUNT POINT:        /data                  LABEL:          /data
MIRROR WRITE CONSISTENCY: on/ACTIVE
EACH LP COPY ON A SEPARATE PV ?: yes
Serialize IO ?:     NO

这个视图为您的逻辑卷属性提供了详细的描述。这些数据表示了什么含义呢?intra-policy 是 center,它通常是面向使用大量 I/O 的逻辑卷的最佳策略。正如前面的讨论中所介绍的,对于这个规则,有一些例外的情况。不幸的是,您碰到了这些情况之一。因为已经开启了镜像写一致性检查 (MWC),所以如果卷位于边缘,那么应该能够更好地为其提供服务。让我们来研究一下 inter-policy。inter-policy 是 minimum,它通常是面向可用性高于性能的情况的最佳策略。而且,其中逻辑分区的数目是物理分区的两倍,这表示您正在对系统进行镜像。在这个示例中,对于您来说,原始性能是最重要的目标,所以逻辑卷的配置没有采用与如何使用卷的实际情况相关的方式。而且,如果您正在对系统进行镜像,并且使用了外部存储阵列,这种情况可能变得更糟,因为您已经在硬件层提供了镜像,而实际上,这比使用 AIX 镜像的效率更高。

让我们更深入地研究清单 6 中的内容。

清单 6. 带 -l 标志的 lslv
# lslv -l data2lv

data2lv:/data2
PV                COPIES        IN BAND       DISTRIBUTION
hdisk2            128:000:000   100%          000:108:020:000:000
hdisk3            128:000:000   100%          000:108:020:000:000

lslv-l 标志列举了与逻辑卷和每个逻辑卷的分布(distribution)相关的所有物理卷。然后,您可以确定已经将磁盘上百分之百的物理分区都分配给了这个逻辑卷。其中的分布(distribution)部分显示了每个物理卷中的实际物理分区数目。从中,您可以详细地了解其 intra-disk 策略。这些字段的顺序如下所示:

  • 边缘 (Edge)
  • 中间 (Middle)
  • 中央 (Center)
  • 内部中间 (Inner-middle)
  • 内部边缘 (Inner-edge)

该报告显示了,大多数数据位于中间,有些数据位于中央。

让我们继续研究,并找出与一个物理卷相关联的逻辑卷。可以使用 lspv 命令来完成这项任务(请参见清单 7)。

清单 7. 使用 lspv 命令
# lspv -l hdisk2

hdisk2:
LV NAME               LPs   PPs     DISTRIBUTION          MOUNT POINT
loglv01               1     1       01..00..00..00..00    N/A
data2lv               128   128     00..108..20..00..00   /data2
appdatalv    	      128   128     00..00..88..40..00    /appdata

现在,您可以实际地确定这个磁盘上的哪些逻辑卷实现了最大的性能。

您可以进行更深入地研究,以获取更具体的信息(请参见清单 8)。

清单 8. 带 -p 标志的 lspv
# lspv -p hdisk2

hdisk2:

PP RANGE  STATE   REGION        LV ID               TYPE       MOUNT POINT
  1-108   free    outer edge
109-109   used    outer edge    loglv00             jfslog     N/A
110-217   used    outer middle  data2lv             jfs         /data2
218-237   used    center        appdatalv             jfs        /appdata
238-325   used    center        testdatalv          jfs          /testdata
326-365   used    inner middle  stagingdatalv        jfs        /staging
366-433   free    inner middle
434-542   free    inner edge

这个视图告诉您,该物理卷中哪些是空闲的、哪些已经被使用,以及在什么地方使用了哪些分区。这是一个非常好的视图。

最好的工具之一是,使用 lvmstat 查看 LVM 的使用情况(请参见清单 9)。

清单 9. 使用 lvmstat
# lvmstat -v data2vg
0516-1309 lvmstat: Statistics collection is not enabled for this logical device.
        Use -e option to enable.

正如您可以从这个示例的输出中看到的,缺省情况下并没有启用它,所以在使用这个工具之前使用 # lvmstat -v data2vg -e 来启动这个功能。下面的命令可以在 10 个时间间隔内,每秒钟对 LVM 信息进行一次快照:

# lvmstat -v data2vg 1 10

这个视图显示了从启动该数据收集工具以来,您的系统中利用率最高的逻辑卷。在优化系统时需要深入地研究逻辑卷层,这时候该视图是非常有价值的(请参见清单 10)。

清单 10. 带 -v 标志的 lvmstat
# lvmstat -v data2vg

Logical Volume       iocnt     Kb_read              Kb_wrtn      Kbps
  appdatalv           306653    47493022            383822      103.2
  loglv00                 34        0                3340       2.8
  data2lv                453      234543            234343       89.3

您需要在其中查找什么信息呢?

  • % iocnt:报告读写请求的数目。
  • Kb_read:报告在测量间隔中读取的总数据量(单位为千字节)。
  • Kb_wrtn:报告在测量间隔中写入的数据量(单位为千字节)。
  • Kbps:报告已传输的数据量(单位为千字节)。

在您将其添加到您的指令库中之前,请查看所有这些命令的 man 页面。

使用 lvmo 进行优化

这个部分介绍了使用特定的逻辑卷优化命令。lvmo 用于设置和显示您的 pbuf 优化参数。它还可以用于阻塞 I/O 统计信息。

lvmo 是在 AIX Version 5.3 中首次引入的新的命令之一。请务必注意,使用 lvmo 命令只允许更改那些专门用于特定卷组的 LVM pbuf 可调参数。ioo 实用工具仍然是在系统范围内管理 pbufs 的唯一方法。这是因为,在 AIX Version 5.3 之前,pbuf 池参数是一种系统范围的资源。随着 AIX Version 5.3 的出现,LVM 可以为每个卷组管理一个 pbuf 池。什么是 pbuf?最准确地说,pbuf 是一个固定的内存缓冲区。LVM 使用这些 pbuf 来控制挂起的磁盘 I/O 操作。

让我们显示一下 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 使用情况的各种方法,并且分析了从用于帮助确定问题的各种命令所捕获的数据。最后,您通过确定和增加特定卷组所使用的 pbufs 量,对您的逻辑卷进行了优化。本系列文章的第 3 部分将在您继续研究文件系统的同时,重点关注于应用程序层,并使用各种命令以监视和优化您的文件系统和磁盘 I/O 子系统。

参考资料

学习

获得产品和技术

  • 您可以从这里下载 nmon 分析程序。
  • IBM 试用软件:从 developerWorks 可直接下载这些试用软件,您可以利用它们开发您的下一个项目。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=253409
ArticleTitle=AIX 5L 磁盘性能优化: 第 2 部分
publish-date=09062007