Améliorer les performances des applications MPI qui utilisent PSM3

Cette page décrit les paramètres de configuration PSM3 que nous vous recommandons d'utiliser avec les applications MPI exécutées sur des instances de calcul H4D et Cloud RDMA.

Pour en savoir plus sur tous les paramètres de configuration PSM3 disponibles, consultez le guide de l'utilisateur d'Intel Ethernet Fabric Suite Host Software.

Recommandations pour les applications avec des flux de données en rafale ou un trafic UD important

Les applications qui subissent des pics de trafic soudains ou qui dépendent fortement du mode UD (Unreliable Datagram) peuvent surcharger l'interface réseau, ce qui entraîne des pertes de paquets à la source.

  • Solution : configurez le système de contre-pression basé sur les crédits pour réguler les rafales de transmission et éviter les pertes de paquets au niveau de la couche de transport. Une instance Compute Engine H4D fournit 256 crédits au total. Nous vous recommandons d'allouer à chaque processeur virtuel un minimum de 1 crédit fixe, et de placer toute capacité restante dans un pool partagé.
  • Configuration recommandée (exemple pour 192 rangs par nœud) : pour une opération avec 192 rangs par nœud, si chaque processeur virtuel reçoit 1 crédit fixe, le pool partagé sera de 256 - 192 = 64.

    IRDMA_SHARED_UD_CREDITS=64
    IRDMA_TRANSPARENT_UD_QD_OVERRIDE=1
    

Si vous augmentez le nombre total de crédits au-delà des limites recommandées, vous risquez de perdre des transmissions à la source. Bien que la sursouscription (définir un nombre total de crédits supérieur à celui disponible) puisse améliorer les performances des charges de travail avec des modèles de trafic stables et à faible densité, elle dégrade généralement les performances des charges de travail caractérisées par des rafales soudaines ou un trafic UD important.

Les variables d'environnement que vous pouvez utiliser pour ajuster les performances de Cloud RDMA sont les suivantes :

  • IRDMA_SHARED_UD_CREDITS : spécifie la taille d'un pool global de crédits UD disponibles pour tous les processus sur un seul nœud. Avec une valeur de 64, cela signifie qu'il existe une réserve partagée de 64 crédits que n'importe quel processus peut potentiellement utiliser.
  • IRDMA_TRANSPARENT_UD_QD_OVERRIDE : limite la profondeur de la file d'attente pour les paires de files d'attente (QP) qui utilisent UD dans le pilote irdma. Lorsqu'il est défini sur 1, il fonctionne avec IRDMA_SHARED_UD_CREDITS pour appliquer une contre-pression au niveau de la couche de transport et éviter les dépassements de files d'attente de transmission en cas de charges multiprocessus importantes.

Recommandations pour les applications à haute fiabilité ou à forte demande de mémoire

Pour garantir la fiabilité des paquets UD côté récepteur, vos applications RDMA doivent allouer suffisamment de tampons de réception et laisser des emplacements disponibles dans la file d'attente de finalisation (CQ).

  • Recommandation standard pour une haute fiabilité : utilisez les variables d’environnement suivantes pour spécifier des profondeurs de file d’attente plus élevées afin d’éviter au mieux les pertes de paquets UD dans la file d’attente de réception (RX).

    PSM3_NUM_RECV_WQES=32767
    PSM3_NUM_RECV_CQES=65536
    
  • Exception pour les exigences de mémoire élevées : si votre application rencontre des problèmes de mémoire insuffisante (OOM), réduisez la taille des files d'attente, mais conservez la même proportion entre les deux valeurs.

    Les applications telles que High Performance Conjugate Gradients (HPCG) ont des besoins en mémoire considérables. L'utilisation des paramètres de la recommandation standard pour une haute fiabilité peut entraîner des erreurs OOM. PSM3_NUM_RECV_WQES détermine le nombre d'entrées de file d'attente de travail (WQE) RX et de tampons de rebond actifs alloués par point de terminaison local. Des valeurs plus élevées entraînent une surcharge de mémoire plus importante.

Les variables d'environnement que vous pouvez utiliser pour améliorer la fiabilité ou l'utilisation de la mémoire sont les suivantes :

  • PSM3_NUM_RECV_WQES: définit le nombre de WQE RX à allouer. La taille du QP UD est de PSM3_NUM_RECV_WQES + 1032 WQEs. Ce paramètre définit également le nombre de tampons de rebond actifs de réception UD (chacun de taille PSM3_MTU) alloués pour chaque point de terminaison local.

  • PSM3_NUM_RECV_CQES: contrôle le nombre d'entrées de file d'attente de finalisation (CQE) pour les opérations de réception. Ce paramètre permet de garantir la fiabilité des paquets UD côté récepteur en s'assurant que des emplacements sont toujours disponibles dans la file d'attente de finalisation. Une profondeur de file d'attente plus élevée, par exemple 65 536, permet d'éviter les pertes de paquets UD RX, mais utilise de la mémoire et peut entraîner des erreurs OOM pour les applications gourmandes en mémoire.

Recommandations pour les applications qui ne réutilisent pas les tampons

Certaines applications, telles que High-performance LINPACK (HPL), allouent et libèrent fréquemment des tampons de communication temporaires au lieu de les conserver et de les réutiliser. Ce cycle continu de demande et de libération de mémoire oblige le système à enregistrer et à désenregistrer constamment des pages de mémoire, ce qui crée un goulot d'étranglement important au niveau des performances.

  • Solution : utilisez un allocateur de mémoire personnalisé tel que jemalloc comme solution de contournement. jemalloc est un allocateur de mémoire (malloc) hautes performances à usage général conçu pour mettre l'accent sur la mise à l'échelle de la simultanéité et éviter la fragmentation de la mémoire. En forçant le recyclage efficace des grands tampons de communication (supérieurs à 128 Ko), cette solution contourne les cycles de réallocation coûteux du noyau et restaure les performances de PSM3.

  • Configuration recommandée :

    1. Installez jemalloc. Par exemple, sur Rocky Linux, vous pouvez exécuter les commandes suivantes qui utilisent les packages supplémentaires pour le dépôt Enterprise Linux (EPEL) :

      sudo dnf install epel-release
      sudo dnf install jemalloc
      
    2. Préchargez jemalloc et appliquez des limites de cache optimisées avant d'exécuter votre application :

      LD_PRELOAD="/usr/lib64/libjemalloc.so.2"
      export MALLOC_CONF="dirty_decay_ms:-1,muzzy_decay_ms:-1,lg_tcache_max:26"
      

La commande de configuration utilise les paramètres suivants :

  • LD_PRELOAD: spécifie les bibliothèques partagées à charger avant de démarrer un processus.
  • MALLOC_CONF : configure le comportement d'allocation de mémoire pour jemalloc.
  • dirty_decay_ms:-1 et muzzy_decay_ms:-1 : indique à jemalloc de ne jamais renvoyer de mémoire inutilisée au système d'exploitation. Cela permet de conserver les pages enregistrées de manière permanente pour une réutilisation immédiate.
  • lg_tcache_max:26: augmente la limite du cache de la mémoire par thread à 64 Mo, ce qui garantit que les grands tampons de communication sont mis en cache de manière agressive.

Étape suivante