Questa pagina descrive i parametri di configurazione PSM3 che ti consigliamo di utilizzare con le applicazioni MPI in esecuzione su istanze di calcolo H4D e Cloud RDMA.
Per informazioni su tutti i parametri di configurazione PSM3 disponibili, consulta la Guida per l'utente del software host di Intel Ethernet Fabric Suite.
Consigli per applicazioni con flussi di dati burst o traffico UD elevato
Le applicazioni che subiscono picchi improvvisi di traffico o che si basano fortemente sulla modalità Unreliable Datagram (UD) possono sovraccaricare l'interfaccia di rete, causando la perdita di pacchetti all'origine.
- Soluzione: configura il sistema di contropressione basato su crediti per regolare i burst di trasmissione ed evitare la perdita di pacchetti a livello di trasporto. Un'istanza H4D di Compute Engine fornisce 256 crediti totali. Ti consigliamo di allocare a ogni vCPU un minimo di 1 credito fisso e di inserire la capacità rimanente in un pool condiviso.
Configurazione consigliata (esempio per 192 ranghi per nodo): per un'operazione con 192 ranghi per nodo, se ogni vCPU riceve 1 credito fisso, il pool condiviso sarà 256 - 192 = 64.
IRDMA_SHARED_UD_CREDITS=64 IRDMA_TRANSPARENT_UD_QD_OVERRIDE=1
L'aumento del numero totale di crediti oltre i limiti consigliati potrebbe causare interruzioni di trasmissione all'origine. Sebbene l'oversubscription (l'impostazione di crediti totali superiori a quelli disponibili) possa migliorare le prestazioni per i workload con pattern di traffico stabili e a bassa densità, in genere peggiora le prestazioni per i workload caratterizzati da burst improvvisi o traffico UD elevato.
Le variabili di ambiente che puoi utilizzare per ottimizzare le prestazioni di Cloud RDMA sono le seguenti:
- IRDMA_SHARED_UD_CREDITS: specifica le dimensioni di un pool globale di crediti UD disponibili per tutti i processi su un singolo nodo. Con un valore di 64, significa che esiste una riserva condivisa di 64 crediti che qualsiasi processo può potenzialmente utilizzare.
- IRDMA_TRANSPARENT_UD_QD_OVERRIDE: limita la profondità della coda per le coppie di code (QP)
che utilizzano UD nel driver
irdma. Se impostato su1, funziona conIRDMA_SHARED_UD_CREDITSper applicare la contropressione a livello di trasporto ed evitare l'overflow della coda di trasmissione in caso di carichi elevati di più processi.
Consigli per applicazioni con requisiti di alta affidabilità o memoria elevati
Per garantire l'affidabilità dei pacchetti UD sul lato del ricevitore, le applicazioni RDMA devono allocare buffer di ricezione sufficienti e mantenere gli slot disponibili nella coda di completamento (CQ).
Consiglio standard per l'alta affidabilità: utilizza le seguenti variabili di ambiente per specificare profondità di coda più elevate come best effort per evitare la perdita di pacchetti UD della coda di ricezione (RX).
PSM3_NUM_RECV_WQES=32767 PSM3_NUM_RECV_CQES=65536Eccezione per requisiti di memoria elevati: se l'applicazione riscontra problemi di esaurimento della memoria (OOM), riduci le dimensioni delle code, ma mantieni la stessa proporzione tra i due valori.
Applicazioni come High Performance Conjugate Gradients (HPCG) hanno requisiti di memoria elevati. L'utilizzo delle impostazioni per il consiglio standard per l'alta affidabilità può causare errori OOM.
PSM3_NUM_RECV_WQESdetermina il numero di voci della coda di lavoro RX (WQE) e i buffer di rimbalzo eager allocati per ogni endpoint locale. Valori più elevati comportano un overhead di memoria maggiore.
Le variabili di ambiente che puoi utilizzare per migliorare l'affidabilità o l'utilizzo della memoria sono:
PSM3_NUM_RECV_WQES: imposta il numero di WQE RX da allocare. La QP UD ha dimensioni pari aPSM3_NUM_RECV_WQES + 1032 WQEs. Questo parametro imposta anche il numero di buffer di rimbalzo eager di ricezione UD (ognuno di dimensioniPSM3_MTU) allocati per ogni endpoint locale.PSM3_NUM_RECV_CQES: controlla il numero di voci della coda di completamento (CQE) per le operazioni di ricezione. Questo parametro contribuisce a garantire l'affidabilità dei pacchetti UD sul lato del ricevitore, assicurando che siano sempre disponibili slot nella coda di completamento. Una profondità di coda maggiore, ad esempio 65536, aiuta a evitare la perdita di pacchetti UD RX, ma utilizza la memoria e può causare errori OOM per le applicazioni che utilizzano molta memoria.
Consigli per applicazioni che non riutilizzano i buffer
Alcune applicazioni, come High-performance LINPACK (HPL), allocano e liberano frequentemente i buffer di comunicazione temporanei anziché conservarli e riutilizzarli. Questo ciclo continuo di richiesta e rilascio della memoria costringe il sistema a registrare e annullare costantemente la registrazione delle pagine di memoria, creando un collo di bottiglia significativo delle prestazioni.
Soluzione: utilizza un allocatore di memoria personalizzato come
jemalloccome soluzione alternativa.jemallocè un allocatore di memoria (malloc) per uso generico ad alte prestazioni progettato per enfatizzare la scalabilità della concorrenza ed evitare la frammentazione della memoria. Forzando il riciclo efficiente di buffer di comunicazione di grandi dimensioni (maggiori di 128 KB), questa soluzione aggira i costosi cicli di riallocazione del kernel e ripristina le prestazioni di PSM3.Configurazione consigliata:
Installa
jemalloc. Ad esempio, su Rocky Linux puoi eseguire i seguenti comandi che utilizzano i pacchetti aggiuntivi per il repository Enterprise Linux (EPEL):sudo dnf install epel-release sudo dnf install jemalloc
Precarica
jemalloce applica i limiti della cache ottimizzati prima di eseguire l'applicazione:LD_PRELOAD="/usr/lib64/libjemalloc.so.2" export MALLOC_CONF="dirty_decay_ms:-1,muzzy_decay_ms:-1,lg_tcache_max:26"
Il comando di configurazione utilizza le seguenti impostazioni:
LD_PRELOAD: specifica le librerie condivise da caricare prima di avviare un processo.MALLOC_CONF: configura il comportamento di allocazione della memoria perjemalloc.dirty_decay_ms:-1emuzzy_decay_ms:-1: indica ajemallocdi non restituire mai la memoria inutilizzata al sistema operativo. In questo modo le pagine rimangono registrate in modo permanente per il riutilizzo immediato.lg_tcache_max:26: aumenta il limite della cache di memoria per thread a 64 MB, il che garantisce che i buffer di comunicazione di grandi dimensioni vengano memorizzati nella cache in modo aggressivo.
Passaggi successivi
- Consulta altri consigli per l'ottimizzazione delle prestazioni in Ottimizzare e scalare MPI con Cloud RDMA.