8.1 I/O
La commande aioo est apparue en AIX 5.3 TL05. Elle permet de contrôler la configuration des Asynchronous I/O sur le système.
{op}@bemi13 # aioo -a minservers = 21 maxservers = 60 maxreqs = 16384 fsfastpath = 0
Ou,
# lsattr -El aio0 autoconfig available STATE to be configured at system restart True fastpath enable State of fast path True kprocprio 39 Server PRIORITY True maxreqs 16384 Maximum number of REQUESTS True maxservers 60 MAXIMUM number of servers per cpu True minservers 20 MINIMUM number of servers True
Attention, la commande n'existe pas en AIX 6.1, il faut utiliser ioo -a
(root@yvai2080) # ioo -a aio_active = 1 aio_maxreqs = 65536 aio_maxservers = 30 aio_minservers = 3 aio_server_inactivity = 300 j2_atimeUpdateSymlink = 0 j2_dynamicBufferPreallocation = 16 j2_inodeCacheSize = 400 j2_maxPageReadAhead = 128 j2_maxRandomWrite = 0 j2_metadataCacheSize = 400 j2_minPageReadAhead = 2 j2_nPagesPerWriteBehindCluster = 32 j2_nRandomCluster = 0 j2_syncPageCount = 0 j2_syncPageLimit = 16 lvm_bufcnt = 32 maxpgahead = 8 maxrandwrt = 0 numclust = 1 numfsbufs = 1200 pd_npages = 65536 posix_aio_active = 0 posix_aio_maxreqs = 65536 posix_aio_maxservers = 30 posix_aio_minservers = 3 posix_aio_server_inactivity = 300
On voit les paramètres classiques correspondant aux nombre d' aioserver démarrés par défaut sur chaque processeur (minservers), le nombre maximum d'aioserver par processeur (maxservers) et le nombre de requètes que chaque aioserver peut traiter (maxreqs).
On peut compter le nombre d'aioserver démarrés avec la commande pstat :
# pstat -a|grep aio 48 a 30098 1 30098 0 0 1 aioserver 55 a 3708a 1 3708a 0 0 1 aioserver 56 a 38088 1 38088 0 0 1 aioserver 60 a 3c096 1 3c096 0 0 1 aioserver 62 a 3e096 1 3e096 0 0 1 aioserver 72 a 48096 1 48096 0 0 1 aioserver 74 a 4a098 1 4a098 0 0 1 aioserver 78 a 4e09c 1 4e09c 0 0 1 aioserver 79 a 4f09e 1 4f09e 0 0 1 aioserver ...
Il suffit de compter le nombre d'aioserver démarré puis de le diviser par le nombre de processeurs logiques (si le SMT est activé) pour savoir où l'on se situe dans le paramètrage. Les aioserver sont des processus kernel, on peut donc aussi les lister avec la commande ps aux.
En plus de tout cela, on découvre un nouveau paramètre : fsfastpath. Il permet d'activer une implémentation où les I/O asynchrones sont directement adressés au driver sans passer par les processus aioserver . Cette implémentation est prévue pour les filesystems JFS2 en Concurrent I/O.
Il suffit de passer ce paramètre à 1 pour en profiter car elle n'est pas activée par défaut.
# aioo -o fsfastpath=1
En théorie, on gagne en performance au niveau cpu en évitant des context switchs dûe au passage par les aioserver et en mémoire comme il n'y a plus besoin d'allouer de la mémoire pour ces process. En pratique, et en ayant tester ce paramètre sur des serveurs réels(recette et production donc difficile à monitorer de manière précise), je n'ai pas remarqué de différences significatives ce qui est déjà pas mal :-) . Avec ce paramètre, il est inutile d'effectuer un tuning fin des aioserver et on ne risque pas de problèmes de performance comme lorsque le nombre d'aioserver est insuffisant.
Dernier commentaire sur la commande aioo, elle n'est pas encore bien implémentée dans AIX dans le sens où son paramètrage n'est pas conservée lors d'un reboot (pas d'entrées ajoutées dans les fichiers du répertoire /etc/tunables). Il faut donc ajouter une entrée dans /etc/inittab pour que le paramètre soit pris en compte au reboot.
Et pour la fin l'information la plus importante à mes yeux, IBM maintient un redbook intégrant les nouvelles fonctionnalités apportées à AIX 5.3(uniquement lors des TL impaires). Il s'agit du redbook sg247414 nommé "AIX 5L Differences guide Version 5.3 Addendum". Il ne se contente pas de lister les nouvelles fonctionnalités mais les décrit aussi. Vraiment très sympatique.
PS: la commande existe aussi en AIX 5.2 TL9 mais sans le paramètre fsfastpath.