UMS
1. 介绍
UMS是一种北向兼容标准socket API,南向基于UB网络进行数据传输,透明加速TCP通信的内核网络协议栈。UMS在SMC-R协议和内核SMC-R源码基础上进行二次开发,基于UMDK实现共享内存通信协议(SMC,Shared Memory Communication),旨在充分发挥华为UB硬件设备的性能优势,提升整体网络传输效率。作为构建在UB网络架构之上的高性能通信协议,UMS提供低延迟、高吞吐量的网络传输能力,特别适用于对网络性能要求苛刻的场景,如Redis、数据库、AI训推、分布式缓存等。
2. 软件架构
向上兼容 TCP socket
ums运行在linux内核态,兼容标准socket接口,使用tcp握手协议完成建连流程(协商错误自动回退到tcp通信),并采用SMC-R的透明替换技术,应用层无需感知即可实现网络加速。
向下调用 UMDK-URMA API
底层调用华为UMDK-URMA组件能力,充分利用UB网络的性能优势。
当前基于SMC-R协议
- 遵循SMC-R协议的基本流程与数据结构设计,在此基础上进行二次开发
- 针对小消息通信场景进行延迟优化,显著提升传输效率
- 后续优化方向包括:引入多路径通信机制、增强流控策略,实现更高并发与更强鲁棒性。
- UMS未来将基于UB协议而非SMC-R协议实现
3. 安装教程
3.1 查询内核是否支持smc协议
bash
cat /boot/config-$(uname -r) | grep CONFIG_SMC显示CONFIG_SMC=m 表示当前内核版本是支持smc协议的,确认环境支持以后,再按照下面描述的步骤进行环境部署
3.2 编译UMS RPM包
从UMDK编译产物获取
参考UMDK整体编译步骤
单独编译UMS
- 进入UMDK工程根目录下
- tar -cvf /root/rpmbuild/SOURCES/umdk-26.06.0.tar.gz --exclude=.git $(ls -A)
- rpmbuild -ba umdk.spec --with ums
UMS 额外编译选项说明
- RPM compilation Options
--with ko_sign option, i.e. disable ko_sign by default.
UMS 模块参数说明
- ko insmod/modprobe Options
ub_token_disable=* option, i.e. 1:disable ub token, 0:enable ub token, default:0.
说明:开启ub token会影响性能,请使用者评估使用场景安全性,决策是否开启。
3.3 安装UMS
说明:UMS需要调用URMA组件的能力,使用前需保证URMA组件安装成功且正常配置。
bash
rpm -ivh /root/rpmbuild/RPMS/aarch64/umdk-ums-*
modprobe ums4. 使用说明
4.1 使用方式
UMS提供以下两种使用方式:
- 直接使用 创建socket时,设置为 AF_SMC 协议族,不需要修改其他socket相关接口。
c
# 示例
sockfd = socket(AF_SMC, SOCK_STREAM, 0);- 透明替换(不需要修改应用代码) 通过LD_PRELOAD:预加载libsmc-preload.so动态库,劫持应用的socket()函数,把AF_INET转换为AF_SMC类型。
bash
# 示例:透明替换./foo 应用里的TCP socket接口
ums_run ./foo4.2 安全风险及消减说明
UMS建链无认证,数据传输为明文,存在安全风险。应用在使用UMS时,应对标TCP socket,在应用层开启TLS认证和加密传输,保证端到端通信安全。
- 更多的接口使用说明详见UMS接口手册。
文档捉虫