当前位置: 首页 > news >正文

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),仅供参考

http://www.jsqmd.com/news/1097451/

相关文章:

  • 元容沙箱SDK API完全参考:动态代码运行与文件操作接口使用手册
  • 世界模型火了,可你的AI连无人机翻转都算不准——缺的不是数据而是这条公理
  • 基于知识图谱的设备物资配置优化实战指南
  • ANNC社区贡献指南:从问题反馈到代码提交的完整流程
  • openEuler高可用与集群部署终极指南:构建企业级HA架构与Kubernetes集群管理
  • 元容沙箱SDK开发者指南:贡献代码与扩展自定义隔离策略的最佳实践
  • PilotGo-plugin-llmops架构详解:Agent、Server与Web三大模块协同工作原理
  • QEMU性能优化:5个关键技巧提升虚拟机运行效率
  • 如何快速上手gala-gopher?5分钟搭建你的第一个eBPF性能监控环境
  • 别再写 @CustomDialog 了,我把它从雷达鸭代码里全删了重写
  • sysSentry系统巡检框架:10分钟快速搭建企业级硬件故障监控平台
  • Autodesk Inventor 2027 下载安装教程 专业三维机械设计工程仿真软件下载安装步骤
  • 电子管功放入门介绍:工作原理、结构、优缺点和使用注意
  • 终极指南:iTrustee_tzdriver与iTrustee OS通信机制详解
  • 如何实现浏览器直连桌面?WebRTC远程屏幕共享技术深度解析
  • OpenEuler Infrastructure部署指南:从0到1搭建社区管理平台
  • sysHAX性能优化秘籍:提升LLM推理吞吐量的7个关键技巧
  • openEuler/libummu高级特性:原子操作与令牌管理深度解析
  • UnifiedBus性能优化:如何调优异构硬件通信效率
  • 如何快速部署safeguard?5分钟入门Linux内核安全监控工具
  • 66_Python多线程与并发
  • Vue-Giant-Tree:10,000+节点海量数据树形组件的终极解决方案
  • DXVK:让Linux游戏体验媲美Windows的Vulkan转换层技术
  • 三步掌握XUnity.AutoTranslator:新手也能轻松上手的Unity游戏翻译完整指南
  • euler-copilot-shell日志管理技巧:轻松追踪和解决问题
  • safeguard挂载限制实战:防止未授权文件系统挂载的终极方案
  • AI 面谈助手自动沉淀绩效改进行动项,形成 KPI 追踪落地闭环
  • DeepInsight RAG技术深度解析:构建智能检索增强生成系统
  • UEFI安全启动签名全攻略:使用Signatrust保护你的固件
  • 别再手动装OpenOffice了!用Docker容器化部署Apache OpenOffice 4.1.13,5分钟搞定Linux服务器环境