# Kernel Enhance Kit 简介

#### 功能介绍

Kernel Enhance Kit 为开发者提供内核增强能力，包括服务质量（QoS）调度、Purgeable Memory 管理和格物服务，帮助开发者优化应用性能、资源管理和用户体验。

*   **QoS**：提供任务优先级调度能力，开发者可以根据任务的重要程度和与用户交互的关联程度，为任务设置不同的 QoS 等级，系统会根据 QoS 等级分配 CPU 时间和调度次序，优化应用响应速度和资源利用率。
    
*   **Purgeable Memory**：提供可随时丢弃的内存管理机制，用于存放容易通过重新计算构建的数据。该机制在系统低内存时可以直接释放这些内存，用户访问时再重新构建，适用于存放大块且恢复代价较小的数据。
    
*   **格物服务**：提供 QoS 感知的端侧推理加速和资源管理优化能力，针对端侧推理场景的内存资源受限、算力受限、对功耗敏感等挑战，提供动态按需加载资源、推理加速等功能，保障用户体验的同时实现高效推理。
    

#### 基本概念

#### QoS

QoS（Quality of Service）即服务质量，在 HarmonyOS 中主要指任务的优先调度属性。开发者可以利用 QoS 对要执行的工作进行分类，以指示其与用户交互的关联程度；系统则根据任务设置的 QoS 安排各任务的运行时间和运行次序。

HarmonyOS 系统定义了 6 个 QoS 等级，从低到高与用户交互的关联程度依次递增。表中的 QOS\_\* 为接口枚举项名称：

| QoS 等级 | 使用场景 | 负载特征 |
| --- | --- | --- |
| QOS_BACKGROUND | 后台且用户不可见任务，例如数据同步、备份。 | 任务完成需要几分钟甚至几小时。 |
| QOS_UTILITY | 不需要立即看到响应效果的任务，例如下载或导入数据。 | 任务完成需要几秒到几分钟。 |
| QOS_DEFAULT | 默认。 | 任务完成需要几秒钟。 |
| QOS_USER_INITIATED | 用户触发并且可见进展的任务，例如打开文档。 | 任务在几秒钟之内完成。 |
| QOS_DEADLINE_REQUEST | 越快越好的关键任务，如页面加载。 | 任务几乎是瞬间完成的。 |
| QOS_USER_INTERACTIVE | 用户交互任务（UI 线程、刷新界面、动效）。 | 任务是即时的。 |

#### Purgeable Memory

Purgeable Memory 指可以随时丢弃的内存区域，用于存放那些很容易通过重新计算构建出来的数据。该数据在系统低内存时可以被直接释放，用户访问的时候再重新构建。Purgeable Memory 适用于存放大块（至少 4KB）且恢复代价较小的数据，它在系统压力较大时优先回收（对匿名页采用类似文件页的 drop 形式，而不是压缩），再次使用时需要用户自己恢复数据再使用。

#### 格物服务

格物服务是针对端侧推理场景的 QoS 感知推理加速和资源管理优化服务。端侧推理场景具有保障用户数据隐私、部署成本低、时延低、不受网络影响的高可用性等优点，但也面临着内存资源受限、算力受限、对功耗敏感等挑战。格物服务通过动态按需加载资源、QoS 感知调度等优化手段，在保障用户体验的同时实现高效推理。

#### 功能效果

#### QoS 优化效果

合理使用 QoS 可以显著提升应用性能：

*   **线程执行优化**：通过为关键线程设置合适的 QoS 等级，可以减少线程等待时间，提高运行时间占比，减少被抢占的比例。
    
*   **RN（React Native）框架优化**：在 RN 框架中合理标记关键线程的 QoS 等级后，开源 benchmark 测试的性能提升了约 13%。
    

#### Purgeable Memory 优化效果

Purgeable Memory 在系统压力较大时优先回收，可以有效缓解内存压力：

*   适用于存放大块（至少 4KB）且恢复代价较小的数据
*   在系统低内存时直接释放，而不是压缩
*   再次使用时由用户重新构建数据

#### 格物服务优化效果

格物服务针对端侧推理场景提供以下优化：

*   **资源管理优化**：动态按需加载资源，避免资源浪费。
*   **QoS 感知调度**：根据推理任务的重要程度进行调度，保障用户体验。
*   **推理加速**：通过优化资源管理和调度，提升推理效率。

#### 约束与限制

#### QoS 使用限制

*   QoS 接口只能设置当前任务的 QoS 等级，不能设置其他任务的 QoS 等级。

#### Purgeable Memory 使用限制

*   适用于存放大块（至少 4KB）且恢复代价较小的数据。
*   再次使用时需要用户自己恢复数据再使用。

#### 格物服务使用限制

*   格物服务从 API version 20 开始支持。
*   需要依赖相关的动态链接库：libqos.so。

#### 相关文档

*   QoS 开发指导
*   Purgeable Memory 开发指导
*   格物服务开发指导