Subsistema de E/S asíncrona

Entrada/salida síncrona (E/S) se produce mientras se espera. El proceso de las aplicaciones no puede continuar hasta que se haya completado la operación de E/S. Por el contrario, las operaciones de E/S asíncrona (AIO) se ejecutan en segundo plano y no bloquean las aplicaciones de usuario. Esto mejora el rendimiento, ya que las operaciones de E/S y el proceso de aplicaciones se pueden ejecutar simultáneamente.

Muchas aplicaciones, como las bases de datos y los servidores de archivos, aprovechan la capacidad de solapar el proceso y la E/S. Estas operaciones de AIO utilizan varios tipos de dispositivos y archivos. Además, varias operaciones AIO pueden ejecutarse al mismo tiempo en uno o más dispositivos o archivos. El uso de AIO generalmente mejora el rendimiento de E/S para este tipo de aplicaciones. Sin embargo, el rendimiento real depende en parte del número de solicitudes de E/S simultáneas que la aplicación puede emitir a la vez. Cuando no se utiliza la vía de acceso rápida AIO, el rendimiento también depende de cuántos procesos de servidor AIO que manejan las solicitudes de E/S se están ejecutando. Para obtener más información sobre la vía de acceso rápida, consulte Identificación del número de servidores AIO utilizados actualmente.

Cada solicitud de AIO tiene un bloque de control correspondiente en el espacio de direcciones de la aplicación. Cuando se hace una solicitud de AIO, se establece un asa en el bloque de control. Este manejador se utiliza para recuperar el estado y los valores de retorno de la solicitud.

Las aplicaciones utilizan las subrutinas ao_read y ao_write para realizar la E/S. El control vuelve a la aplicación desde la subrutina, tan pronto como la solicitud se ha puesto en cola. A continuación, la aplicación puede continuar el proceso mientras se realiza la operación de disco.

Un proceso de kernel (kproc), denominado servidor AIO (AIO), está a cargo de cada solicitud desde el momento en que se despega de la cola hasta que se completa. El número de servidores limita el número de operaciones de E/S de disco que pueden estar en curso en el sistema simultáneamente.

El valor predeterminado del ajustable minservers es 3 y el del ajustable maxservers es 30. En sistemas que rara vez ejecutan aplicaciones que utilizan AIO, esto suele ser adecuado. Para entornos con muchas unidades de disco y aplicaciones clave que utilizan AIO, los valores predeterminados pueden ser demasiado bajos. El resultado de una deficiencia de servidores es que la E/S de disco parece mucho más lenta de lo que debería ser. No sólo las solicitudes pasan las longitudes de tiempo desmesuradas en la cola, sino que la baja proporción de servidores en unidades de disco significa que los algoritmos de búsqueda y optimización tienen muy pocas solicitudes de trabajo para cada unidad.

Nota: AIO no funciona si el bloque de control o el almacenamiento intermedio se crea utilizando mmap (segmentos de correlación).

Hay dos subsistemas AIO. El AIO AIX® original, ahora denominado LEGACY AIO, tiene los mismos nombres de función que el AIO POSIX compatible con la interfaz del sistema operativo portátil (POSIX). Las principales diferencias entre los dos implican el paso de parámetros diferentes. Ambos subsistemas se definen en el archivo /usr/include/sys/aio.h . La macro _AIO_AIX_SOURCE se utiliza para distinguir entre las dos versiones.

Nota: La macro _AIO_AIX_SOURCE utilizada en el archivo /usr/include/sys/aio.h debe definirse al utilizar este archivo para compilar una aplicación AIO con las definiciones de función LEGACY AIO. La compilación predeterminada utilizando el archivo aio.h es para una aplicación con las nuevas definiciones AIO POSIX . Para utilizar las definiciones de función LEGACY AIO, haga lo siguiente en el archivo fuente:

#define _AIO_AIX_SOURCE 
#include <sys/aio.h>
o al compilar en la línea de mandatos, escriba lo siguiente:

xlc ... -D_AIO_AIX_SOURCE ... classic_aio_program.c

Para cada función AIO hay una definición heredada y una definición POSIX . LEGACY AIO tiene una función aio_nwait adicional, que aunque no forma parte de las definiciones POSIX , se ha incluido en POSIX AIO para ayudar a aquellos que desean portar de LEGACY a definiciones POSIX . POSIX AIO tiene una función aio_fsync adicional, que no se incluye en LEGACY AIO. Para obtener una lista de estas funciones, consulte Subrutinas de E/S asíncronas.