异步磁盘 I/O 性能调整
如果应用程序进行同步 I/O 操作,它必须等待 I/O 完成后才能继续执行。 相反,异步 I/O 操作在后台运行,不会阻塞用户应用程序。 这就改进了性能,因为 I/O 操作和处理中的应用程序可以同时运行。 许多应用程序,诸如数据库和文件服务器,利用了重叠处理和重叠 I/O 的能力。
应用程序可以使用 aio_read (), aio_write ()或 lio_listio () 子例程 (或其 64 位对等例程) 来执行异步磁盘 I/O。 一旦请求已排队,控制就从子例程返回到应用程序。 当磁盘操作被执行时,应用程序可以继续处理。
为了管理异步 I/O,每一个异步 I/O 请求在应用程序地址空间有一个相应的控制块。 该控制块包含了请求的控制和状态信息。 在 I/O 操作完成后可以被再次使用。
用户应用程序可以决定如何在 I/O 操作按照以下方式完成时得到通知。
- 应用程序可以轮询 I/O 操作的状态。
- 当 I/O 操作完成后系统可以异步通知应用程序。
- 应用程序可以阻塞,直到 I/O 操作完成。
单个内核进程或 kproc 处理每个 I/O,并且通常 kproc 不能再处理来自该队列的请求,直到 I/O 已经完成。 minservers 可调参数的缺省值为 3,而 maxservers 可调参数的缺省值为 30。 maxservers 值是每个处理器的异步 I/O kproc 的数目。 要获取在 AIX® 系统上运行的最大异步 I/O 进程数,请将 maxservers 值与当前正在运行的处理器数相乘。
所有 AIO 可调参数都具有可使用 ioo 命令查看的当前值,缺省值,最小值和最大值。 ioo 命令只能更改当前值。 其他三个值是固定的,用来告诉用户可调参数的范围。 可调参数的当前值可以随时更改,并可以在跨操作系统重新启动时保持固定。 很少运行应用程序的系统可以使用异步 I/O,缺省值通常可以勉强够用。
值得注意的是:minservers 和 maxservers 是每个处理器的可调参数。 这些可调参数是动态的,但是更改这些值不会同步更改系统中可用服务器的数量。 如果增加 minservers 的值,那么服务器的实际数量直接同比增加至并行 I/O 请求的数量。 一旦达到新的 minservers 值,它就成为新的基底。 同样,如果减少 minservers 的数量,那么可用服务器的数量就自然降到因不活动而退出的服务器的级别。 如果异步 I/O 请求数很高,请将 maxservers 值增大到大约为可能存在的同时 I/O 数。 最好保留 minservers 参数为缺省值,因为如果需要,该 AIO 内核扩展将生成其他服务器。
maxservers 和 minservers 的设置在这种情况下没有效果。通过查看 AIO 服务器的处理器利用率,如果利用率在它们中间均匀的分配,那就意味着它们都在使用中;在这种情况下,您可能要增加它们的数量。 要按名称查看 AIO 服务器,运行 pstat -a 命令。 运行 ps -k 命令查看名为 kproc 的 AIO 服务器。
在异步磁盘 I/O 的性能很重要并且卷请求很高,而你又没有一个适当的同步 I/O 数量的环境下,建议将 maxservers 至少设置为 10(异步存储磁盘的数)。
minservers 或 maxservers 可调参数进行更改。 minservers 可调参数值可以设置为某一级别,这样的话可以获取跨平均工作量的最佳性能。minservers 可调参数的值不得超过 maxservers 可调参数的值。
有关异步 I/O 调整值的更多信息,请参阅 更改异步 I/O 的可调值。