libucc与XSched内核的协同工作:完整调度框架解析

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内核可识别的命令

编译与快速使用指南

环境准备与编译步骤

  1. 准备头文件
    从XSched内核的include/uapi/linux目录复制xcu_vstream.h到头文件目录:

    cp xcu_vstream.h /usr/include/linux
  2. 编译共享库
    执行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函数(如halSqCqAllocatehalSqTaskSend)进行封装,实现设备ID映射和请求拦截

与XSched内核的通信流程

  1. 初始化阶段:加载libc.so.6libascend_hal.so,获取原始函数地址
  2. 请求拦截:当应用调用NPU相关IOCTL时,触发拦截逻辑
  3. 参数转换:将用户态参数转换为内核可识别的vstream_args_t结构
  4. 系统调用:通过__NR_vstream_manage系统调用将请求发送给XSched内核
  5. 结果返回:将内核处理结果返回给应用程序

常见问题与解决方案

编译错误:缺少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),仅供参考