Sous-système d'E-S asynchrone

Entrée / sortie synchrone (E-S) se produit pendant que vous attendez. Le traitement des applications ne peut pas se poursuivre tant que l'opération d'E-S n'est pas terminée. En revanche, les opérations E-S asynchrones (AIO) s'exécutent en arrière-plan et ne bloquant pas les applications utilisateur. Cela améliore les performances, car les opérations d'E-S et le traitement des applications peuvent s'exécuter simultanément.

De nombreuses applications, telles que les bases de données et les serveurs de fichiers, tirent parti de la capacité de chevauchement de traitement et d'entrée-sortie. Ces opérations AIO utilisent différents types de périphériques et de fichiers. En outre, plusieurs opérations AIO peuvent être exécutées simultanément sur un ou plusieurs périphériques ou fichiers. L'utilisation d'AIO améliore généralement le débit d'E-S pour ces types d'applications. Toutefois, la performance réelle dépend en partie du nombre de demandes d'E-S simultanées que l'application peut émettre simultanément. Lorsque le chemin d'accès rapide AIO n'est pas utilisé, la performance dépend également du nombre de processus du serveur AIO qui gèrent les demandes d'entrée-sortie. Pour plus d'informations sur le raccourci, voir Identification du nombre de serveurs AIO actuellement utilisés.

Chaque demande AIO dispose d'un bloc de contrôle correspondant dans l'espace adresse de l'application. Lorsqu'une requête AIO est effectuée, un descripteur est établi dans le bloc de contrôle. Ce descripteur est utilisé pour extraire le statut et les valeurs de retour de la demande.

Les applications utilisent les sous-routines Aio_lu et Aio_écriture pour effectuer les E-S. Le contrôle revient à l'application à partir de la sous-routine, dès que la demande a été mise en file d'attente. L'application peut ensuite poursuivre le traitement pendant l'exécution de l'opération sur le disque.

Un processus de noyau (kproc), appelé serveur AIO (AIOS), est en charge de chaque demande à partir du moment où il est retiré de la file d'attente jusqu'à ce qu'il soit terminé. Le nombre de serveurs limite le nombre d'opérations d'E-S sur disque pouvant être en cours simultanément dans le système.

La valeur par défaut de la variable minservers est 3, et celle de la variable maxservers est 30. Dans les systèmes qui exécutent rarement des applications qui utilisent AIO, cela est généralement suffisant. Pour les environnements comportant de nombreuses unités de disque et des applications clés qui utilisent AIO, les valeurs par défaut peuvent être trop faibles. Le résultat d'une déficience des serveurs est que les entrées-sorties de disque semblent beaucoup plus lentes qu'elles ne devraient l'être. Non seulement les demandes passent des durées trop longues dans la file d'attente, mais le faible rapport entre les serveurs et les unités de disque signifie que les algorithmes de recherche-optimisation ont trop peu de demandes de travail pour chaque unité.

Remarque: AIO ne fonctionne pas si le bloc de contrôle ou la mémoire tampon est créé à l'aide de mmap (segments de mappage).

Il existe deux sous-systèmes AIO. L'objet AIX® AIO d'origine, désormais appelé LEGACY AIO, possède les mêmes noms de fonction que l'objet POSIX AIO compatible avec l'interface de système d'exploitation portable (POSIX). Les différences majeures entre les deux impliquent la transmission de paramètres différents. Les deux sous-systèmes sont définis dans le fichier /usr/include/sys/aio.h . La macro _AIO_AIX_SOURCE permet de distinguer les deux versions.

Remarque: La macro _AIO_AIX_SOURCE utilisée dans le fichier /usr/include/sys/aio.h doit être définie lors de l'utilisation de ce fichier pour compiler une application AIO avec les définitions de fonction LEGACY AIO. La compilation par défaut à l'aide du fichier aio.h est destinée à une application avec les nouvelles définitions POSIX AIO. Pour utiliser les définitions de fonction AIO LEGACY, procédez comme suit dans le fichier source:

#define _AIO_AIX_SOURCE 
#include <sys/aio.h>
Ou lors de la compilation sur la ligne de commande, entrez:

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

Pour chaque fonction AIO, il existe une définition existante et POSIX . LEGACY AIO dispose d'une fonction aio_nwait supplémentaire, qui, bien qu'elle ne fasse pas partie des définitions POSIX , a été incluse dans POSIX AIO pour aider ceux qui souhaitent porter des définitions LEGACY vers POSIX . POSIX AIO comporte une fonction aio_fsync supplémentaire, qui n'est pas incluse dans LEGACY AIO. Pour obtenir la liste de ces fonctions, voir Sous-routines d'E-S asynchrones.