The Unified Memory Development Kit(UMDK) is a set of distributed communication software stack with memory semantics as the core. It aims to design a new-generation network architecture through software-hardware collaboration, subvert the traditional communication form, and build a computing native network centered on memory semantic interconnection.
当前访问频次受限,请登录后继续访问
UMDK
一、UMDK介绍
灵衢内存语义开发包(UMDK)是一套以内存语义为核心的分布式通信软件库。 为数据中心网络、超节点内、服务器内的卡与卡之间提供高性能的通信接口,使能并充分发挥灵衢总线的硬件能力。

二、组件介绍
-
URMA:统一内存语义,提供了单边、双边、原子操作等远端内存操作方式,是应用之间通信的基础。提供两类接口,一是北向应用编程接口,为应用提供通信API,二是南向驱动编程接口,为驱动开发者提供接入UMDK的API。
-
CAM:超节点通信加速库,提供灵衢超节点亲和的高性能训推通信加速,北向可对接vllm/SGlang/VeRL等主流社区,南向亲和昇腾超节点硬件及组网。
-
URPC:统一远程过程调用,支持灵衢原生高性能主机间和设备间RPC通信,以及RPC加速。
-
ULOCK:统一状态同步,支持灵衢原生高性能状态同步,包含分布式锁DLock等,加速数据库等分布式应用全局资源分配。
-
USOCK:UB通信生态构建,兼容标准Socket编程接口,使能TCP应用零修改提升网络通信性能。
三、编译与安装
-
编译环境要求
-
编译环境:kernel 6.6
-
同时你需要安装以下依赖包:
yum install -y rpm-build yum install -y make yum install -y cmake yum install -y gcc yum install -y gcc-c++ yum install -y glibc-devel yum install -y openssl-devel yum install -y glib2-devel yum install -y libnl3-devel yum install -y libummu-devel yum install -y kernel-devel # ubcore is necessary from openEuler kernel
-
-
编译指导
您可以通过以下方式构建和安装umdk rpm包,下面的命令需要在源码根目录执行:
mkdir -p /root/rpmbuild/SOURCES/ tar -czf /root/rpmbuild/SOURCES/umdk-26.06.0.tar.gz --exclude=.git `ls -A` rpmbuild -ba umdk.specRPM 编译选项如下:
# 以下 --with 选项默认关闭,显式指定后开启。 # --with asan 开启 ASan # --with test 开启测试 # --with urma 开启 URMA # --with urpc 开启 URPC # --with dlock 开启 DLock # --with ums 开启 UMS # --define 'kernel_version 6.6.92' 指定内核版本 # --define 'rpm_release 0' 指定发布版本 -
部署指导
-
运行时依赖:请确认前置驱动已加载,如未加载请手动加载
cd /lib/modules/$(uname -r)/kernel/drivers insmod ub/ubfi/ubfi.ko.xz cluster=1 # 使用VF网卡时需要去掉cluster=1参数 insmod iommu/ummu-core/ummu-core.ko.xz cd /lib/modules/$(uname -r)/kernel/drivers/ub/hisi-ub/kernelspace insmod ummu/drivers/ummu.ko.xz ipver=609 insmod ubus/ubus.ko.xz ipver=609 cc_en=0 um_entry_size=1 insmod ubus/vendor/hisi/hisi_ubus.ko.xz msg_wait=2000 fe_msg=1 um_entry_size1=0 cfg_entry_offset=512 insmod ubase/ubase.ko.xz insmod unic/unic.ko.xz tx_timeout_reset_bypass=1 insmod cdma/cdma.ko.xz -
安装rpm包
rpm -ivh /root/rpmbuild/RPMS/*/umdk*.rpm cp -f /usr/bin/urma_perftest /usr/local/bin/ modprobe ubcore modprobe uburma cd /lib/modules/$(uname -r)/kernel/drivers insmod ub/hisi-ub/kernelspace/udma/udma.ko.xz dfx_switch=1 ipver=609 fast_destroy_tp=0 jfc_arm_mode=2 modprobe ubagg # 如果需要使能多路径 modprobe ums # 如果需要使能ums -
添加权限
# 如果没有权限,需要手动添加权限 chmod -R 777 /usr/lib64/urma chmod 777 /dev/ummu/tid chmod 755 /usr/lib64/liburma*
-
-
使用 Bazel 脚本编译、打包、安装和卸载 URMA(工作区根目录:
src/urma)在 UMDK 仓库根目录下,进入
src/urma运行脚本。脚本会在编译前检查编译依赖,并在安装前检查运行依赖;已满足的依赖不会处理,缺失的依赖会通过yum install -y安装。因此请确认 yum 源可用,并在存在缺失依赖时使用具备安装权限的用户执行。cd src/urma # 典型 AArch64 Release 包构建,包含 UDMA 和 libummu ./urma_bazel.sh compile --config=release --config=arm64 --define=build_udma=truecompile命令会通过 Bazel 构建固定的 URMA 打包产物,生成与 RPM 安装效果对齐的 rootfs,写入metadata/urma_version,并在src/urma下生成urma-bazel-<timestamp>.tar.gz。打包完成后,脚本会清理中间产物,包括urma_version、bazel-urma-package和 Bazel 便捷软链接。该流程不需要手动安装或链接系统中的
libummu。脚本会从src/urma/WORKSPACE或src/urma/bazel/urma_deps.bzl读取LIBUMMU_REMOTE、LIBUMMU_COMMIT、LIBUMMU_VERSION和LIBUMMU_ABI_VERSION,将指定 commit 拉取到src/urma/third_party/libummu,通过 Bazel 编译,并随 URMA 一起打入 tar 包。如果环境上已经存在
libummu,当前逻辑如下:compile不使用系统已安装的libummu,始终使用src/urma/third_party/libummu中配置 commit 对应的源码。install会安装 tar 包内置的libummu文件;如果/usr/lib64/libummu.so*等同路径文件或软链接已存在,会被包内产物替换。remove不会卸载通过 yum 安装的三方依赖,也不会删除随包安装的libummu内容。
compile后面的参数会继续传给bazel build,因此仍可按需选择架构和诊断配置:cd src/urma # x86_64 Release 包构建 ./urma_bazel.sh compile --config=release --config=x86_64 --define=build_udma=true # Debug + AddressSanitizer / LeakSanitizer / UndefinedBehaviorSanitizer ./urma_bazel.sh compile --config=debug --config=asan --define=build_udma=true # 开启 ThreadSanitizer,并启用周期性能统计 ./urma_bazel.sh compile --config=tsan --define=perf_cycle=true --define=build_udma=true将生成的 tar 包复制到目标环境后,解压并使用包内脚本安装。
install和remove需要使用 root 或 sudo 执行;脚本会按metadata/install_manifest安装文件,刷新ldconfig,在存在restorecon时恢复 SELinux 上下文,并在可用时重启 rsyslog。remove命令只卸载 manifest 中的 URMA/UDMA/TPSA 自有安装内容,不会卸载通过 yum 安装的三方库,也会保留随包安装的 libummu 内容。# 在目标环境执行 mkdir -p /tmp/urma-bazel tar -xzf urma-bazel-<timestamp>.tar.gz -C /tmp/urma-bazel /tmp/urma-bazel/urma_bazel.sh install # 后续卸载 URMA/UDMA/TPSA 打包安装内容 /tmp/urma-bazel/urma_bazel.sh remove也可以直接从归档文件执行安装或卸载:
cd src/urma ./urma_bazel.sh install urma-bazel-<timestamp>.tar.gz ./urma_bazel.sh remove urma-bazel-<timestamp>.tar.gz
四、参与贡献
我们非常欢迎开发者提交贡献,如果您发现了一个bug或者有一些想法想要交流,欢迎发邮件到dev列表 或者提交一个issue。
五、许可
代码使用的许可证详见LICENSES
doc目录下的文档使用许可证详见LICENSE