顺序读性能调整
VMM 的顺序预读功能可增强顺序访问大文件的程序的性能。
顺序页预读 中描述了 VMM 顺序预读功能。
下面的插图展示了典型的预读的情况。

在这个示例中,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 等中的一个。 使用其他值可能会对性能或功能造成不利影响。
- 由于 VMM 的加倍算法,该值应该是 2 的幂。
- 大于 16 的 maxpgahead 值(预读量大于 64 KB)会超出某些磁盘设备 驱动程序的能力。 在这种情况下,预读的大小会保持在 64 KB。
- 更大的 maxpgahead 值可用于条带状逻辑卷的顺序性能显得至关重要的系统中。
- minpgahead 和 maxpgahead 的值都为 0 能有效消除此机制。 这会给性能带来负面影响。 但是,在 I/O 随机的一些情况下,这可能也有用处,这时 I/O 的大小会使预读算法生效。
- 对于非条带状文件系统,当 maxpgahead 值为 8 或 16 时,其顺序 I/O 性能 会达到可能的最大值。
- 预读值从 minpgahead 增加到 maxpgahead 的过程很快,以至于 对于大多数文件大小而言,增大 minpgahead 并无益处。
- 可以针对 JFS 和增强型 JFS 分别调整顺序预读功能。 JFS 预读页可以通过 minpgahead 和 maxpgahead 进行调整,而 j2_minPageReadAhead 和 j2_maxPageReadAhead 用于增强型 JFS。