libucc与XSched内核的协同工作:完整调度框架解析
libucc与XSched内核的协同工作:完整调度框架解析
【免费下载链接】libXSchedA user space component provides seamless support for various XPUs runtimes to use XSched scheduling framework.项目地址: https://gitcode.com/openeuler/libXSched
前往项目官网免费下载:https://ar.openeuler.org/ar/
libucc是openEuler/libXSched项目的核心用户态组件,它通过拦截NPU的IOCTL接口并借助vstream_manage系统调用,实现了各类XPU运行时与XSched调度框架的无缝协同工作,为XPU任务调度提供了高效可靠的解决方案。
核心功能与架构解析
libucc的核心作用 🚀
libucc作为用户空间与内核调度框架之间的桥梁,主要实现两大关键功能:
- IOCTL拦截:通过动态库钩子技术拦截NPU设备的IOCTL调用,如TRS_SQCQ_ALLOC(队列分配)、TRS_SQCQ_FREE(队列释放)和TRS_SQCQ_SEND(任务发送)等关键操作
- 系统调用转发:将拦截的请求通过
__NR_vstream_manage系统调用(默认编号456)转发给XSched内核,实现用户态与内核态的通信
关键数据结构与接口
在include/ucc_engine.h中定义了框架的核心接口和数据结构:
- vstream_device_t:设备类型枚举,当前支持ASCEND(昇腾)设备
- VSTREAM命令集:包含VSTREAM_ALLOC(分配流)、VSTREAM_FREE(释放流)和VSTREAM_KICK(任务通知)等操作
- handle_ioctl():核心处理函数,负责将IOCTL请求转换为XSched内核可识别的命令
编译与快速使用指南
环境准备与编译步骤
准备头文件
从XSched内核的include/uapi/linux目录复制xcu_vstream.h到头文件目录:cp xcu_vstream.h /usr/include/linux编译共享库
执行Makefile编译生成libucc_engine.so:make clean && make
两种使用方式
方式一:运行时加载(推荐)
LD_PRELOAD=<path_to_libucc> <run_model_cmd>此方式仅对当前模型运行有效,不会影响其他进程。
方式二:环境变量配置
export LD_PRELOAD=<path_to_libucc> <run_model_cmd>此方式对整个shell会话有效,适合需要多次运行模型的场景。
拦截与转发机制深度解析
IOCTL拦截实现
src/ascend_hal_interceptor.c实现了对HAL层函数和IOCTL接口的拦截:
- 通过
LD_PRELOAD技术替换系统ioctl函数 - 使用
dlsym动态加载原始函数地址,保证正常功能调用 - 对关键HAL函数(如
halSqCqAllocate、halSqTaskSend)进行封装,实现设备ID映射和请求拦截
与XSched内核的通信流程
- 初始化阶段:加载
libc.so.6和libascend_hal.so,获取原始函数地址 - 请求拦截:当应用调用NPU相关IOCTL时,触发拦截逻辑
- 参数转换:将用户态参数转换为内核可识别的
vstream_args_t结构 - 系统调用:通过
__NR_vstream_manage系统调用将请求发送给XSched内核 - 结果返回:将内核处理结果返回给应用程序
常见问题与解决方案
编译错误:缺少xcu_vstream.h
确保已按照编译步骤将xcu_vstream.h复制到/usr/include/linux目录。
运行时错误:Initialization failed
检查是否正确安装了libascend_hal.so库,或尝试重新编译libucc。
性能优化建议
- 对于高频任务,建议使用方式一(运行时加载)以减少不必要的拦截开销
- 确保共享库路径正确,避免动态链接器搜索延迟
总结
libucc作为openEuler/XSched调度框架的关键组件,通过巧妙的IOCTL拦截和系统调用转发机制,实现了用户态应用与内核调度系统的高效协同。其模块化设计不仅保证了对现有应用的兼容性,也为未来支持更多类型的XPU设备奠定了基础。
通过本文介绍的编译和使用方法,开发者可以快速集成libucc到自己的XPU应用中,充分利用XSched框架提供的强大调度能力,优化任务执行效率。
【免费下载链接】libXSchedA user space component provides seamless support for various XPUs runtimes to use XSched scheduling framework.项目地址: https://gitcode.com/openeuler/libXSched
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
