Mejora el rendimiento de las aplicaciones de MPI que usan PSM3

En esta página, se describen los parámetros de configuración de PSM3 que te recomendamos usar con las aplicaciones de MPI que se ejecutan en instancias de procesamiento H4D y Cloud RDMA.

Para obtener información sobre todos los parámetros de configuración de PSM3 disponibles, consulta la Guía del usuario del software de host de Intel Ethernet Fabric Suite.

Recomendaciones para aplicaciones con flujos de datos irregulares o tráfico UD pesado

Las aplicaciones que experimentan ráfagas repentinas de tráfico o que dependen en gran medida del modo de datagrama no confiable (UD) pueden sobrecargar la interfaz de red, lo que provoca descartes de paquetes en la fuente.

  • Solución: Configura el sistema de contrapresión basado en créditos para regular las ráfagas de transmisión y evitar la pérdida de paquetes en la capa de transporte. Una instancia H4D de Compute Engine proporciona 256 créditos en total. Te recomendamos que asignes a cada CPU virtual un mínimo de 1 crédito fijo y que coloques la capacidad restante en un grupo compartido.
  • Configuración recomendada (ejemplo para 192 rangos por nodo): Para una operación con 192 rangos por nodo, si cada CPU virtual obtiene 1 crédito fijo, el grupo compartido será de 256 - 192 = 64.

    IRDMA_SHARED_UD_CREDITS=64
    IRDMA_TRANSPARENT_UD_QD_OVERRIDE=1
    

Aumentar el recuento total de créditos más allá de los límites recomendados puede provocar descartes de transmisión en la fuente. Si bien la suscripción en exceso (establecer créditos totales más altos que los disponibles) puede mejorar el rendimiento de las cargas de trabajo con patrones de tráfico constantes y de baja densidad, por lo general, degrada el rendimiento de las cargas de trabajo que se caracterizan por ráfagas repentinas o tráfico UD pesado.

Las variables de entorno que puedes usar para ajustar el rendimiento de Cloud RDMA son las siguientes:

  • IRDMA_SHARED_UD_CREDITS: Especifica el tamaño de un grupo global de créditos UD que están disponibles para todos los procesos en un solo nodo. Con un valor de 64, esto significa que hay una reserva compartida de 64 créditos que cualquier proceso puede usar.
  • IRDMA_TRANSPARENT_UD_QD_OVERRIDE: Limita la profundidad de la cola para los pares de colas (QPs) que usan UD en el controlador irdma. Cuando se establece en 1, funciona con IRDMA_SHARED_UD_CREDITS para aplicar contrapresión en la capa de transporte y evitar desbordamientos de la cola de transmisión en cargas pesadas de varios procesos.

Recomendaciones para aplicaciones con alta confiabilidad o requisitos de memoria altos

Para garantizar la confiabilidad de los paquetes UD en el receptor, tus aplicaciones de RDMA deben asignar suficientes búferes de recepción y mantener las ranuras disponibles en la cola de finalización (CQ).

  • Recomendación estándar para alta confiabilidad: Usa las siguientes variables de entorno para especificar profundidades de cola más altas como un esfuerzo para evitar descartes de paquetes UD de la cola de recepción (RX).

    PSM3_NUM_RECV_WQES=32767
    PSM3_NUM_RECV_CQES=65536
    
  • Excepción para requisitos de memoria altos: Si tu aplicación tiene problemas de memoria insuficiente (OOM), reduce los tamaños de la cola, pero mantén la misma proporción entre los dos valores.

    Las aplicaciones como High Performance Conjugate Gradients (HPCG) tienen requisitos de memoria masivos. Si usas la configuración de la recomendación estándar para alta confiabilidad, se pueden producir errores de OOM. PSM3_NUM_RECV_WQES dicta la cantidad de entradas de la cola de trabajo (WQEs) de RX y los búferes de rebote ansiosos asignados por extremo local. Los valores más altos generan una mayor sobrecarga de memoria.

Las variables de entorno que puedes usar para mejorar la confiabilidad o el uso de la memoria son las siguientes:

  • PSM3_NUM_RECV_WQES: Establece la cantidad de WQEs de RX que se asignarán. El QP de UD tiene un tamaño de PSM3_NUM_RECV_WQES + 1032 WQEs. Este parámetro también establece la cantidad de búferes de rebote ansiosos de recepción de UD (cada uno de tamaño PSM3_MTU) que se asignan para cada extremo local.

  • PSM3_NUM_RECV_CQES: Controla la cantidad de entradas de la cola de finalización (CQEs) para las operaciones de recepción. Este parámetro ayuda a garantizar la confiabilidad de los paquetes UD en el receptor, ya que garantiza que siempre haya ranuras disponibles en la cola de finalización. Una profundidad de cola más alta, por ejemplo, 65536, ayuda a evitar descartes de paquetes UD de RX, pero usa memoria y puede provocar errores de OOM para aplicaciones con uso intensivo de memoria.

Recomendaciones para aplicaciones que no reutilizan búferes

Algunas aplicaciones, como High-performance LINPACK (HPL), asignan y liberan búferes de comunicación temporales con frecuencia en lugar de retenerlos y reutilizarlos. Este ciclo continuo de solicitud y liberación de memoria obliga al sistema a registrar y anular el registro de las páginas de memoria de forma constante, lo que crea un cuello de botella de rendimiento significativo.

  • Solución: Usa un asignador de memoria personalizado como jemalloc como solución alternativa. jemalloc es un asignador de memoria de uso general y de alto rendimiento (malloc) diseñado para enfatizar el ajuste de escala de simultaneidad y evitar la fragmentación de la memoria. Al forzar el reciclaje eficiente de búferes de comunicación grandes (más de 128 KB), esta solución omite los costosos ciclos de reasignación del kernel y restablece el rendimiento de PSM3.

  • Configuración recomendada:

    1. Instala jemalloc. Por ejemplo, en Rocky Linux, puedes ejecutar los siguientes comandos que usan los paquetes adicionales para el repositorio de Enterprise Linux (EPEL):

      sudo dnf install epel-release
      sudo dnf install jemalloc
      
    2. Precarga jemalloc y aplica límites de caché optimizados antes de ejecutar tu aplicación:

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

El comando de configuración usa los siguientes parámetros:

  • LD_PRELOAD: Especifica las bibliotecas compartidas que se cargarán antes de iniciar un proceso.
  • MALLOC_CONF: Configura el comportamiento de asignación de memoria para jemalloc.
  • dirty_decay_ms:-1 y muzzy_decay_ms:-1: Le indica a jemalloc que nunca devuelva la memoria sin usar al SO. Esto mantiene las páginas registradas de forma permanente para su reutilización inmediata.
  • lg_tcache_max:26: Aumenta el límite de caché de la memoria por subproceso a 64 MB, lo que garantiza que los búferes de comunicación grandes se almacenen en caché de forma agresiva.

¿Qué sigue?