Este post es una continuación de las funciones asíncronas de entrada/salida en Linux.
Oracle utiliza las funciones asíncronas disponibles a través del sistema operativo o bien las propias -cuando realiza accesos a capas propietarias como son SNTT, OCFS, etc.-, y debido a su instrumentación, que dicho sea de paso considero a Oracle uno de los mejores códigos instrumentados al día de hoy, encapsula en funciones propias las disponibles en el sistema operativo. A menudo encontramos referencias a estas funciones en algún trace, o bien directamente en las librerías y archivos binarios de la aplicación.
¿Cómo encontrar la primer referencia para una librería como ésta sobre la cual no existe al día de hoy información en los manuales? (con toda razón porque es información interna del software y que no tiene por qué exponerse). Una búsqueda rápida en la vista v$event_name nos da detalles sobre el evento de E/S asíncrono en disco
EVENT# NAME
---------- ----------------------------------------------------------------
10 ksfd: async disk IO
A partir de esa referencia podemos buscar en el código de Oracle para buscar el resto de las funciones asíncronas.
En el caso de Linux las funciones de acceso asíncrono están en la librería libaio, no así para Oracle donde todas las funciones de acceso a disco están en la librería ksfd (Kernel Service Direct File), algunas de ellas son:
ksfdcre - crea un archivo
ksfdopn - abre un archivo
ksfdreopn -abre y lee un archivo
ksfdropn - lee bloques de un archivo
ksfdcopn - cierra un archivo
ksfdiopending - cancela la ejecución de las operaciones pendientes
ksfddel - elimina un archivo
ksfdrsz - cambia el tamaño de un archivo
En cuanto a las funciones asíncronas tenemos
ksfdwtio - encola una escritura asíncrona para su ejecución, define parámetros de tiempo máximo de ejecución antes de considerar la operación con error
ksfdsubmit - solicita la ejecución de una operación a un proceso esclavo
ksfdcme - solicita el código de error de una operación asignada a un proceso esclavo
ksfdsaiolmt - define los parámetros para definir los límites a actividades paralelizadas
ksfdfchkaio - solicita el código de retorno de una operación asíncrona
Me pareció interesante no encontrar referencia a funciones asíncronas de lectura, cosa que es relativamente lógica dado que no tiene sentido suponer que se ha leído cierto bloque de datos y hacerlo disponible a otros procesos cuando en realidad aún no ha sido leído del disco.
Existe también una librería ksfq que aparamentemente significa Kernel Service Queue File.
Considero de mucha utilidad conocer las funciones asíncronas para actividades de identificación de problemas a bajo nivel, sobre todo en ambientes que involucren paralelismo y clusters aunque también son útiles en ambientes estándar.