- 论坛徽章:
- 0
|
当您正在监视磁盘 I/O 时,请使用以下内容来确定您的操作过程:
- 查找最活跃的文件、文件系统和逻辑卷:
- “热”文件系统定位在一个物理驱动器上好还是分散在多个物理驱动器上好?(lslv、iostat、filemon)
- “热”文件是本地的还是远程的?(filemon)
- 调页空间是否支配磁盘应用?(vmstat、filemon)
- 是否有足够的内存来高速缓存那些由正在运行进程使用的文件页面?(vmstat、svmon)
- 应用程序是否执行许多同步(非高速缓存)的文件 I/O?
- 确定文件碎片:
- 查找使用率最高的物理卷:
- 驱动器或 I/O 适配器类型是否产生瓶颈?(iostat、filemon)
构建一条预调整基线
在您对磁盘配置或调整参数做出重要改动之前,构建一条评估基线来记录当前的配置和性能是一个不错的主意。
I/O 等待时间报告
AIX 4.3.3 及后续版本包含了用来计算 CPU 在等待磁盘 I/O(wio
time)时花费时间所占百分比这个方法的增强。这个方法在 AIX 4.3.2 及较早版本的操作系统中使用,操作系统可以在某些环境下在 SMP
上给出一个扩大的 wio 时间视图。这个 wio 时间是由命令 sar(%wio)、vmstat(wa)和 iostat(% iowait)报告的。
另一个变化是 wa 列详述了 CPU 闲置在本地和 NFS 安装的磁盘上暂挂磁盘 I/O 的时间百分比。
在 AIX 4.3.2 和较早版本中使用的方法
在每个处理器上的每个时钟中断(每处理器每秒 100
次)时,系统将决定四个类别(usr/sys/wio/idle)中的哪一个可以使用最后的 10ms 时间。如果时钟中断发生时 CPU 繁忙运行于
usr 方式,那么 usr 获取时钟滴答并添加到它的类别中。如果时钟中断发生时 CPU 繁忙运行于内核方式,那么 sys
类别获取时钟滴答。如果 CPU 不繁忙,系统将检查是否有任何磁盘 I/O 正在处理。如果有任何磁盘 I/O 正在处理,wio
类别将会递增。如果没有磁盘 I/O 正在处理中并且 CPU 不繁忙,那么 idle 类别获取滴答。
这个扩大的 wio 时间视图是由所有空闲 CPU 被分类为 wio 时间而不管等待 I/O 的线程而产生的。例如,只有一个线程运行 I/O 的系统会报告超过 90% 的 wio 时间而不管它拥有的 CPU 数目。
在 AIX 4.3.3 和后续版本中使用的方法
在 AIX 4.3.3 中的改变只是在有一个尚未完成的 I/O 已在 CPU 上启动的情况下把此空闲 CPU 标记为
wio。当只有几个线程在处理 I/O 并且系统除此之外处于空闲状态时,此方法可以报告更少的次数。例如,一个具有四个处理器的系统和一个正在处理
I/O 时将会最多报告 25% 的 wio 时间。一个具有 12 个处理器的系统和一个正在处理 I/O 的线程将会最多报告 8.3% 的
wio 时间。
同样,从 AIX 4.3.3 开始,系统将把等待 I/O 到 NFS 安装文件系统的时间报告为等待 I/O 时间。
使用 iostat 命令来评估磁盘性能
在您的系统处于工作负载高峰时期或者运行一个关键应用程序用来最小化 I/O 延迟时,运行带一个间隔时间参数的 iostat 命令来开始评估。以下 shell 脚本在后台运行 iostat 命令时,前台有一个大文件的副本在运行以便可以测量一些 I/O:
# iostat 5 3 >io.out &
# cp big1 /dev/null
这个示例把下面三份报告保存在 io.out 文件中:tty: tin tout avg-cpu: %
user % sys % idle % iowait 0.0 1.3 0.2 0.6 98.9 0.3 Disks: % tm_act
Kbps tps Kb_read Kb_wrtn hdisk0 0.0 0.3 0.0 29753 48076 hdisk1 0.1 0.1
0.0 11971 26460 hdisk2 0.2 0.8 0.1 91200 108355 cd0 0.0 0.0 0.0 0 0
tty: tin tout avg-cpu: % user % sys % idle % iowait 0.8 0.8 0.6 9.7
50.2 39.5 Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk0 47.0 674.6
21.8 3376 24 hdisk1 1.2 2.4 0.6 0 12 hdisk2 4.0 7.9 1.8 8 32 cd0 0.0
0.0 0.0 0 0 tty: tin tout avg-cpu: % user % sys % idle % iowait 2.0 2.0
0.2 1.8 93.4 4.6 Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk0 0.0
0.0 0.0 0 0 hdisk1 0.0 0.0 0.0 0 0 hdisk2 4.8 12.8 3.2 64 0 cd0 0.0 0.0
0.0 0 0
第一份报告是自最近一次重新引导以来的摘要并且显示了每个硬盘 I/O 的总体平衡(或者在这种情况下叫不平衡)。hdisk1 几乎空闲,hdisk2 接受大约全部 I/O 的 63%(从 Kb_read 和 Kb_wrtn )。
注:
系统维护磁盘活动的历史记录。如果历史记录被禁用(smitty chgsys -> 连续维护磁盘 I/O 历史记录 [false]),则在运行 iostat 命令时显示以下消息: 自引导以来的磁盘历史记录不可用。
间隔时间磁盘 I/O 统计信息不会受此影响。
第二个报告显示了 cp 运行的 5 秒间隔时间。仔细检查这一信息。这一 cp 的使用时间大约 2.6 秒。因此,2.5 秒的高 I/O 相关性要和 2.5 秒的空闲时间相平均以便输出 39.5% 的 % iowait。一个较短的时间间隔能提供一个有关命令本身更加详细的特征化信息,但是这个示例演示了当您在查看有关显示在时间间隔中的平均活动信息的报告时,您必须考虑的事情。
TTY 报告
有关 TTY 的两列信息(tin 和 tou)包含于 iostat命令的输出结果中,显示了由所有 TTY 设备读写的字符数。这包含了真实的和伪的 TTY 设备。真实的 TTY 设备是那些和异步端口连接的设备。一些伪 TTY 设备是 shell,telnet 会话和 aixterm 窗口。
由于处理输入输出的字符要消耗 CPU 的资源,请找出增加的 TTY 活动和 CPU 利用之间的相关性。如果有这种关系存在,评估它们并改进
TTY 子系统的性能。可以采用的步骤包括更改应用程序,在文件传送时修改 TTY 端口参数,或者可能的话升级至一个更快、更有效的异步通信适配器。
CPU 报告
CPU 统计信息列(% user、% sys、% idle 和 % iowait)提供了 CPU 的使用故障。该信息也在 vmstat 命令输出的标号为 us、sy、id 和 wa 的各列中报告。要获得各值的更为详细的解释,请参阅
[color="#800080"]『vmstat 命令』
。并且注意对
[color="#800080"]『I/O 等待时间报告』
中描述的 % iowait 所做的更改。
在运行一个应用程序的系统上,I/O 等待时间的高百分比可能与工作负载有关。在具有很多进程的系统上,一些可能在运行,而另一些在等待 I/O。在这种情况下,% iowait 可能很小或者为零,因为正在运行的进程“隐藏”了一些等待时间。尽管 % iowait 低了, 但瓶颈仍可以限制应用程序的性能。
如果 iostat 命令表明 CPU 受限的情况不存在,并且 % iowait 时间大于 20%,则可能出现 I/O 或磁盘受限情况。这一情况可能在缺少实内存的情况下由过多调页产生。也有可能是由于不平衡的磁盘负载、碎片数据或应用模式而产生。对一个不平衡的磁盘负载来说,同样的 iostat 报告提供了必要的信息。但是有关文件系统或逻辑卷,即逻辑资源来说,您必须使用诸如 filemon 或者 fileplace 命令之类的工具来获取信息。
驱动器报告
当您怀疑有磁盘 I/O 性能问题时,使用 iostat 命令。为了避免 TTY 信息和 CPU 统计信息,使用 -d 选项。此外,磁盘统计信息可以通过指定磁盘名称来限定用某些重要的磁盘。
请记住第一个数据集合代表自系统启动以来所有的活动。
磁盘:
显示了物理卷的名称。他们或是 hdisk 或是 cd,并且这些名称都跟有一个数字。如果物理卷的名称由 iostat 命令指定,那么只有指定那些名称时才显示。
% tm_act
指示物理磁盘活动所占总时间的百分比(磁盘的带宽利用率),或者换句话说,磁盘请求的总时间未达到。驱动器在数据传送和处理命令时是活
动的,例如寻道至新的位置。“磁盘活动时间”百分比正比于资源争用,反比于性能。当磁盘使用率增加时,性能就下降并且响应时间就增加。一般来说,当利用率
超过 70% 时,进程将等待的时间会比完成 I/O 所必需的时间更长,因为大多数 UNIX® 进程在等待它们的 I/O
请求完成时会阻塞(或休眠)。查找相对空闲驱动器来说繁忙的驱动器。把数据从繁忙的驱动器中移到空闲驱动器里可以帮助减轻磁盘的瓶颈。在磁盘中调入调出页
面会使 I/O 负载增加。 Kbps
指示了每秒钟多少 KB 的数据被传送(读或写)。这是在系统报告时间间隔内 Kb_read 加上 Kb_wrtn 的总和并除以的这段时间间隔的总数的结果。
tps
指示了每秒钟物理磁盘传送的次数。一次传送是设备驱动程序级别到物理磁盘的一次 I/O 处理请求。多重逻辑请求可以组合成单一的磁盘 I/O 请求。传送的大小是不确定的。
Kb_read
报告了在测量间隔中总的从物理卷中读取的数据量(以 KB 为单位)。
Kb_wrtn
显示了在测量间隔中总的写入物理卷中的数据量(以 KB 为单位)。
单独来说,上述字段没有不可以接受的值,因为统计信息与应用程序的特征、系统配置以及物理磁盘驱动器和适配器有着密切的关系。因此,当您在评估数据时,请查找相关模式和关系。最公共的关系是在磁盘利用情况(%tm_act)和数据传送率(tps)之间的关系。
为了从数据中得出任何有效的结论,您必须不仅理解系统物理磁盘驱动器与适配器的类型而且要理解应用程序的磁盘数据存取模式诸如顺序的、随机的或组合的模式。例如,如果应用程序顺序地读/写,当您拥有一个高的磁盘繁忙率(%tm_act)时,您可以获得一个高的磁盘传送速率(Kbps)。Kb_read 和 Kb_wrtn 列可以证实对应用程序读/写行为的理解。然而,这些列没有提供有关数据存取模式的信息。
一般来说,您不必考虑高的磁盘繁忙率(%tm_act)只要磁盘传送率(Kbps)同样很高。然而,如果您得到一个高的系统繁忙率和一个低的磁盘传送率,那么您可能有一个碎裂的逻辑卷、文件系统或单个文件。
有关磁盘、逻辑卷和文件系统性能的讨论,有时候可以得出这样一个结论:您的系统拥有的驱动器越多,您的磁盘 I/O
性能就越好。但这并不总是正确,因为单个磁盘适配器能处理的数据量是有限制的。磁盘适配器也可能成为一个瓶颈。如果您所有的磁盘驱动器都在一个磁盘适配器
上,并且您的那些经常处理的“热点”文件分散在各个物理卷上,您可能通过使用多重磁盘适配器来获得效益。性能的提高取决于数据存取的类型。
要想知道某个适配器是否饱和,使用 iostat 命令并且把所有连接到这个适配器上的磁盘的 Kbps 数量加起来。为了获得最大的聚集性能,总的传送率(Kbps)必须在磁盘适配器的吞吐量之下。在大多数情况下,使用 70% 的吞吐量。在 4.3.3 以后的操作系统版本中 -a 或 -A 选项会显示这些信息。
用 vmstat 命令评估磁盘性能
为了证实系统是 I/O 绑定,您最好使用 iostat 命令。不管怎样,这个 vmstat 命令可以通过参阅 wa 列,就如在
[color="#800080"]『vmstat 命令』
中讨论的那样。其他关于 I/O 绑定的指示符是:
- vmstat 输出中关于磁盘 xfer 部分
为了显示有关逻辑磁盘的统计信息(最大允许 4 个磁盘),请使用下列命令:
# vmstat hdisk0 hdisk1 1 8
kthr memory page faults cpu disk xfer
---- ---------- ----------------------- ------------ ----------- ------
r b avm fre re pi po fr sr cy in sy cs us sy id wa 1 2 3 4
0 0 3456 27743 0 0 0 0 0 0 131 149 28 0 1 99 0 0 0
0 0 3456 27743 0 0 0 0 0 0 131 77 30 0 1 99 0 0 0
1 0 3498 27152 0 0 0 0 0 0 153 1088 35 1 10 87 2 0 11
0 1 3499 26543 0 0 0 0 0 0 199 1530 38 1 19 0 80 0 59
0 1 3499 25406 0 0 0 0 0 0 187 2472 38 2 26 0 72 0 53
0 0 3456 24329 0 0 0 0 0 0 178 1301 37 2 12 20 66 0 42
0 0 3456 24329 0 0 0 0 0 0 124 58 19 0 0 99 0 0 0
0 0 3456 24329 0 0 0 0 0 0 123 58 23 0 0 99 0 0 0
这个磁盘 xfer 部分提供了发生在样本时间间隔内每秒向特定的物理卷传送的次数。您可以指定一至四个物理卷的名称。每一个指定的磁盘的传送统计信息将按照指定的顺序依次给出。这一统计数据代表了对物理设备的请求次数。但并不意味读取或写入的数据量。许多逻辑请求可以组合成一次物理请求。
- 这个由 vmstat 命令输出的 in 列
这列显示了在评估间隔中(每秒)发生的硬件或设备中断的次数。中断的示例为磁盘请求完成和 10 毫秒的时钟中断。既然后者每秒发生 100 次,那么 in 这个字段就总是大于 100。但是 vmstat 命令同样提供了详细的有关系统中断的信息。
- vmstat -i 输出
这个 -i 参数显示了自系统启动以来被每个设备中断的次数。但是如果增加间隔(可选)和计数参数,自启动以来的统计信息只是在第一节中显示;每个后缀节是有关被扫描间隔的统计信息。
# vmstat -i 1 2
priority level type count module(handler)
0 0 hardware 0 i_misc_pwr(a868c)
0 1 hardware 0 i_scu(a8680)
0 2 hardware 0 i_epow(954e0)
0 2 hardware 0 /etc/drivers/ascsiddpin(189acd4)
1 2 hardware 194 /etc/drivers/rsdd(1941354)
3 10 hardware 10589024 /etc/drivers/mpsdd(1977a88)
3 14 hardware 101947 /etc/drivers/ascsiddpin(189ab8c)
5 62 hardware 61336129 clock(952c4)
10 63 hardware 13769 i_softoff(9527c)
priority level type count module(handler)
0 0 hardware 0 i_misc_pwr(a868c)
0 1 hardware 0 i_scu(a8680)
0 2 hardware 0 i_epow(954e0)
0 2 hardware 0 /etc/drivers/ascsiddpin(189acd4)
1 2 hardware 0 /etc/drivers/rsdd(1941354)
3 10 hardware 25 /etc/drivers/mpsdd(1977a88)
3 14 hardware 0 /etc/drivers/ascsiddpin(189ab8c)
5 62 hardware 105 clock(952c4)
10 63 hardware 0 i_softoff(9527c)
注:
不同系统的输出信息各不相同,这主要取决于硬件和软件的配置(例如,时钟中断可能不会在 vmstat -i 的输出结果中显示,尽管它们会在处于普通 vmstat 命令的输出结果中的 in 列中被记录数量。)检查 count 列中数量大的条目,调查这些模块产生如此之多的中断的原因。
用 sar 命令评估磁盘性能
sar 命令是用来收集关于系统的统计数据的标准 UNIX 命令。通过它的许多选项,sar 命令提供了排队、页面调度、TTY 和许多其他的统计信息。使用 AIX 4.3.3,sar -d 选项产生实时的磁盘 I/O 统计信息。
# sar -d 3 3
AIX konark 3 4 0002506F4C00 08/26/99
12:09:50 device %busy avque r+w/s blks/s avwait avserv
12:09:53 hdisk0 1 0.0 0 5 0.0 0.0
hdisk1 0 0.0 0 1 0.0 0.0
cd0 0 0.0 0 0 0.0 0.0
12:09:56 hdisk0 0 0.0 0 0 0.0 0.0
hdisk1 0 0.0 0 1 0.0 0.0
cd0 0 0.0 0 0 0.0 0.0
12:09:59 hdisk0 1 0.0 1 4 0.0 0.0
hdisk1 0 0.0 0 1 0.0 0.0
cd0 0 0.0 0 0 0.0 0.0
Average hdisk0 0 0.0 0 3 0.0 0.0
hdisk1 0 0.0 0 1 0.0 0.0
cd0 0 0.0 0 0 0.0 0.0
sar -d 命令将列出以下字段:
%busy
服务于传送请求时,时间设备繁忙的那部分。这是同 %tm_act 列在 iostat 命令中所报告的一样。
avque
那段时间内所有从适配器到设备的未完成请求的平均数。可能有附加的 I/O 操作在设备驱动程序队列中。如果存在一个瓶颈,这个数字将是一个很好的指示符。
r+w/s
进出设备的读/写传送次数。这是同 tps 在 iostat 命令中报告的一样。
blks/s
以 512 字节为单元传送的字节数
avwait
事物等候服务的平均次数(队列长度)。传送请求在队列中空等设备的平均时间(以毫秒为单位)。这个数字目前没有被报告,它的缺省值显示为 0.0。
avserv
平均每次搜索的毫秒数。设备服务每次传送请求的平均时间(包括搜索时间、转动等待时间和数据传送时间)(以毫秒为单位)。这个数字目前没有被报告,它的缺省值显示为 0.0。
用 IsIv 命令评估逻辑卷碎片情况
lslv 命令在其他信息中显示了逻辑卷的碎片情况。要检查逻辑卷碎片情况,请使用 lslv -l lvname 命令,如下:
# lslv -l hd2
hd2:/usr
PV COPIES IN BAND DISTRIBUTION
hdisk0 114:000:000 22% 000:042:026:000:046
COPIES 的输出显示了逻辑卷 hd2 只复制了一份。IN BAND
显示了内策略(一个逻辑卷的属性)是如何遵循的。这个百分比越高,分配效率就越好。每个逻辑卷都有自己的内策略。如果操作系统不能满足要求,那么它选择最
佳路径取尽量满足要求。在我们的示例中,有总共 144 个逻辑分区(LP);42 LP 位于中部,26 LP 位于中心,还有 46 LP
在内缘。策略位于中心,in-band 将占 22%(26 /(42+26+46))。DISTRIBUTION 显示了物理分区是如何根据内策略部署的,它们是:
edge : middle : center : inner-middle : inner-edge
参阅
[color="#0000ff"]『物理卷的位置』
来获取更多有关物理分区的布局信息。
用 IsIv 命令评估数据的物理布局情况
如果负载显示与 I/O 有很强的相关性,您可以在磁盘中调查文件的物理布局情况,以确定重组在一定的级别上是否会阻碍改进。要参阅物理卷中逻辑卷 hd11 的分区布局情况,请使用下列命令:
# lslv -p hdisk0 hd11
hdisk0:hd11:/home/op
USED USED USED USED USED USED USED USED USED USED 1-10
USED USED USED USED USED USED USED 11-17
USED USED USED USED USED USED USED USED USED USED 18-27
USED USED USED USED USED USED USED 28-34
USED USED USED USED USED USED USED USED USED USED 35-44
USED USED USED USED USED USED 45-50
USED USED USED USED USED USED USED USED USED USED 51-60
0052 0053 0054 0055 0056 0057 0058 61-67
0059 0060 0061 0062 0063 0064 0065 0066 0067 0068 68-77
0069 0070 0071 0072 0073 0074 0075 78-84
用以下命令查找在 hdisk1 磁盘上 hd11 的空余部分:
# lslv -p hdisk1 hd11
hdisk1:hd11:/home/op
0035 0036 0037 0038 0039 0040 0041 0042 0043 0044 1-10
0045 0046 0047 0048 0049 0050 0051 11-17
USED USED USED USED USED USED USED USED USED USED 18-27
USED USED USED USED USED USED USED 28-34
USED USED USED USED USED USED USED USED USED USED 35-44
USED USED USED USED USED USED 45-50
0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 51-60
0011 0012 0013 0014 0015 0016 0017 61-67
0018 0019 0020 0021 0022 0023 0024 0025 0026 0027 68-77
0028 0029 0030 0031 0032 0033 0034 78-84
从上到下,五块各自代表了边缘、中间、中心、内中间和内边缘。
- 一个 USED 标志指示了此位置上的物理分区除了指定的逻辑卷外,正在被另一个逻辑卷使用。使用 lslv -p 命令后,数字指示了指定逻辑卷的逻辑分区数。
- 一个 FREE 标志指示了此位置上的物理分区没有被任何逻辑卷使用。如果逻辑分区在磁盘上不连续,将产生逻辑卷碎片。
- 一个 STALE 物理分区里的数据您不能使用。您可以使用 lspv -m 命令参阅 STALE 物理分区。把物理分区标为 STALE 必须包含和有效物理分区相同的信息。这个进程可以被 syncvg 命令在 vary-on 时刻或是系统运行的任何时刻再同步调用。直到这个 STALE 分区被有效数据重写,它们既不响应读请求也不响应写请求。
在前面的示例中,逻辑卷 hd11 在物理卷 hdisk1 中是碎片,它的第一个逻辑分区在 inner-middle 和 hdisk1
的内部区域,而逻辑分区 35-51 在外部区域。如果一个负载随机访问 hd11,将会产生不必要的 I/O 等待时间,因为逻辑卷 hd11
可能需要更长的搜索时间。这些报告同样指示在 hdisk0 或 hdisk1 中没有空闲的物理分区。
使用 fileplace 命令来评估文件空间布局
要查看先前我们复制的文件 big1,是如何存储在磁盘上的,我们可以使用 fileplace 命令。fileplace 命令显示了在一个逻辑卷或多个物理卷中一个文件块的布局情况。
要确认 fileplace 命令是否已安装并且可用,您可以运行如下命令:
# lslpp -lI perfagent.tools
使用如下命令:
# fileplace -pv big1
File: big1 Size: 3554273 bytes Vol: /dev/hd10
Blk Size: 4096 Frag Size: 4096 Nfrags: 868 Compress: no
Inode: 19 Mode: -rwxr-xr-x Owner: hoetzel Group: system
Physical Addresses (mirror copy 1) Logical Fragment
---------------------------------- ----------------
0001584-0001591 hdisk0 8 frags 32768 Bytes, 0.9% 0001040-0001047
0001624-0001671 hdisk0 48 frags 196608 Bytes, 5.5% 0001080-0001127
0001728-0002539 hdisk0 812 frags 3325952 Bytes, 93.5% 0001184-0001995
868 frags over space of 956 frags: space efficiency = 90.8%
3 fragments out of 868 possible: sequentiality = 99.8%
这个示例显示了在该文件中有很小的碎片,都是一下小的间隙。因此我们可以推断 big1 的磁盘排列没有在很大程度上影响顺序读取的时间。此外,如果一个(刚创建)的容量为 3.5 MB 的文件不幸遭遇这个小碎片,但文件系统总体上看起来并没有产生严重的碎片。
偶然情况下,部分文件将不会映射到任何卷的块中。这些区域将隐式地被文件系统填充为零。这些区域显示为 unallocated 逻辑块。一个含有这些区域的文件将显示比实际所占空间更大的字节数(即 ls -l 命令将显示占较大的空间,而 du 命令将显示占较小的空间或文件实际在磁盘上占有的块数)。
fileplace 命令从逻辑卷中读取了文件的块列表。如果文件是新建的,那么信息可能还没有在磁盘上。使用 sync 命令来刷新信息。同样,fileplace 命令将不会显示 NFS 远程文件(除非该命令运行在服务器上)。
注:
如果文件是通过搜索不同的位置后创建的,并且写入了相当分散的数据,那么磁盘中的页只有确实包含了数据才显示在 fileplace 命令报告中。文件系统并不自动在文件创建时填充插入页。然而,如果该文件被顺序读取(例如,通过使用 cp 或 tar 命令)在记录之间的空间将作为二进制零读取。这样一来,cp 命令的输出可以产生比输入文件更大的结果,尽管两者包含的数据是一样的。
空间有效性和顺序性
较高的磁盘有效性是指文件碎裂情况较轻并且可以提供较好的顺序文件访问。较高的顺序性是指文件被分配的更加具有连续性,十分有可能提供较好的顺序文件访问。
空间有效性 =
总的被用来存储文件的存储块的数目 /
(最大的存储块物理地址 -
最小的存储块物理地址 + 1)
顺序性 =
(总的存储块数目 -
存储块的分组数目 + 1)/
总的存储块数目
如果您发现顺序性或空间有效性的值在下降,您可以使用 reorgvg 命令来改善逻辑卷的使用和有效性(参阅
[color="#0000ff"]『逻辑卷重组』
)。要改善文件系统的使用和有效性,参阅
[color="#0000ff"]『文件系统重组』
。
在这个示例中,最大的存储块物理地址 - 最小的存储块物理地址 + 1 是:0002539 - 0001584 + 1 =
956存储块;总的被使用存储块是:8 + 48 + 812 = 868;空间有效性是 868 / 956(90.8%);顺序性是(868 -
3 + 1)/ 868 = 99.8%。
由于总的用来存储文件的存储块数目并不包含间接块的位置,但物理地址包括,所以对大于 32 KB 的文件来说,空间有效性可能永远达不到 100%,即使该文件位于连续的存储块中。
使用 vmstat 命令评估调页空间的 I/O
调页空间的 I/O 进出是随机的,大多数情况下一次一页。vmstat 命令的报告指示正在进行调页空间 I/O 操作的数目。以下两个示例显示了发生在机器进行 C 编译时的调页活动被人工地使用 rmss 命令后缩小的情况。pi 和 po(paging-space page-ins 和 paging-space page-outs)列显示了在 5 秒的间隔内调页空间进行 I/O 操作的数目(按照一页 4096字节)。第一份报告(重新引导后的总结)已被删除。请注意那些在分段中产生的调页活动。
# vmstat 5 8
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
0 1 72379 434 0 0 0 0 2 0 376 192 478 9 3 87 1
0 1 72379 391 0 8 0 0 0 0 631 2967 775 10 1 83 6
0 1 72379 391 0 0 0 0 0 0 625 2672 790 5 3 92 0
0 1 72379 175 0 7 0 0 0 0 721 3215 868 8 4 72 16
2 1 71384 877 0 12 13 44 150 0 662 3049 853 7 12 40 41
0 2 71929 127 0 35 30 182 666 0 709 2838 977 15 13 0 71
0 1 71938 122 0 0 8 32 122 0 608 3332 787 10 4 75 11
0 1 71938 122 0 0 0 3 12 0 611 2834 733 5 3 75 17
以下的“前和后”vmstat -s 的报告显示了调页活动的累计情况。请记住是 paging space
page ins 和 paging space page outs 代表了真实的调页空间 I/O。这个(未限定)的 page ins 和
page outs 报告了总的由调页机制执行的 I/O,即调页空间 I/O 和普通文件 I/O。该报告已经经过编辑并且删除了和本讨论无关的信息。
# vmstat -s # before
# vmstat -s # after
6602 page ins
3948 page outs
544 paging space page ins
1923 paging space page outs
0 total reclaims
7022 page ins
4146 page outs
689 paging space page ins
2032 paging space page outs
0 total reclaims
事实上在编译时产生比调页空间 page-outs 更多的 page-ins 意味着系统性能已被降至颠簸的边缘。有些页面正在重新分配空间,因为在它们完成调度前其帧已被其他所用。
使用 vmstat 命令总体评估磁盘 I/O
刚刚讨论过的技术也可以被用在访问由程序生成的磁盘 I/O 负载。如果除此之外系统空闲,以下序列:
# vmstat -s >statout
# testpgm
# sync
# vmstat -s >> statout
# egrep "ins|outs" statout
输出一幅有关次磁盘活动累计数的前后视图。例如:
5698 page ins
5012 page outs
0 paging space page ins
32 paging space page outs
6671 page ins
5268 page outs
8 paging space page ins
225 paging space page outs
在该命令(一个大型 C 编译)运行的这段时期内,系统总共读取了 981 个页面(其中 8 个来自调页空间)并写入了 449 个页面(其中 193 个写入调页空间)。
使用 filemon 命令详细分析 I/O
filemon 命令跟踪设备来获取一段时间间隔内的 I/O 活动的详细图像,该时间间隔产生于文件系统应用的不同层面,包括本地文件系统、虚拟内存段、LVM 和物理磁盘层。数据可以在所有层或所有通过 -O 选项指定的层面上被收集。缺省值是在 VM、LVM 和物理层面上收集。总结和详细报告一起生成。既然它使用了跟踪设备,那么 filemon 命令就可以只被 root 用户或一位系统组的成员运行。
为了确认 filemon 命令是否已安装并且可用,您可以运行如下命令:
# lslpp -lI perfagent.tools
跟踪可以由 filemon 命令启动,您也可以通过 trcoff 子命令随意地暂挂,并可通过 trcon 子命令来恢复执行以及使用 trcstop 子命令来终止运行。(既然 filemon 命令正在以优先级 40 的情况下运行,您可能想执行如下命令 nice -n -20 trcstop 来停止 filemon 命令。一旦跟踪被终止,filemon 命令便把报告写入标准输出。
注:
只有属于那些在 filemon 命令启动之后打开的文件的数据才会被收集。除非您指定 -u 标志。
filemon 命令可以从一个指定的文件中读取 I/O 跟踪的数据,而不是从实时跟踪进程中读取。在这种情况下,filemon 报告总结了系统的 I/O 活动情况和由跟踪文件表示的周期。当需要对远程机器上的跟踪文件进行后处理,或者一段时间执行跟踪数据收集另一段时间用来对它进行后处理,这时这种脱机处理的方法就很有用处。
trcrpt -r 命令必须在跟踪日志文件上执行,并且重定向到另一个文件,如下所示:
# gennames > gennames.out
# trcrpt -r trace.out > trace.rpt
在这点上,调整过的跟踪日志文件伺服于 filemon 命令以便报告被先前跟踪会话捕捉到的 I/O 活动,如下所示:
# filemon -i trace.rpt -n gennames.out | pg
在这个示例中,filemon 命令从输入文件 trace.rpt 中读取文件系统跟踪事件。因为跟踪数据已经捕捉到文件中,filemon 命令并不把它放到后台以便让应用程序运行。整个文件被读取之后,有关虚拟内存、逻辑卷和物理卷级别的 I/O 活动报告将会在标准输出中显示。(在这个示例中,报告被输送到 pg 命令中)。
如果 trace 命令以带有 -C all 标志的方式运行,那么同样以带有 -C all 标志的方式运行 trcrpt 命令(请参阅
[color="#0000ff"]『对来自 trace -C 输出的报告进行格式编排』
)。
下列命令的序列给出了一个有关 filemon 命令使用的示例:
# filemon -o fm.out -O all; cp /smit.log /dev/null ; trcstop
这份报告是按此序列生成的(在另一类空闲系统),如下所示:
Thu Aug 19 11:30:49 1999
System: AIX texmex Node: 4 Machine: 000691854C00
0.369 secs in measured interval
Cpu utilization: 9.0%
Most Active Files
------------------------------------------------------------------------
#MBs #opns #rds #wrs file volume:inode
------------------------------------------------------------------------
0.1 1 14 0 smit.log /dev/hd4:858
0.0 1 0 13 null
0.0 2 4 0 ksh.cat /dev/hd2:16872
0.0 1 2 0 cmdtrace.cat /dev/hd2:16739
Most Active Segments
------------------------------------------------------------------------
#MBs #rpgs #wpgs segid segtype volume:inode
------------------------------------------------------------------------
0.1 13 0 5e93 ???
0.0 2 0 22ed ???
0.0 1 0 5c77 persistent
Most Active Logical Volumes
------------------------------------------------------------------------
util #rblk #wblk KB/s volume description
------------------------------------------------------------------------
0.06 112 0 151.9 /dev/hd4 /
0.04 16 0 21.7 /dev/hd2 /usr
Most Active Physical Volumes
------------------------------------------------------------------------
util #rblk #wblk KB/s volume description
------------------------------------------------------------------------
0.10 128 0 173.6 /dev/hdisk0 N/A
------------------------------------------------------------------------
Detailed File Stats
------------------------------------------------------------------------
FILE: /smit.log volume: /dev/hd4 (/) inode: 858
opens: 1
total bytes xfrd: 57344
reads: 14 (0 errs)
read sizes (bytes): avg 4096.0 min 4096 max 4096 sdev 0.0
read times (msec): avg 1.709 min 0.002 max 19.996 sdev 5.092
FILE: /dev/null
opens: 1
total bytes xfrd: 50600
writes: 13 (0 errs)
write sizes (bytes): avg 3892.3 min 1448 max 4096 sdev 705.6
write times (msec): avg 0.007 min 0.003 max 0.022 sdev 0.006
FILE: /usr/lib/nls/msg/en_US/ksh.cat volume: /dev/hd2 (/usr) inode: 16872
opens: 2
total bytes xfrd: 16384
reads: 4 (0 errs)
read sizes (bytes): avg 4096.0 min 4096 max 4096 sdev 0.0
read times (msec): avg 0.042 min 0.015 max 0.070 sdev 0.025
lseeks: 10
FILE: /usr/lib/nls/msg/en_US/cmdtrace.cat volume: /dev/hd2 (/usr) inode: 16739
opens: 1
total bytes xfrd: 8192
reads: 2 (0 errs)
read sizes (bytes): avg 4096.0 min 4096 max 4096 sdev 0.0
read times (msec): avg 0.062 min 0.049 max 0.075 sdev 0.013
lseeks: 8
------------------------------------------------------------------------
Detailed VM Segment Stats (4096 byte pages)
------------------------------------------------------------------------
SEGMENT: 5e93 segtype: ???
segment flags:
segment flags:
reads: 13 (0 errs)
read times (msec): avg 1.979 min 0.957 max 5.970 sdev 1.310
read sequences: 1
read seq. lengths: avg 13.0 min 13 max 13 sdev 0.0
SEGMENT: 22ed segtype: ???
segment flags: inode
reads: 2 (0 errs)
read times (msec): avg 8.102 min 7.786 max 8.418 sdev 0.316
read sequences: 2
read seq. lengths: avg 1.0 min 1 max 1 sdev 0.0
SEGMENT: 5c77 segtype: persistent
segment flags: pers defer
reads: 1 (0 errs)
read times (msec): avg 13.810 min 13.810 max 13.810 sdev 0.000
read sequences: 1
read seq. lengths: avg 1.0 min 1 max 1 sdev 0.0
------------------------------------------------------------------------
Detailed Logical Volume Stats (512 byte blocks)
------------------------------------------------------------------------
VOLUME: /dev/hd4 description: /
reads: 5 (0 errs)
read sizes (blks): avg 22.4 min 8 max 40 sdev 12.8
read times (msec): avg 4.847 min 0.938 max 13.792 sdev 4.819
read sequences: 3
read seq. lengths: avg 37.3 min 8 max 64 sdev 22.9
seeks: 3 (60.0%)
seek dist (blks): init 6344,
avg 40.0 min 8 max 72 sdev 32.0
time to next req(msec): avg 70.473 min 0.224 max 331.020 sdev 130.364
throughput: 151.9 KB/sec
utilization: 0.06
VOLUME: /dev/hd2 description: /usr
reads: 2 (0 errs)
read sizes (blks): avg 8.0 min 8 max 8 sdev 0.0
read times (msec): avg 8.078 min 7.769 max 8.387 sdev 0.309
read sequences: 2
read seq. lengths: avg 8.0 min 8 max 8 sdev 0.0
seeks: 2 (100.0%)
seek dist (blks): init 608672,
avg 16.0 min 16 max 16 sdev 0.0
time to next req(msec): avg 162.160 min 8.497 max 315.823 sdev 153.663
throughput: 21.7 KB/sec
utilization: 0.04
------------------------------------------------------------------------
Detailed Physical Volume Stats (512 byte blocks)
------------------------------------------------------------------------
VOLUME: /dev/hdisk0 description: N/A
reads: 7 (0 errs)
read sizes (blks): avg 18.3 min 8 max 40 sdev 12.6
read times (msec): avg 5.723 min 0.905 max 20.448 sdev 6.567
read sequences: 5
read seq. lengths: avg 25.6 min 8 max 64 sdev 22.9
seeks: 5 (71.4%)
seek dist (blks): init 4233888,
avg 171086.0 min 8 max 684248 sdev 296274.2
seek dist (%tot blks):init 48.03665,
avg 1.94110 min 0.00009 max 7.76331 sdev 3.36145
time to next req(msec): avg 50.340 min 0.226 max 315.865 sdev 108.483
throughput: 173.6 KB/sec
utilization: 0.10
在系统伴有真实负载的情况下使用 filemon 命令将产生更长的报告并可能需要更多的跟踪缓存空间。filemon 命令的空间和 CPU 时间消耗可能在一定范围内降低系统性能。在生产环境下开始使用之前,先用 filemon 命令在非生产系统中试验。同样,在脱机处理和系统具有许多 CPU 的情况下使用带有 -C all 标志的 trace 命令。
注:
尽管 filemon 命令以详细的统计信息报告了平均数、最小值、最大值和标准偏差,但是该结果并不能用来形成可信间隔数或其他正式的统计推理。总的来说,数据点的分布既不随机也不对称。
filemon 命令的全局报告
全局报告列出了在测量间隔中最活跃的文件、段、逻辑卷和物理卷。它们在 filemon 报告的开始部分显示。缺省情况下,逻辑文件和虚拟内存报告各自被限制在最多 20 个最活跃的文件和段,衡量标准为总的数据传送量。如果 -v 标志被指定了,那么所有文件和段的活动将被报告。报告中的所有信息按照从最活跃到最不活跃的顺序从上到下依次列出。
最活跃的文件
#MBs
此文件在测量间隔时间内的传送量(以 MBs 为单位)。各行按照此字段降序排列。
#opns
在测量周期内的文件的打开次数。
#rds
文件读取调用的次数
#wrs
文件写入调用的次数
file
文件名称(文件路径全称在详细报告中)。
volume:inode
文件驻留的逻辑卷和在相连文件系统总的 i-node 数目。此字段可以被用来把文件和在详细的 VM 段报告中显示的其相应的永久段关联起来。此字段对在执行过程中创建和删除的临时文件可以为空。
最活跃的文件是在逻辑卷 hd4 和文件 null 的 smit.log。应用程序使用 terminfo 数据库来管理屏幕;所以 ksh.cat 和 cmdtrace.cat 同样繁忙。任何情况下,shell 需要向屏幕传送一条信息时,它就使用数据源目录。
为了识别未知文件,您可以把逻辑卷的名称 /dev/hd1 转换成文件系统安装点名称 /home,并且使用 find 或 ncheck 命令:
# find / -inum 858 -print
/smit.log
或者
# ncheck -i 858 //:858 /smit.log/:
# ncheck -i 858 //:858 /smit.log
最活跃的段
#MBs
此段在测量间隔时间内的传送量(以 MBs 为单位)。各行按照此字段降序排列。
#rpgs
从磁盘读入段中大小为 4-KB 的页面数
#wpgs
从段中写入磁盘大小为 4-KB 的页面数(page out)
#segid
内存段的 VMM 标识
segtype
段的类型:工作段、永久段(本地文件)、客户机段(远程文件)、页表段、系统段或者包含文件系统数据的指定永久段(日志、根目录、.inode、.inodemap、.inodex、.inodexmap、.indirect、 .diskmap)。
volume:inode
对永久段来说,包含相关文件的逻辑卷名称和文件的 i-node 数目。此字段可以被用来把段和在详细的文件状态报告中显示的其相应的文件关联起来。对非永久段来说,此字段为空。
如果命令仍是活动的,虚拟内存分析工具 svmon 可以被用来显示有关段的更多的信息。给出它的段标识(segid),如下所示: svmon -D segid。参阅
[color="#800080"]『svmon 命令』
以便获取更详尽的讨论。
在我们的示例中,这个 segtype ??? 意味着系统不能识别该段类型,并且您必须使用 svmon 命令来获取更多的信息。
最活跃的逻辑卷
util
逻辑卷使用率。
#rblk
从逻辑卷读取的大小为 512 字节的块数。
#wblk
写入逻辑卷大小为 512 字节的块数。
KB/s
每秒钟平均传送速率,单位 KB。
volume
逻辑卷名称。
description
文件系统安装点或是逻辑卷类型(paging, jfslog, boot, or sysdump)。例如,逻辑卷 /dev/hd2 是 /usr类型;/dev/hd6 是 paging 类型以及 /dev/hd8 是 jfslog 类型。有时也可能出现被压缩的这个字眼。这意味着所有的数据在被写入磁盘前都会以 Lempel-Zev(LZ)压缩技术自动压缩,在从磁盘读取时则自动解压缩。(参阅
[color="#0000ff"]『压缩』
来获取更多信)。
使用率用百分比表示,0.06 是指 6% 的逻辑卷在测量时间间隔内繁忙。
最活跃的物理卷
util
物理卷使用率。
注:
逻辑卷 I/O 请求在物理卷 I/O 请求前后启动。总的逻辑卷使用率将会看起来比总的物理卷使用率高。
#rblk
从物理卷读取的大小为 512 字节的块数。
#wblk
写入物理卷大小为 512 字节的块数。
KB/s
每秒钟平均传送速率,单位 KB。
volume
物理卷名称。
description
有关物理卷类型的简单描述,例如, SCSI 多媒体 CD-ROM 驱动器或 16位 SCSI 磁盘驱动器。
使用率用百分比表示,0.10 是指 10% 的物理卷在测量时间间隔内繁忙。
filemon 命令的详细报告
详细的报告给出了相对全局报告的一些附加信息。对每个报告文件、段或卷来说,在详细报告中都有一个条目。每个条目中字段在下面的四个详细报告中描
述。有些字段报告了一个单值;其余的报告了被称为。例如,响应时间的统计信息保存了所有被监视的读写请求。除了报告响应次数的标准偏差外,平均、最小和最
大的响应次数也被报告。标准差是用来显示单个响应次数相对平均响应次数而言偏差了多少。大约 2/3 的样本响应次数在平均数减去标准差(avg - sdev)和平均数加上标准差(avg + sdev)之间。如果响应次数的分布在很大的范围内散射,那么标准差相对平均响应时间而言就会变大。
详细的文件统计信息
在最活跃的文件报告中列出了为每个文件的提供的详细文件统计信息。这些节可以被用来确定该文件的存取情况。除了确定总的传送字节数、opens、writes 和 lseeks,用户也可以确定读取/写入的大小和次数。
FILE
文件的名称。如有可能,路径全称将被给出。
volume
逻辑卷/文件系统包括文件的名称。
inode
在文件系统中文件的 I-node 数目。
opens
监视期内文件打开的次数。
total bytes xfrd
总的读/写、进/出文件的字节数。
reads
对文件进行读取调用的次数
read sizes (bytes)
读取传送大小统计信息(avg/min/max/sdev),以字节为单位。
read times (msec)
读取响应时间统计信息(avg/min/max/sdev),单位为毫秒。
writes
对文件进行写入调用的次数
write sizes (bytes)
写入传送大小统计信息。
write times (msec)
写入相应时间的统计信息。
lseeks
lseek() 子例程的调用的数目。
read sizes 和 write sizes 将会给您一个有关您的应用程序在读取和写入信息的性能的感性认识。使用 4 KB 大小的多重文件为最佳结果。
详细的 VM 段统计信息
每个列在 最活跃段的报告中的元素有相关的一节显示了有关真实的 I/O 进出内存的详细信息。
SEGMENT
内部操作系统的段标识。
segtype
段内容的类型
segment flags
不同的段属性。
volume
对永久段来说,包含相关文件的逻辑卷名称。
inode
对永久段来说,相应文件的 i-node 数目。
reads
读取到段中大小为 4096 字节的页面数(就是,paged in)。
read times (msec)
读取响应时间统计信息(avg/min/max/sdev),单位为毫秒。
read sequences
读取的序列数。一个序列是一连串连续读取的字符串页面。read sequences 的数目是顺序存取量的指示符。
read seq. lengths
描述了 read sequences 的长度的统计信息,以页位单位。
writes
从段写入磁盘的页面数(就是,paged out)。
write times (msec)
写入相应时间的统计信息。
write sequences
写入的序列数。一个序列是一连串连续写入(paged out)的页面。
write seq. lengths
描述了写序列的长度的统计信息,以页位单位。
通过检查 reads 和 read-sequence 计数情况,您可以确定访问是顺序的还是随机的。例如,如果 read-sequence
计数接近 reads 计数,该文件访问更趋于随机化。另一方面,如果 read-sequence 计数在很大程度上比 read 计数小很多并且
read-sequence 长度是一个高值,该文件根趋于顺序化。这个逻辑同样适用于 writes 和 write sequence。
详细的逻辑/物理卷统计信息
每个列在最活跃逻辑卷/最活跃物理卷的报告中元素有相应的一节显示了有关逻辑/物理卷的详细信息。除了读取和写入的数量。用户还可以不仅确定逻辑/物理卷的初始和平均的搜索距离,而且确定读取和写入的次数和大小。
VOLUME
卷名。
description
有关卷的描述。(如果对象是逻辑卷则描述内容,物理卷则描述类型。)
reads
对卷进行读取请求的次数
read sizes (blks)
读取传送大小统计信息(avg/min/max/sdev),以 512 字节大小的块为单位。
read times (msec)
读取响应时间统计信息(avg/min/max/sdev),单位为毫秒。
read sequences
读取的序列数。一个序列是一连串连续读取的大小为 512 字节的块。它表明了顺序存取的数量。
read seq. lengths
统计信息描述了读取序列的长度,以块为单位。
writes
对卷进行写入请求的次数。
write sizes (blks)
写入传送大小统计信息。
write times (msec)
写入响应时间统计信息。
write sequences
写入的序列数。一个序列是一连串连续写入的大小为 512 字节的块。
write seq. lengths
有关描述写入序列长度的统计信息,以块为单位。
seeks
在一次读取或写入请求前的寻道数;也可以表达为总的需要寻道的读请求数和写请求数所占的百分比。
seek dist (blks)
寻道距离统计信息,以 512 字节一块为单位。除了一些平常的统计信息(avg/min/max/sdev),初始化寻道操作(假设 0 号块为开始位置)的距离是分开报告的。有时候,寻道距离会很长;分开报告是为了避免是其他统计信息偏移。
seek dist (cyls)
(只有物理卷)寻到距离统计信息以磁盘柱面为单位。
time to next req
有关(avg/min/max/sdev)描述对卷执行读或写请求之间的时间长度的统计信息,单位为毫秒。这一列表明了该卷的存取速率。
throughput
每秒总的卷吞吐量,单位为 KB。
utilization
卷繁忙的时间比重。在此报告中的各条目按照此字段降序排列。
一个长的寻道时间可以增加 I/O 响应时间,结果降低了应用程序的性能。通过检查读取请求数和写入请求数的计数情况,您可以确定访问是顺序的还是随机的。这个逻辑同样适用于写请求数和写序列。
使用 filemon 命令用户指南
以下是一些使用 filemon 命令的用户指南:
- /etc/inittab 文件总是很活跃。指定在 /etc/inittab 中的守护程序经常被检查以确定它们是否要被重新生成。
- /etc/passwd 文件也很活跃。因为许多文件和目录的存取许可性要被核实。
- 一个长的寻道时间增加了 I/O 的响应时间并且降低了系统的性能。
- 如果大部分读写请求要求寻道,您可能在同一个物理磁盘上拥有碎片文件和过分活跃的文件系统。然而,对联机事务处理或是数据库系统来说,这种行为可能是正常的。
- 如果读写请求的数目接近序列数,物理磁盘存取方式较顺序而言更加随机化。一个序列是一连串连续读取(paged in)或连续写入(paged out)的页面。seq. lengths 是序列以页为单位的长度。一个随机文件存取也有可能涉及许多寻道数。在这种情况下,您不能区分 filemon 命令的输出结果是表明文件的存取方式为随机还是文件是碎裂的。使用 fileplace 命令来进一步调查真相。
- 远程文件列在 volume:inode 列中,并带有远系统的名称。
由于 filemon 命令可能潜在地消耗一些系统能源,所以使用时要小心谨慎,并且一边考虑在运行此工具时涉及的内务操作,一边分析系统的性能。在 CPU 饱和运行的环境下,测试已表明:
- 伴随少量的 I/O, filemon 命令显示了大量的编译占用大约百分之一。
- 伴随高磁盘输出率,filemon 命令显示了编写程序占用大约百分之五。
监视磁盘 I/O 的总结
一般来说,高的 % iowait
表明系统存在一个应用程序问题、缺少内存问题或低效的 I/O 子系统配置。例如,应用程序的问题可能是由于许多 I/O
请求,而不是处理许多数据。理解 I/O 瓶颈并且要清楚解决瓶颈问题的关键在于提高 I/O
子系统的效率。磁盘的灵敏度可以以几种方式出现,并具有不同的解决方法。一些典型的解决方案可能包括:
- 限制在特定的物理磁盘上活动逻辑卷和文件系统的数目。该方法是为了在所有的物理磁盘驱动器中平衡文件 I/O。
- 在多个物理磁盘间展开逻辑卷。该方法在当有一些不同的文件被存取时特别有用。
- 为一个卷组创建多个 Journaled 文件系统(JFS)日志并且把它们分配到特定的文件系统中(最好在快速写高速缓存驱动器中)。这对应用程序创建、删除或者修改大量文件特别是临时文件来说十分有益。
- 如果 iostat 命令的输出结果表明您的负载的 I/O
活动没有被均衡地分配到系统磁盘驱动器中,并且一个或多个磁盘驱动器的使用率经常在 70-80
之间或更高,您就得考虑重组文件系统,例如备份和恢复文件系统以便减少碎片。碎片将引起驱动器过多地搜索并且可能产生大部分响应时间过长。 - 如果很大,I/O 增强的后台作业将涉及和相应时间交互,您可能希望激活 I/O 调步。
- 如果有迹象表明一小部分文件被一次又一次地读取,您可以考虑附加的实存是否允许那些文件更加有效地缓存。
- 如果负载的存取模式是随机占主导地位,您可能要考虑增加磁盘并把按那些随机存取的文件分布到更多的磁盘中。
- 如果负载的存取模式是顺序占主导地位并且涉及多个磁盘驱动器,您可能要考虑增加一个或多个磁盘适配器。您也可以适当地考虑构建一个条带状逻辑卷来适应大型并且性能关键的顺序文件。
- 使用快速写高速缓存设备。
- 使用异步 I/O。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/9663/showart_481164.html |
|