8.1 I/O

De UnixWiki
Version datée du 9 mai 2011 à 13:18 par Futex (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

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.