文件系统性能调优

2008-04-09 03:58:12来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

1、顺序读性能调优


VMM 的顺序预读功能能够改进需要顺序访问大文件的程序的性能。
下面的插图展示了典型的预读的情况。
顺序预读的例子. 插图显示了用一行块模拟一分段磁道的文件页号。这些块段按 0,1 到 3,4 到 7,8 到 15 以及 16 到 23 编号。顺序预读的步骤可以在紧接着插图后的文本中找到。

在这个例子中,minpgahead 的值为 2,maxpgahead 的值为 8 (缺省值)。程序顺序处理文件。图中只显示了对预读机制有重要作用的数据引用(按从 A 到 F 的顺序标出)。这些步骤是:
A
第一次文件访问读取文件的第一页(第 0 页)。在这个时候,VMM 并不知道这次访问是随机还是顺序访问。
B
当程序访问下一页(第 1 页)的首字节而不存在对文件其它页的插入访问时,VMM 推断出该程序正在进行顺序访问。于是将页提前量设为 minpgahead (2) 并且调度读取额外的页(第二、三页)。这样步骤 B 总共读取了 3 页。
C
当程序访问预读的第一页(第 2 页)的首字节时,VMM 将页提前量加倍到 4 并且调度读取第 4 到 7 页。
D
当程序访问前次预读的第一页(第 4 页)的首字节时,VMM 将页提前量加倍到 8 并且调度读取第 8 到 15 页。
E
当程序访问前次预读的第一页(第 8 页)的首字节时,VMM 决定将页提前量设为 maxpgahead 并且调度读取第 16 到 23 页。
F
VMM 在程序访问前一组预读页的首字节的情况下继续预读 maxpgahead 页直到文件结尾。
一旦程序偏离了顺序访问模式并且不按次序访问了文件中的一页,顺序预读就会终止。当 VMM 检测到程序恢复顺序访问后,页提前量便会恢复到 minpgahead 页。
可在 ioo 命令中使用 -r 和 -R 选项来更改 minpgahead 和 maxpgahead 的值。如果您打算改变这些值,请记住:
该值必须是集合:0、1、2、4、8、16 等中的一个。使用其它值可能会对性能或功能造成不利影响。
o 由于 VMM 的加倍算法,该值应该是 2 的幂。
o 大于 16 的 maxpgahead 值(预读量大于 64 KB)会超出某些磁盘设备驱动程序的能力。在这种情况下,预读的大小会保持在 64 KB。
o 更大的 maxpgahead 值可用于条带状逻辑卷的顺序性能显得至关重要的系统中。
minpgahead 和 maxpgahead 的值都为 0 能有效消除此机制。这会给性能带来负面影响。但是,在 I/O 随机的一些情况下,这可能也有用处,这时 I/O 的大小会使预读算法生效。
对于非条带状文件系统,当 maxpgahead 值为 8 或 16 时,其顺序 I/O 性能会达到可能的最大值。
预读值从 minpgahead 增加到 maxpgahead 的过程很快,对于大多数文件大小来说增大 minpgahead 值都不会带来任何性能的提高。
可以针对 JFS 和增强型 JFS 分别调优顺序预读功能。JFS 的预读页可以通过改变 minpgahead 和 maxpgahead 的值调优,而增强型 JFS 使用 j2_minPageReadAhead 和 j2_maxPageReadAhead。


2、顺序和随机后写性能调优
后写涉及在达到某个阈值后将内存中修改过的页面异步写到磁盘上,而不是等待 syncd 守护程序将页面清空到磁盘上。这被用于限制内存中的脏页数,减少系统开销和最小化磁盘碎片。后写有两种类型:顺序后写和随机后写。

顺序后写
缺省情况下,一个 JFS 文件划分成 16 KB 大小的分区或 4 页。每一个这样的分区被称为一簇。如果该簇中的 4 页都是脏页,那么一旦修改完下一个分区,系统就会调度该簇中的 4 页并将其写入磁盘。如果不具备这一功能,则直到 syncd 守护程序运行前,该页都会留存于内存,导致可能的 I/O 瓶颈和文件碎片。
VMM 用于充当阈值的簇数是可调优的。缺省值是一簇。使用 ioo -o numclust 命令来增加 numclust 参数可以延迟后写。
对于增强型 JFS,ioo -o j2_nPagesPerWriteBehindCluster 命令用来指定每次调度的页数,而不是簇数。增强型 JFS 簇的缺省页数为 32,意味着增强型 JFS 的缺省大小为 128 KB。

随机后写
可能存在一些应用程序执行大量的随机 I/O,即 I/O 模式不满足后写算法的要求,因而导致所有页面驻留在内存中,直到 syncd 守护程序运行为止。如果应用程序在内存中修改了许多页,就有可能在 syncd 守护程序调用 sync() 时向磁盘写入大量页。
后写功能提供了这样一种机制,即当给定文件在内存中的脏页数超过规定阈值后,则会调度所写的后续页面以写到磁盘上。
通过使用 ioo 命令并带有 JFS maxrandwrt 参数可调整此阈值。缺省值为 0,表示随机后写是禁用的。将该值增加到 128 表示一旦文件驻留于内存的页达到 128 页,随后的任何脏页都将被调度写入磁盘。而这些页将在调用 sync() 后刷新。
对于增强型 JFS,ioo 命令选项 j2_nRandomCluster(-z 标志)和 j2_maxRandomWrite(-J 标志)用来调优随机后写。增强型 JFS 的 j2_maxRandomWrite 选项和 JFS 的 maxrandwrt 选项功能相同。即它限定了每个文件可以留在内存中的脏页数。j2_nRandomCluster 选项指定了可以被视为随机的两次连续写入之间的簇数。

3、异步磁盘 I/O 性能调优
如果应用程序进行同步 I/O 操作,它必须等待 I/O 完成后才能继续执行。相反,异步 I/O 操作在后台运行,不会阻塞用户应用程序。这就改进了性能,因为 I/O 操作和处理中的应用程序可以同时运行。许多应用程序,诸如数据库和文件服务器,利用了重叠处理和重叠 I/O 的能力。
应用程序可以使用 aio_read() 命令、aio_write() 或 lio_listio() 子例程(或它们的副本)来执行异步磁盘 I/O。一旦请求被排队,控制权就从子例程返回应用程序。当磁盘操作被执行时,应用程序可以继续处理。
为了管理异步 I/O,每一个异步 I/O 请求在应用程序地址空间有一个相应的控制块。该控制块包含了请求的控制和状态信息。在 I/O 操作完成后可以被再次使用。
在发出了一个异步 I/O 请求,用户应用程序可以决定何时并以何种方式结束 I/O 操作。这些信息在以下三种方式的任何一种中提供:

应用程序可以轮询 I/O 操作的状态。
当 I/O 操作完成后系统可以异步通知应用程序。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:单元测试作业指导书(四)

下一篇:你的网站安全吗?FTP服务器的攻防实战