PowerPath AIX : Les applications se bloquent et se LVM_IO_FAIL avec un CODE D’ERREUR TEL QUE DÉFINI DANS sys/errno.h 22 (EINVAL)
Summary: Dans une configuration NPIV avec deux adaptateurs HBA virtuels, lorsqu’un adaptateur HBA virtuel tombe en panne et bien qu’il ne reste qu’un seul chemin pour les E/S, LVM_IO_FAIL sont consignées dans errpr avec le CODE D’ERREUR TEL QUE DÉFINI DANS sys/errno.h défini sur 22 (EINVAL). En raison de ces erreurs LVM, l’application qui utilise le volume se bloque. Le problème peut également se produire dans un environnement non NPIV. ...
Symptoms
Perte d’un chemin
Environnement:
Dell Software : PowerPath for AIX (n’importe quelle version)
Dans une configuration à plusieurs chemins gérée par PowerPath, lorsqu’un chemin tombe en panne et bien que d’autres chemins soient disponibles, l’application tombe en panne. Et LVM_IO_FAIL avec « CODE D’ERREUR TEL QUE DÉFINI DANS sys/errno.h » défini sur 22 sont enregistrées.
Décodées avec « summ », les erreurs s’affichent comme suit :
107769 Apr 12 08:57:21 LVDD P LVM_IO_FAIL LV 8000002C00000003 PV 800000250000001A Block 20016620 EINVAL
(les LVM_IO_FAIL réelles résultant d’erreurs sur tous les chemins sont normalement associées à errno 5 (EIO) ... ce qui n’est pas le cas ici)
LABEL: LVM_IO_FAIL IDENTIFIER: E86653C3 Date/Time: Sun Apr 12 10:09:28 2020 Sequence Number: 108111 Machine Id: 0XXXXXXXXXXX Node Id: snode1 Class: H Type: PERM WPAR: Global Resource Name: LVDD Resource Class: NONE Resource Type: NONE Location: Description I/O ERROR DETECTED BY LVM Probable Causes POWER, DRIVE, ADAPTER, OR CABLE FAILURE Recommended Actions RUN DIAGNOSTICS AGAINST THE FAILING DEVICE Detail Data PHYSICAL VOLUME DEVICE MAJOR/MINOR 8000 0025 0000 0029 ERROR CODE AS DEFINED IN sys/errno.h 22 BLOCK NUMBER 392149792 LOGICAL VOLUME DEVICE MAJOR/MINOR 8000 002D 0000 0001 PHYSICAL BUFFER TRANSACTION TIME 0 RESIDUAL COUNT 1048576 NUMBER OF BLOCKS 1048576 I/O TYPE USER DATA SENSE DATA 0000 0000 0002 EBF7 00F6 D020 0000 4C00 0000 013D 10F0 F4AD 00F6 D020 3831 80BE 0000 0000 0000 0000
Cause
Cette erreur est générée lorsque la mémoire tampon d’E/S en amont (FS/LVM) n’est pas transférée vers le pilote de disque. (ici PowerPath - mais le problème pouvait également être observé dans un environnement MPIO) hdiskpower).
En termes IBM : cette erreur d’E/S LVM (EINVAL) est signalée lorsque le PCM (powerpath) ne peut pas traiter la demande d’E/S du LVM car il peut y avoir une incompatibilité de la taille VG LTG (tampon d’E/S LVM) avec la taille de l’max_transfer disque ou l’adaptateur max_xfer_size (NPIV ici).
Lorsque le groupe de pistes logiques (LTG) est supérieur à la taille du max_transfer du pilote de disque, les E/S ne peuvent pas être traitées et un LVM_IO_FAIL est généré avec erno défini sur 22 (EINVAL)
Dans notre cas, nous avions (les données privées des clients ont été modifiées) :
VOLUME GROUP: vgdata1 VG IDENTIFIER: 00f6d02000004c0000000145a924a9d9 VG STATE: active PP SIZE: 256 megabyte(s) VG PERMISSION: read/write TOTAL PPs: 36387 (9315072 megabytes) MAX LVs: 512 FREE PPs: 746 (190976 megabytes) LVs: 3 USED PPs: 35641 (9124096 megabytes) OPEN LVs: 3 QUORUM: 7 (Enabled) TOTAL PVs: 13 VG DESCRIPTORS: 13 STALE PVs: 0 STALE PPs: 0 ACTIVE PVs: 13 AUTO ON: yes MAX PPs per VG: 127000 MAX PPs per PV: 5080 MAX PVs: 25 LTG size (Dynamic): 1024 kilobyte(s) AUTO SYNC: no HOT SPARE: no BB POLICY: relocatable PV RESTRICTION: none INFINITE RETRY: no DISK BLOCK SIZE: 512 CRITICAL VG: no FS SYNC OPTION: no CRITICAL PVs: no
et
# lsattr -El hdisk25 PR_key_value none Persistant Reserve Key Value True clr_q yes Device CLEARS its Queue on error True location Location Label True+ lun_id 0x0 Logical Unit Number ID False lun_reset_spt yes FC Forced Open LUN True max_coalesce 0x100000 Maximum Coalesce Size True max_retries 5 Maximum Number of Retries True max_transfer 0x40000 Maximum TRANSFER Size True node_name 0x5000144041111111 FC Node Name False pvid none Physical volume identifier False q_err no Use QERR bit True q_type simple Queue TYPE True queue_depth 32 Queue DEPTH True+ reassign_to 120 REASSIGN time out value True reserve_policy no_reserve Reserve Policy True reset_delay 0 Reset Delay True rw_timeout 30 READ/WRITE time out value True scsi_id 0x72ff40 SCSI ID False start_timeout 60 START UNIT time out value True ww_name 0xc001448111111111 FC World Wide Name False
Ici, nous avons max_transfer = 0x40000 (256 Ko) < LTG (1024 Ko) (0x100000) .. à l’origine du problème.
Dans la configuration, certains hdisks avaient été définis avec « max_transfer » sur 0x100000 et d’autres avaient été définis sur 0x40000 (probablement généré avec différentes versions ODM). Si tous les chemins étaient disponibles, il y avait toujours un des hdisks de chaque hdiskpower avec max_transfer défini sur 0x100000 et les E/S pouvaient être terminées. Mais lorsque ce hdisk n’était plus utilisable, seuls les disques avec max_transfer réglés sur 0x40000 étaient accessibles... à l’origine du problème.
Resolution
Pour résoudre le problème, l’attribut « max_transfer » du hdisk doit être défini sur une valeur supérieure ou égale à la taille LTG. Dans notre cas où LTG = 1024 kB, les opérations suivantes ont été exécutées pour résoudre le problème :
# for i in `lsdev -Cc disk |grep -i hdiskp |awk '{print $1}'`
do
chdev -l $i -a max_transfer=0x100000 -P
done
# for i in `lsdev -Cc disk |grep -i EMC |awk '{print $1}'`
do
chdev -l $i -a max_transfer=0x100000 -P
done
# reboot
Additional Information
Cet article de la base de connaissances ne s’applique pas aux LVM_IO_FAIL dont le paramètre errno est défini sur 5 (EIO)