이 페이지에서는 H4D 컴퓨팅 인스턴스 및 Cloud RDMA에서 실행되는 MPI 애플리케이션과 함께 사용하는 것이 좋은 PSM3 구성 매개변수를 설명합니다.
사용 가능한 모든 PSM3 구성 매개변수에 대한 자세한 내용은 Intel Ethernet Fabric Suite 호스트 소프트웨어 사용자 가이드를 참고하세요.
버스트 데이터 흐름 또는 과도한 UD 트래픽이 있는 애플리케이션 권장사항
트래픽이 갑자기 버스트되거나 신뢰할 수 없는 데이터그램 (UD) 모드에 크게 의존하는 애플리케이션은 네트워크 인터페이스를 압도하여 소스에서 패킷 손실을 일으킬 수 있습니다.
- 해결 방법: 전송 버스트를 규제하고 전송 계층에서 패킷 손실을 방지하도록 크레딧 기반 역압 시스템을 구성합니다. Compute Engine H4D 인스턴스는 총 256개의 크레딧을 제공합니다. 각 vCPU에 최소 1개의 고정 크레딧을 할당하고 나머지 용량은 공유 풀에 배치하는 것이 좋습니다.
권장 구성 (노드당 192개 순위의 예): 노드당 192개 순위의 작업에서 각 vCPU가 1개의 고정 크레딧을 가져오면 공유 풀은 256 - 192 = 64가 됩니다.
IRDMA_SHARED_UD_CREDITS=64 IRDMA_TRANSPARENT_UD_QD_OVERRIDE=1
총 크레딧 수를 권장 한도를 초과하여 늘리면 소스에서 전송이 손실될 수 있습니다. 오버서브스크라이브 (총 크레딧을 사용 가능한 크레딧보다 높게 설정)하면 안정적인 저밀도 트래픽 패턴이 있는 워크로드의 성능을 개선할 수 있지만 일반적으로 갑작스러운 버스트 또는 과도한 UD 트래픽이 특징인 워크로드의 성능은 저하됩니다.
Cloud RDMA 성능을 조정하는 데 사용할 수 있는 환경 변수는 다음과 같습니다.
- IRDMA_SHARED_UD_CREDITS: 단일 노드의 모든 프로세스에서 사용할 수 있는 UD 크레딧의 전역 풀 크기를 지정합니다. 값이 64이면 모든 프로세스에서 잠재적으로 사용할 수 있는 64개의 크레딧이 공유 예약되어 있음을 의미합니다.
- IRDMA_TRANSPARENT_UD_QD_OVERRIDE: 큐 쌍 (QP)의 큐 깊이를 제한합니다.
irdma드라이버에서 UD를 사용하는1로 설정하면IRDMA_SHARED_UD_CREDITS와 함께 작동하여 전송 계층 역압을 적용하고 과도한 다중 프로세스 로드에서 전송 큐 오버런을 방지합니다.
높은 안정성 또는 높은 메모리 요구사항이 있는 애플리케이션 권장사항
수신기 측에서 UD 패킷의 안정성을 보장하려면 RDMA 애플리케이션이 충분한 수신 버퍼를 할당하고 완료 큐 (CQ)에서 슬롯을 사용할 수 있도록 유지해야 합니다.
높은 안정성을 위한 표준 권장사항: 다음 환경 변수를 사용하여 수신 큐 (RX) UD 패킷 손실을 방지하기 위해 최선을 다해 더 높은 큐 깊이를 지정합니다.
PSM3_NUM_RECV_WQES=32767 PSM3_NUM_RECV_CQES=65536높은 메모리 요구사항의 예외: 애플리케이션에 메모리 부족 (OOM) 문제가 발생하는 경우 큐 크기를 줄이되 두 값 간의 비율은 동일하게 유지합니다.
고성능 공액 기울기 (HPCG)와 같은 애플리케이션에는 막대한 메모리 요구사항이 있습니다. 높은 안정성을 위한 표준 권장사항의 설정을 사용하면 OOM 오류가 발생할 수 있습니다.
PSM3_NUM_RECV_WQES는 로컬 엔드포인트당 할당되는 RX 작업 큐 항목(WQE) 및 적극적인 바운스 버퍼의 수를 지정합니다. 값이 높을수록 메모리 오버헤드가 커집니다.
안정성 또는 메모리 사용률을 개선하는 데 사용할 수 있는 환경 변수는 다음과 같습니다.
PSM3_NUM_RECV_WQES: 할당할 RX WQE 수를 설정합니다. UD QP는PSM3_NUM_RECV_WQES + 1032 WQEs로 크기가 조정됩니다. 이 매개변수는 각 로컬 엔드포인트에 할당되는 UD 수신 적극적인 바운스 버퍼의 수 (각각PSM3_MTU크기)도 설정합니다.PSM3_NUM_RECV_CQES: 수신 작업의 완료 큐 항목(CQE) 수를 제어합니다. 이 매개변수는 완료 큐에서 항상 슬롯을 사용할 수 있도록 하여 수신기 측에서 UD 패킷의 안정성을 보장하는 데 도움이 됩니다. 큐 깊이가 높을수록(예: 65536) RX UD 패킷 손실을 방지하는 데 도움이 되지만 메모리를 사용하며 메모리 집약적인 애플리케이션에서 OOM 오류가 발생할 수 있습니다.
버퍼를 재사용하지 않는 애플리케이션 권장사항
고성능 LINPACK (HPL)과 같은 일부 애플리케이션은 임시 통신 버퍼를 보관하고 재사용하는 대신 자주 할당하고 해제합니다. 이러한 지속적인 메모리 요청 및 해제 주기로 인해 시스템은 메모리 페이지를 지속적으로 등록 및 등록 취소하여 상당한 성능 병목 현상을 일으킵니다.
해결 방법: 해결 방법으로
jemalloc과 같은 커스텀 메모리 할당자를 사용합니다.jemalloc은 동시 실행 확장성을 강조하고 메모리 단편화를 방지하도록 설계된 고성능 범용 메모리 할당자 (malloc)입니다. 이 솔루션은 대규모 통신 버퍼 (128KB 초과)의 효율적인 재활용을 강제하여 비용이 많이 드는 커널 재할당 주기를 우회하고 PSM3 성능을 복원합니다.권장 구성:
jemalloc을 설치합니다. 예를 들어 Rocky Linux에서는 Enterprise Linux용 추가 패키지 (EPEL) 저장소를 사용하는 다음 명령어를 실행할 수 있습니다.sudo dnf install epel-release sudo dnf install jemalloc
애플리케이션을 실행하기 전에
jemalloc을 미리 로드하고 최적화된 캐시 한도를 적용합니다.LD_PRELOAD="/usr/lib64/libjemalloc.so.2" export MALLOC_CONF="dirty_decay_ms:-1,muzzy_decay_ms:-1,lg_tcache_max:26"
구성 명령어는 다음 설정을 사용합니다.
LD_PRELOAD: 프로세스를 시작하기 전에 로드할 공유 라이브러리를 지정합니다.MALLOC_CONF:jemalloc의 메모리 할당 동작을 구성합니다.dirty_decay_ms:-1및muzzy_decay_ms:-1:jemalloc에 사용하지 않는 메모리를 OS에 반환하지 않도록 지시합니다. 이렇게 하면 페이지가 즉시 재사용할 수 있도록 영구적으로 등록됩니다.lg_tcache_max:26: 스레드당 메모리 캐시 한도를 64MB로 늘려 대규모 통신 버퍼가 적극적으로 캐시되도록 합니다.