文件同步性能调整
有多种方法可增强文件同步。
JFS 的无序文件 I/O 会一直存储在内存中直到满足一定条件:
- 空闲列表缩小到 minfree,且必须进行页替换。
- syncd 守护程序按固定调度间隔刷新页。
- 执行了 sync 命令。
- 随机后写在达到随机后写阈值后清空脏页面。
如果在以上的任一条件满足前已存储了许多页,那么在 syncd 守护程序 进行刷新时,会获得一个索引节点锁并保持到所有的脏页都被写入磁盘。 在这段时间里, 任何试图访问此文件的线程会由于无法获得索引节点锁而被阻塞。 还会针对文件阻塞 fuser 命令,因为 fuser 命令需要索引节点锁定才能提供必需的信息。 请记住, syncd 守护程序当前会清空文件的所有脏页,但一次清空一个文件。 在一个拥有 大量内存并同时有大量页需要修改的系统中,syncd 守护程序 刷新页时 I/O 可能达到高峰值。
AIX® 具有名为 sync_release_ilock的可调选项。 带有 -o sync_release_ilock=1 选项的 ioo 命令允许在清空该文件的脏页时释放索引节点锁定。 这一选项使得在调用 sync() 的过程 中访问该文件有更好的响应。
阻塞效果也可通过在 syncd 守护程序中提高同步频率 使之最小化。 在 /sbin/rc.boot 启动 syncd 守护程序的地方,更改该 /sbin/rc.boot。 然后重新引导系统使之生效。 对于当前系统,终止 syncd 守护程序并使用新的秒数值将其重新启动。
调整此行为的第三种方法是使用 ioo 命令开启随机后写 (请参阅 顺序和随机后写性能调整)。
JFS2 同步可调参数
j2_syncPageCount:限制在文件的一次传递中调度同步写入的已修改页数。 当设置此可调参数时,文件系统写入指定数目的页,而不阻塞其余文件的 I/O。 写入操作重复同步调用,直到写入所有已修改页。j2_syncPageLimit:达到阈值时,覆盖j2_syncPageCount参数。 使用此参数来确保对文件完成同步操作。 可调参数以标准方法进行维护。
通过使用 ioo 命令来处理可调参数。
j2_syncPageCount 和 j2_syncPageLimit 可调参数添加到 ioo 命令控制的值列表。
–o 标志显示或更改值,并使用 –h 标志查看帮助选项。# ioo –h j2_syncPageCount设置在单个操作中同步系统调用写入磁盘的文件最大已修改页数。值: 缺省值:0 范围:0-65536
类型: 动态
单元:4 KB 页
可调参数:运行使用文件系统高速缓存且执行大量随机写入的应用程序时,需要调整这个设置,以避免同步操作期间耗时过长的应用程序延迟。 值的范围必须是 256 到 1024。 缺省值是零,导致在单个调用中写入所有脏页的正常同步行为。 如果将可调参数设置为小值,那么它导致在应用程序响应时间中,更长的同步时间和更短的延迟。 如果设置更大的值,那么响应时间延迟更长,且同步时间更短。
# ioo –h j2_syncPageLimit设置同步系统调用使用 j2_syncPageCount 的最大次数,以限制写入的页来改进同步操作性能。值: 缺省值:256 范围:16-65536
类型: 动态
单位: 数字
可调参数:j2_syncPageCount 已设置且必须增加时,如果 j2_syncPageCount 更改的效果不足,那么设置。 可接受值的范围是 250 到 8000。 如果 j2_syncPageCount 是 0,那么 j2_syncPageLimit 无效。
当 j2_syncPageCount 已设置且必须增加时必须设置此调用参数,以便 j2_syncPageCount 更改的效果不会减少应用程序响应时间。
值的范围必须是 1 到 8000。 这些可调参数的最佳值依赖于内存大小和 I/O 带宽。 中性起始点是将这两个可调参数都设置为 256。
JFS2 同步周期和并行
文件系统同步由同步守护程序 (syncd) 管理。 使用 JFS2 可调参数允许文件系统在不使用 syncd的情况下处理同步。
JFS2 同步处理程序散布同步进程,这样,高速缓存的所有数据不会同时写入磁盘。 一次对单个文件系统执行同步。 调度每个文件系统在前一项操作结束之后才启动下一项同步操作。 当必须处理多个文件系统时,您还可以增加用于处理同步操作的线程数。
使用下列可调参数进行 JFS2 文件系统同步:
- j2_syncByVFS:
- 指定使用 JFS2 同步处理程序,并设置每个文件系统的同步操作之间的时间间隔。
- j2_syncConcurrency:
- 设置用于处理文件系统同步的线程数。 此值指示必须同时对其执行同步操作的文件系统数。 只有一个同步线程对单个文件系统执行同步操作。
ioo 命令用于管理 I/O 可调参数。 有关更多信息,请参阅 ioo 命令的文档。
# ioo –h j2_syncByVFS
用途:指定两次系统调用(以同步 JFS2 文件系统)之间等待的秒数。 此值将取代 syncd 命令所指定的值。
值:缺省值:0,范围:0-86400。
类型: 动态。
单位: 秒。
调整:此值指示同步进程的两次迭代之间的秒数。 在启动对 JFS2 文件系统调用 syncvfs 子例程之前,由 j2_syncByVFS 可调参数指定的 JFS2 同步处理程序截止时间。 值为 0 指示应使用正常 syncd 处理。 非零值将覆盖在 syncd 命令中指定的时间,并导致使用特定于 JFS2 的文件同步处理程序。
# ioo –h j2_syncConcurrency
用途:设置要用于 JFS2 同步操作的线程数。
值:缺省值:1,范围:1-128。
类型: 动态。
单位: 数字。
调整:同步守护程序同时对 j2_syncConcurrency 可调参数所设置的文件系统数启动同步操作。 仅当 j2_syncByVFS 可调参数为非零值时,此值才有效。