UCX使用SDMA时,报错:UCX ERROR Failed to create sdma_device[0] handle

现象描述

UCX使用SDMA时,出现如下报错:

1
UCX ERROR Failed to create sdma_device[0] handle

可能原因

在开启smmu的环境中,UCX的sm传输层默认会选择SDMA作为共享内存进行数据传输,单IO-Die中SDMA内核驱动默认总通道数为160个,其中包含独立通道数和共享通道数。MPI每启动一个业务进程,UCX会申请该进程所在IO-Die的一个SDMA共享通道。如果SDMA没有申请共享通道,MPI会在初始化阶段报错退出。如果通过命令参数-x UCX_SDMA_SHARED_CHANNEL_MODE=n选择独立通道模式,而SDMA独立通道数量申请不足,MPI同样会在初始化阶段报错退出。

恢复步骤

在使用SDMA运行业务之前,需要检查单IO-Die中SDMA内核共享通道是否大于0;如果采用独立通道模式,则需要根据业务规模手动修改SDMA内核独立通道数。由于单IO-Die中SDMA内核共享通道数和独立通道数默认总共为160个,因此可以通过修改共享通道数来间接修改独立通道数。修改方法如下:

  1. 查看当前单IO-Die中SDMA内核共享通道数。

    cat /sys/module/sdma_dae/parameters/share_chns

    1
    16
    

  2. 移除SDMA内核模块。

    rmmod sdma_dae

  3. 重新插入SDMA内核模块,并修改共享通道数。

    • 例1

      modprobe sdma_dae share_chns=160

      例如,修改共享通道数为160个,则独立通道数为0个,因此该配置允许MPI在单IO-Die中启动SDMA业务进程。

    • 例2

      modprobe sdma_dae share_chns=8

      例如,修改共享通道数为8个,则独立通道数为152个,因此该配置允许MPI在使用-x UCX_SDMA_SHARED_CHANNEL_MODE=n时,在单IO-Die中最多启动152个业务进程。