CMF介绍
项目介绍
简介
CMF(Cache Manage Framework)是基于鲲鹏硬件平台开发的缓存控制框架,由内核态驱动与命令行工具组成。
- 内核态驱动与命令行工具通过ioctl进行交互。
- 命令行工具解析用户命令行参数,通过用户态API将解析后命令发送给驱动API,驱动获取用户态参数后解析参数合法性,通过合法性校验后由硬件访问模块完成对硬件寄存器的查询与设置。
CMF通过变更硬件寄存器的值影响系统中L2 Cache(二级缓存)、L3 Cache(三级缓存)等资源的分配。
架构图

应用场景
在使用鲲鹏920新型号处理器+昇腾800I A3推理服务器部署场景下存在算子下发速度较慢,导致NPU空闲占比较高,进而造成解码时延较长问题。CMF通过变更硬件寄存器的值影响系统中L2 Cache资源的分配,使Qwen 2 1.5B模型decode(解码)时延降低7%。
此外,CMF提供对外接口,外部应用可通过直接调用应用程序接口完成与驱动的交互,从而查看与修改硬件资源的分配策略。
使用限制
- 当前仅支持物理机设置。
- 驱动加载需在root用户权限下进行。
- L2 I/D(Instruction/Data Cache)配置均不得少于2路。
- 受驱动修改限制的核不能进行电源状态切换,电源状态切换时会导致复位。典型的电源状态切换包括重启、LPI打开、非performance模式下低功耗特性等。
- 需要先加载内核态驱动,确认内核态驱动加载成功后,方可通过命令行工具对硬件寄存器进行读写。
目录结构
cmf/
├── drv # 内核态驱动源码目录
│ ├── CMakeListx.txt # 定义驱动模块的编译规则与依赖
│ ├── cman_drv.c # 驱动主逻辑,实现ioctl接口与用户态通信
│ ├── cman_drv.h # 驱动头文件,定义内部数据结构与函数声明
│ ├── hw_regs_access.c # 封装硬件寄存器读写操作的具体实现
│ ├── hw_regs_access.h # 硬件访问接口头文件,定义寄存器操作函数
│ ├── Makefile # 配合内核构建系统编译驱动模块
│ ├── platform_info.c # 获取与解析当前 CPU 平台信息的实现
│ └── platform_info.h # 平台信息接口头文件,定义平台查询函数
├── uapi # 用户态API及工具源码
│ ├── CMakeListx.txt # 定义用户态库及命令行工具的编译规则
│ ├── cmanuapi.c # 用户态 API 实现,封装 ioctl 调用逻辑
│ ├── cmanuapi.h # 用户态 API 头文件,供外部程序调用接口
│ └── devcman.cpp # 命令行工具主程序,解析参数并调用 API
├── docs # 文档目录
│ ├── zh # 中文文档目录
│ | ├── release_notes.md # 版本说明书
│ | ├── installation_guide.md # 安装指南
│ | ├── menu_cmf.md # 文档指南
│ | ├── user_guide.md # 用户指南
│ └── best_practices.md # 最佳实践
├── CMakeListx.txt # 项目构建配置文件
├── LICENSE # 开源许可证文件
├── CCBY # 开源文档许可证文件
└── README.md # 项目说明文档
版本说明
版本说明包含CMF本身的版本以及对应软硬件版本要求,具体请参见《版本说明书》。
学习文档
| 资源名称 | 资源简介 |
|---|---|
| 版本说明书 | 提供CMF每个发布版本的基础信息和特性更新信息。 |
| 项目介绍 | 提供CMF的概念和架构。 |
| 安装指南 | 提供CMF编译安装方法指导。 |
| 用户指南 | 提供CMF快速入门指导。 |
| 最佳实践 | 提供CMF使用实践案例。 |
环境部署
为保证您可以顺利安全地使用CMF,请确保所使用的环境信息在本章节提供的已验证环境范围内,具体参考《安装指南》。
用户指南
CMF命令行工具的使用方法和参数介绍。请参见《用户指南》。
贡献声明
欢迎大家为社区做贡献,如果使用过程中有任何问题/建议,或者需要反馈特性需求和bug报告,可以提交issues联系我们,具体贡献方法可参考这里。同时也欢迎大家在讨论专区展开讨论交流。感谢您的支持。
许可证书
本项目采用GPL-2.0许可证,详见LICENSE文件。 本项目文档适用CC-BY 4.0许可证,具体请参见LICENSE文件。
致谢
CMF由华为公司的下列部门联合贡献:
鲲鹏计算Boostkit开发部 感谢来自社区的每一个PR,欢迎贡献CMF!