libXSched架构解析:从用户空间到内核调度的完整流程
libXSched架构解析从用户空间到内核调度的完整流程【免费下载链接】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/libXSched是openEuler社区推出的用户空间组件为各类XPU运行时提供对XSched调度框架的无缝支持。通过拦截NPU的IOCTL接口并转发给XSched内核实现了高效的设备任务调度管理是XPU资源管理的关键中间件。核心功能与架构概览libXSched的核心价值在于构建用户空间与内核调度之间的桥梁主要实现三大功能IOCTL拦截捕获NPU设备的关键操作请求请求转换将用户空间请求转换为内核可识别的格式系统调用转发通过专用系统调用与XSched内核模块通信组件采用分层设计主要包含头文件定义层、拦截层和系统调用层各模块通过函数调用和数据结构传递实现协同工作。关键文件与模块路径项目核心文件结构清晰主要包含头文件定义include/ucc_engine.h拦截实现src/ascend_hal_interceptor.c、src/fake_ioctl.c系统调用封装src/syscall.c构建脚本Makefile从用户请求到内核调度的完整流程1. IOCTL请求拦截机制当应用程序通过HAL接口如halSqCqAllocate、halSqTaskSend与NPU设备交互时libXSched通过LD_PRELOAD机制加载的共享库拦截这些调用。关键拦截点在src/ascend_hal_interceptor.c中实现通过钩子函数替换原始IOCTL调用int ioctl(int fd, unsigned long cmd, void* ioctl_arg) { int is_vstream 0, ret; // 初始化检查与拦截逻辑 ret fake_ioctl(fd, cmd, ioctl_arg, dev_id_saved, is_vstream); if (is_vstream) return ret; return orig_ioctl(fd, cmd, ioctl_arg); }2. 请求类型识别与处理拦截后的IOCTL请求在src/fake_ioctl.c中进行类型判断和参数转换。系统定义了三类关键操作TRS_SQCQ_ALLOC队列分配请求TRS_SQCQ_FREE队列释放请求TRS_SQCQ_SEND任务发送请求以队列分配为例处理流程包括参数提取、请求封装和内核调用static int trs_sqcq_alloc(void *arg, uint32_t dev_id, int fd, int *is_vstream) { struct halSqCqInputInfo *input (struct halSqCqInputInfo *)arg; vstream_args_t v_arg {0}; // 参数封装逻辑 ret handle_ioctl(ASCEND, v_arg, VSTREAM_ALLOC); // 结果处理 }3. 内核通信与系统调用处理后的请求通过src/syscall.c中的handle_ioctl函数使用专用系统调用__NR_vstream_manage默认编号456与内核XSched模块通信int handle_ioctl(int device, vstream_args_t* vargs, vstream_command_t kcmd) { switch (device) { case ASCEND: return syscall(__NR_vstream_manage, vargs, kcmd); default: return -ENODEV; } }系统调用将用户空间构建的vstream_args_t结构体和命令类型传递给内核完成从用户请求到内核调度的转换。快速上手编译与使用指南编译准备编译前需准备XSched内核头文件xcu_vstream.h可从XSched内核的include/uapi/linux目录复制到系统头文件目录cp xcu_vstream.h /usr/include/linux编译共享库执行Makefile编译生成libucc_engine.so共享库make clean make使用方式有两种加载方式可供选择方式一运行时加载单次有效LD_PRELOADpath_to_libucc run_model_cmd方式二环境变量配置当前shell会话有效export LD_PRELOADpath_to_libucc run_model_cmd总结与应用场景libXSched作为用户空间与内核调度的关键中间件通过精巧的拦截转发机制为XPU设备提供了统一的调度接口。其架构设计兼顾了兼容性与性能主要适用于需要使用XSched调度框架的AI训练与推理场景多XPU设备协同工作的高性能计算环境对任务调度延迟敏感的实时应用通过理解这一架构流程开发者可以更好地利用XSched框架的调度能力优化XPU资源使用效率。要获取完整代码和最新更新请克隆仓库git clone https://gitcode.com/openeuler/libXSched【免费下载链接】libXSchedA user space component provides seamless support for various XPUs runtimes to use XSched scheduling framework.项目地址: https://gitcode.com/openeuler/libXSched创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考